数据库基础01-数据库入门与生态
数据库入门与生态:从概念到选型
目录
为什么学数据库
0.1 数据库在运维里的位置
回顾前面「nginx」文档搭的 LAMP/LEMP 架构:Linux + Apache(或 Nginx)+ MariaDB/MySQL + PHP。那个「M」就是数据库。网站的动态内容(用户、订单、文章、配置)都存进数据库,应用后端通过 SQL 读写它,再把结果渲染成网页。
所以对运维来说,数据库不是可选项,而是绝大多数业务系统的数据中枢。业务稳不稳、快不快,很大程度取决于数据库有没有被正确地安装、配置、优化与备份。这也是为什么数据库是中级 Linux 运维的必修课。
0.2 内容范围
数据库内容很多,本篇聚焦「是什么、怎么选」:讲清数据库是什么、关系模型、数据库分类,以及国内主流数据库与选型。核心示例围绕 MySQL/MariaDB(国内主流且与前面 LAMP 呼应),学习环境以 Rocky Linux 9 / RHEL 9 为主,Debian/Ubuntu 的差异会单独标注。
0.3 阅读前提
- 已掌握前面「中级」文档的 Linux 基础(软件管理、服务 systemd、防火墙、SELinux);
- 会基本命令行操作;
- 本文讲概念与选型;动手安装与配置在《数据库安装与配置》中展开。
一、什么是数据库与数据库管理系统
1.1 两个容易混淆的词
- 数据库(Database):一个逻辑上的数据集合,可以理解成「装数据的仓库」,里面按表组织数据;
- 数据库管理系统(DBMS):管理和操作数据库的软件,如 MySQL、MariaDB、PostgreSQL。它负责数据的存储、检索、安全、并发等。
平时说「装一个 MariaDB」,装的是 MariaDB 这个 DBMS;装好后再在里面创建多个数据库。这就好比「装了个 Excel 软件(DBMS),里面可以有多个工作簿(数据库),每个工作簿里有多张工作表(表)」。
1.2 为什么需要数据库,而不是直接用文件
你可能想:数据存成文件(如 CSV)不就行了?但业务数据有这些诉求,文件很难满足:
- 并发访问:多个用户/程序同时读写,数据库能管理并发、防止互相覆盖;
- 一致性:转账这类操作要「要么全成功要么全失败」,数据库用事务保证;
- 查询能力:按条件快速查、排序、统计、跨表关联,SQL 比手工翻文件强太多;
- 安全与权限:按账号控制谁能读谁能写;
- 可靠性:崩溃恢复、备份、日志。
所以数据库是「把数据管好、查好、保护好」的专门工具。
1.3 关系型与非关系型:先有个整体印象
数据库大体分**关系型(SQL)和非关系型(NoSQL)**两大类。本文后续会详细讲(第 3 章)。这里先记住:
- 关系型:数据组织成「表 + 行 + 列」,结构严谨、支持 SQL、保证一致性,是绝大多数业务系统的核心存储;
- 非关系型:为了性能、海量数据、灵活结构而出现,常见于缓存、日志、大数据等场景。
二、关系型数据库核心概念
2.1 表、行、列与字段
关系型数据库把数据组织成 表(table),像一张 Excel 表:
用户表 user(表名)
┌────┬───────────┬───────────────┬────────────┐
│ id │ username │ email │ created_at │ ← 列/字段(column)
├────┼───────────┼───────────────┼────────────┤
│ 1 │ alice │ a@ex.com │ 2024-01-01 │ ← 一行记录(row)
│ 2 │ bob │ b@ex.com │ 2024-02-03 │
└────┴───────────┴───────────────┴────────────┘
| 术语 | 含义 | 类比 Excel |
|---|---|---|
| 表(table) | 一组结构化数据的集合 | 一张工作表 |
| 列 / 字段(column / field) | 表的一个属性维度,有固定类型 | 一列 |
| 行 / 记录(row / record) | 一条完整的数据 | 一行 |
| 主键(primary key) | 唯一标识一行的字段 | 编号列 |
| 外键(foreign key) | 关联另一张表的字段 | 跨表关联列 |
2.2 主键、唯一键、索引与约束
主键(PRIMARY KEY)
主键用来唯一标识每一行,要求非空且唯一,一张表只能有一个主键。最常用的是一个自增整数 id,让数据库自动编号。
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL
);
唯一键(UNIQUE)
唯一键也要求值不重复,但允许为空,一张表可有多个。常用于保证邮箱、手机号等业务字段不重复:
CREATE TABLE user (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
索引(INDEX)
索引是数据库为加速查询建的「目录」,不重建数据、只让 WHERE 查找更快。主键会自动建索引。给高频查询字段加索引是优化慢查询的常见手段。
CREATE INDEX idx_email ON user(email);
约束(CONSTRAINT)
约束限定数据的合法性:NOT NULL(非空)、UNIQUE(唯一)、PRIMARY KEY(主键)、FOREIGN KEY(外键)、CHECK(取值范围)、DEFAULT(默认值)。它们在建表时定义,从源头保证数据质量。
2.3 MySQL 与 MariaDB 的关系(先搞清楚再选型)
MariaDB 是 MySQL 的一个分支(fork)。2010 年 Oracle 收购 MySQL 后,原 MySQL 创始人担心其未来会闭源,于是在 MySQL 代码基础上另起炉灶开发了 MariaDB,保持开源、并与 MySQL 高度兼容。二者在 SQL 语法、命令行、端口、socket 上兼容,可以看作「即插即用」的关系。
选型层面的实际结论:
- Rocky / RHEL 9 与 Debian / Ubuntu 的官方仓库提供的都是 MariaDB,
dnf install mariadb-server或apt install mariadb-server装到的就是 MariaDB; - 想装 MySQL 官方版需额外加官方仓库,步骤更多;
- 对绝大多数业务,直接用发行版自带的 MariaDB 即可,SQL 用法与 MySQL 一样;
- 运维细节差异:服务名是
mariadb、安全工具叫mariadb-secure-installation、10.4 起 root 默认走 unix_socket 认证等。
2.4 关系型数据库的组织结构
一个 DBMS 实例从上到下大致是:
DBMS(如 MariaDB)
└─ 数据库 database(如 shop、blog)
├─ 表 table(如 user、order)
│ ├─ 列 column / 字段
│ └─ 行 row / 记录
└─ 视图 view / 索引 index / 存储过程 等
运维日常最常打交道的还是**库(database)→ 表(table)→ 行(row)**这三层。---
三、数据库的分类:关系型与非关系型
掌握数据库分类,是理解「为什么会有这么多数据库」和「该用哪个」的基础。数据库总体上分两大类:关系型与非关系型(NoSQL)。
3.1 关系型数据库(Relational / SQL)
关系型数据库以「表 + 行 + 列」组织数据,有固定的表结构(Schema),用 SQL 查询,靠主键/外键建立表间关系,支持 ACID 事务保证强一致性。它的优势是结构清晰、查询强大、数据可靠,适合需要强一致性的业务核心数据。
常见的关系型产品:MySQL、MariaDB、PostgreSQL、Oracle、SQL Server。它们使用基本一致的 SQL 标准,学会一个能较快迁移到另一个。
3.2 非关系型数据库(NoSQL)
非关系型是为突破关系型在超大规模、高性能、灵活结构上的限制而出现的。通常弱化固定结构、支持水平扩展,但往往弱化或牺牲 ACID 强一致。NoSQL 不是一个东西,而是一大类,按数据模型再细分:
| 子类 | 数据模型 | 代表 | 擅长 | 典型场景 |
|---|---|---|---|---|
| 键值型(Key-Value) | Key → Value 简单映射 | Redis、DynamoDB | 极高读写性能、低延迟 | 缓存、会话、排行榜、分布式锁 |
| 文档型(Document) | JSON/BSON 文档,结构灵活 | MongoDB、CouchDB | 半结构化、灵活迭代 | 内容管理、用户资料、日志 |
| 列族型(Wide-Column) | 按列族存储,行键+列 | Cassandra、HBase | 海量写入、线性扩展 | 物联网海量数据、社交时间线 |
| 图数据库(Graph) | 节点 + 边 + 属性 | Neo4j | 复杂关系/多跳查询 | 社交网络、知识图谱、反欺诈 |
| 搜索引擎(Search) | 倒排索引 | Elasticsearch | 全文检索、聚合分析 | 站内搜索、日志/APM 分析 |
| 时间序列型(Time-Series) | 时间戳 + 测量值 + 标签 | InfluxDB、TimescaleDB | 海量时序写入与压缩 | 监控指标、物联网传感器 |
3.3 关系型 vs 非关系型:怎么选
| 维度 | 关系型(SQL) | 非关系型(NoSQL) |
|---|---|---|
| 数据模型 | 表 + 行 + 列,固定结构 | 键值/文档/图等,结构灵活 |
| 一致性 | 强一致(ACID) | 多偏最终一致 |
| 扩展性 | 垂直为主,水平扩展需分库分表 | 天然水平扩展 |
| 查询 | 强大的 SQL(关联、聚合) | 各有侧重,弱跨类型关联 |
| 适用 | 业务核心、强一致、复杂查询 | 缓存、海量、高并发、灵活结构 |
| 举例 | MySQL、PostgreSQL、Oracle | Redis、MongoDB、ES |
实际系统常常混合使用:业务主数据放关系型(如 MySQL),热点数据用 Redis 做缓存,日志检索用 Elasticsearch。它们不是互斥,而是各司其职。
3.4 新出现的数据库形态
- NewSQL(如 TiDB):想同时要「关系型的 SQL + 事务」和「分布式的水平扩展」,于是出现的新一代分布式数据库,兼容 MySQL 协议,支持混合事务/分析负载;
- 云原生数据库(如阿里云 PolarDB、AWS Aurora):面向云设计,存储与计算分离、弹性扩缩容、高可用自动恢复,兼容 MySQL/PG/Oracle 引擎,由云厂商托管运维;
- 内存数据库(Redis):数据主要驻留内存,亚毫秒级延迟,既能做缓存,也能带持久化做数据存储。
3.5 一句话分类总结
关系型 = 严谨可靠的数据核心;NoSQL = 面向性能/海量/灵活的场景化方案;NewSQL/云原生 = 关系型的分布式与云端升级。 运维先扎实掌握关系型(尤其 MySQL),再按需了解 NoSQL。
四、国内主流数据库与选型
这一节回答最实际的问题:国内企业到底在用哪些数据库?我该以哪个为主?
4.1 最主流:MySQL 仍是绝对主力
根据 CSDN《2024 中国开发者调查报告》,国内开发者中 MySQL 的使用率高达 65%、排名第一,Redis(25%)第二、Oracle(23%)第三。在国内后端/运维岗位的招聘与面试里,MySQL 基本是必问项(索引、事务、锁、主从、分库分表、性能优化等)。国内大量存量核心业务都跑在 MySQL 上。
所以结论很明确:国内学数据库,MySQL 是绕不开的第一选择。
4.2 常见的其他数据库及场景
| 数据库 | 类型 | 国内典型场景 |
|---|---|---|
| MySQL | 关系型(开源) | 互联网/中小业务/Web 后端,生态与人才最丰富 |
| MariaDB | 关系型(MySQL 分支) | 与 MySQL 兼容,中小场景,Linux 发行版默认 |
| PostgreSQL | 关系型(开源) | 功能全面的开源库,全球增长最快,新项目/国际化趋势 |
| Oracle | 关系型(商业) | 银行/电信/政企核心系统存量霸主,正被信创替换 |
| SQL Server | 关系型(商业) | 老牌 Windows 生态企业应用,占比收缩 |
| 国产(OceanBase/TiDB/openGauss/达梦/人大金仓/GaussDB 等) | 关系型/分布式 | 信创、政企、金融核心,增长显著 |
PostgreSQL 的增长值得注意:Stack Overflow《2024 开发者调查》显示它已连续两年超越 MySQL 成为全球最受欢迎的数据库(Postgres 48.7% vs MySQL 40.3%)。但在国内存量与招聘市场,MySQL 仍是绝对主力,PostgreSQL 增长快但基数仍低于 MySQL。
国产数据库在信创/政企新增市场增长很快(例如 openGauss 系在 2024 年线下集中式关系型数据库新增市场份额超过 30%),且多数与 MySQL/PG 兼容——学好 MySQL/PG,迁移到国产库会平滑很多。
4.3 云数据库:还要不要自己装
国内云数据库(阿里云 RDS/PolarDB、腾讯云 CDB 等)普及度已经很高,提供全托管的自动备份、高可用、扩缩容,中小企业甚至不需要专职 DBA。这意味着「自己装库、自己调参、自己搭主从」的需求在下降。
但运维价值并没有消失,而是重心转移:SQL 与索引调优、慢查询排查、成本优化、监控、迁移上云、数据安全与备份策略——这些「懂数据库原理和 SQL」的底层能力,恰恰是托管化之后反而更稀缺的技能。
一句话:云化省去的是「搭环境」的体力活,不是「懂数据库」的脑力活。会自己装、会 SQL、会排错,仍是最稳的底子。
五、学什么有优势:学习路径建议
综合上面的事实,给出一条务实的数据库学习路径。
5.1 第一步:扎实学好 MySQL(含 MariaDB)
- 国内使用率第一、面试必考,几乎每个后端/运维岗位都要求;
- 生态成熟、资料海量、学习曲线平缓,容易上手;
- 大量存量系统都是 MySQL,学到即可在工作中复用。
本系列正是以 MySQL/MariaDB 为主线。把「安装配置 → SQL → 权限 → 备份 → 排错」这一套走通,即可具备最通用、最常用的数据库运维能力。
5.2 第二步:补上 Redis(缓存)
国内使用率第二(25%)、面试高频,是缓存/中间件的事实标准。理解「MySQL 存主数据、Redis 做缓存加速」这个经典组合,对理解和优化 Web 架构非常有用。
5.3 第三步(进阶/趋势):PostgreSQL + 国产库 + 云
- PostgreSQL:全球增长最快、功能最全的开源库,学习成本与 MySQL 接近,懂 MySQL 再学 PG 很快,是国际化和新项目趋势的加分项;
- 了解一门国产库(openGauss、达梦、OceanBase 等):信创趋势下政企岗位的加分项,且多与 MySQL/PG 兼容,迁移平滑;
- 了解云托管用法(RDS/PolarDB/CDB):会看监控、做迁移、做调优,是云时代的运维基本功。
5.4 给初学者的建议
- 先把 MySQL/MariaDB 的安装、SQL、权限、备份、排错走通,别一上来贪多;
- 动手 > 只看:每篇都在真实机器上执行,报错就按篇 5 的排错思路解决;
- 理解概念 > 背命令:主键/外键/索引/事务这些概念是根基,命令记不住可以查;
- 走通后再向 Redis、PostgreSQL、云数据库扩展,路径很顺。
六、总结
- 数据库是业务的数据中枢,运维必须掌握;
- 关系型以表/行/列组织数据,靠主键/外键/索引/约束保证质量,支持 ACID 事务;MariaDB 是 MySQL 的分支,二者兼容,发行版默认提供 MariaDB;
- 数据库分类:关系型(SQL) vs 非关系型(NoSQL);NoSQL 又分键值/文档/列族/图/搜索/时序等;还有 NewSQL、云原生等新形态;
- 国内现状:MySQL 仍是绝对主流(使用率 65% 第一),PostgreSQL 全球增长最快,国产库在信创市场增长显著,云数据库普及但底层能力仍是核心价值;
- 学习路径:先学好 MySQL(含 MariaDB),再补 Redis,之后按需扩展 PostgreSQL 与国产库/云托管。
动手安装与配置 MariaDB 的具体步骤见《数据库安装与配置》。
参考资料
- CSDN《2024 中国开发者调查报告》:https://www.w3cschool.cn/article/41682286.html
- Stack Overflow 2024 Developer Survey:https://survey.stackoverflow.co/2024/technology
- DB-Engines 数据库排名:https://db-engines.com/en/ranking
- Google Cloud《What is NoSQL?》:https://cloud.google.com/discover/what-is-nosql?hl=en
- MongoDB 官方(为什么用 MongoDB):https://www.mongodb.com/resources/products/fundamentals/why-use-mongodb
- Redis 官方:https://redis.io/
- Neo4j 官方:https://neo4j.com/
- InfluxDB 官方文档:https://docs.influxdata.com/
- TiDB(PingCAP)官方文档:https://github.com/pingcap/docs-cn
- AWS Aurora:https://aws.amazon.com/rds/aurora/
- 阿里云 PolarDB 架构:https://help.aliyun.com/en/polardb/polardb-for-postgresql/polardb-for-postgresql-architecture
- 中国信通院《数据库发展研究报告 2025》:http://www.zqrb.cn/finance/hongguanjingji/2025-07-17/A1752742028130.html
- 极客公园(openGauss 系份额报道):https://www.geekpark.net/news/344774
