本文直接补齐关系型数据库的基本概念和常用操作。
本篇进一步落到实际数据库系统,重点介绍 Linux 运维中非常常见的 MySQL 与 PostgreSQL。内容覆盖数据库安装与服务管理、用户与权限、备份与恢复、日志、故障排查、性能与索引,以及复制和高可用的基础概念。
本文关注的是“如何理解和管理数据库系统”,而不是完整的 SQL 教程,因此不会展开大量 SQL 语法,也暂不讨论 Redis、MongoDB 等 NoSQL 数据库。
MySQL 与 PostgreSQL
MySQL 和 PostgreSQL 都属于:
关系型数据库管理系统(RDBMS)
它们都以:
TableRowColumnPrimary KeyTransactionIndexSQL等概念为基础。
但两者在:
SQL 能力事务实现索引类型扩展机制权限模型存储架构复制等方面存在明显差异。
可以先建立这样的认识:
关系型数据库 │ ├── MySQL │ └── PostgreSQL它们解决的是相似的问题,但并不是:
两个名字不同、完全相同的数据库更准确地说:
MySQL 和 PostgreSQL 是两个独立的 DBMS,各自拥有不同的实现和运维体系。
MySQL
MySQL 是什么
MySQL 是一种广泛使用的关系型数据库管理系统。
现代 Linux 环境中,MySQL Server 通常由:
mysqld提供服务。
MySQL 官方文档将 mysqld 描述为执行 MySQL Server 核心工作的多线程服务器程序,它负责监听客户端连接并管理数据目录中的数据库和表。MySQL Reference Manual
可以简单理解为:
MySQL Client │ ▼ mysqld │ ├── Connection ├── SQL ├── Transaction ├── Buffer ├── Log └── Storage Engine │ ▼ DatabaseMySQL 安装
Debian / Ubuntu
例如使用系统的软件包管理器:
sudo apt updatesudo apt install mysql-server安装完成后可以:
mysql --version查看客户端版本。
然后检查服务:
sudo systemctl status mysqlMySQL 官方 APT 安装文档也以 mysql-server 软件包和 systemctl 作为 Debian / Ubuntu 环境中的典型安装与管理方式。Installing MySQL with APT
RHEL 系
在 RHEL 系环境中,具体安装方式取决于:
发行版版本MySQL 官方仓库系统仓库实际安装前应确认仓库和版本策略。
安装完成后,服务名称可能是:
mysqld可以:
sudo systemctl status mysqld查看。
MySQL 官方文档也明确说明,使用 RPM 系安装时通常由 systemd 管理 MySQL 服务。Managing MySQL Server with systemd
MySQL 服务管理
常见命令:
sudo systemctl start mysqlsudo systemctl stop mysqlsudo systemctl restart mysqlsudo systemctl status mysqlRHEL 系环境中可能使用:
sudo systemctl start mysqldsudo systemctl stop mysqldsudo systemctl restart mysqldsudo systemctl status mysqld具体服务名要以实际系统为准。
设置开机启动:
sudo systemctl enable mysql或者:
sudo systemctl enable mysqldMySQL 初始安全配置
数据库安装完成后,不应该直接认为:
“服务启动了 = 可以投入生产”还需要处理:
管理员账户密码 / 认证匿名账户远程访问测试数据库权限MySQL 官方安全指南建议遵循最小权限原则,并通过 GRANT / REVOKE 控制账户权限,不应随意授予过大的权限。MySQL Security Guidelines
MySQL 用户与权限
创建用户
MySQL 中使用:
CREATE USER 'app'@'localhost'IDENTIFIED BY 'strong-password';这里:
app是数据库账户。
而:
'localhost'表示这个账户对应的来源主机条件。
因此 MySQL 的账户概念可以理解为:
用户名+主机条件例如:
'app'@'localhost''app'@'192.168.1.10''app'@'%'在权限意义上并不等价。
授予权限
例如:
GRANT SELECT, INSERT, UPDATEON appdb.*TO 'app'@'localhost';表示:
数据库 appdb↓允许 app↓SELECT / INSERT / UPDATE查看权限:
SHOW GRANTS FOR 'app'@'localhost';撤销:
REVOKE UPDATEON appdb.*FROM 'app'@'localhost';MySQL 官方推荐通过 GRANT、REVOKE 等机制管理权限,并强调不要授予超出需要范围的权限。MySQL Security Guidelines
MySQL 远程访问
很多数据库“连接不上”的问题并不一定是:
用户名密码错误还可能是:
监听地址端口防火墙账户 Host 条件认证插件例如:
应用服务器192.168.1.10
MySQL192.168.1.20:3306需要同时确认:
网络可达+3306 可访问+MySQL 正在监听+账户允许该来源连接因此:
数据库用户权限和 Linux 网络防火墙是两个不同层次的问题。
PostgreSQL
PostgreSQL 是什么
PostgreSQL 是另一套成熟的开源关系型数据库管理系统。
它具有:
SQLTransactionMVCCIndexWALReplication等完整数据库能力。
官方 PostgreSQL 18 文档将数据库服务器管理划分为:
InstallationServer Setup and OperationServer ConfigurationClient AuthenticationDatabase RolesBackup and RestoreHigh Availability / Replication等章节。PostgreSQL 18 Documentation
PostgreSQL 安装
Debian / Ubuntu
例如:
sudo apt updatesudo apt install postgresql查看版本:
psql --version检查服务:
sudo systemctl status postgresqlPostgreSQL 的 Cluster
PostgreSQL 与 MySQL 的一个重要区别,是它经常使用:
Database Cluster
这一概念。
这里的 Cluster 不一定指:
多台服务器组成的集群而是:
一个 PostgreSQL Server 实例管理的一组数据库及其共享系统对象。
可以简单理解:
PostgreSQL Instance │ ▼ Database Cluster │ ┌────┼────┐ ▼ ▼ ▼ db1 db2 db3这与 PostgreSQL 的具体目录结构和系统目录管理方式有关。
因此不要把:
PostgreSQL Cluster和:
PostgreSQL High-Availability Cluster直接画等号。
PostgreSQL 服务管理
使用 systemd 时:
sudo systemctl start postgresqlsudo systemctl stop postgresqlsudo systemctl restart postgresqlsudo systemctl status postgresql开机启动:
sudo systemctl enable postgresql具体服务单元名称可能随着发行版和 PostgreSQL 安装方式有所差异。
PostgreSQL 用户与 Role
PostgreSQL 使用:
Role(角色)
管理数据库身份和权限。
官方文档明确指出:
PostgreSQL 将“用户”和“组”的概念统一在 Role 中。
一个 Role 可以:
登录数据库拥有对象拥有权限继承其他 Role 的权限例如:
CREATE ROLE app LOGIN PASSWORD 'strong-password';这里:
app↓Role
LOGIN↓允许登录可以参考官方 Database Roles。
PostgreSQL 权限
例如:
GRANT CONNECTON DATABASE appdbTO app;对表授权:
GRANT SELECT, INSERT, UPDATEON TABLE usersTO app;撤销:
REVOKE UPDATEON TABLE usersFROM app;PostgreSQL 权限通常涉及:
DatabaseSchemaTableSequenceFunction等对象。
因此在排查:
permission denied时,需要先确定:
哪个 Role+哪个对象+缺少什么权限MySQL 与 PostgreSQL 权限模型对比
两者都有:
User / RolePrivilegeGrantRevoke但模型不同。
可以粗略理解:
MySQL↓Account(user + host)
PostgreSQL↓Role(Login / Membership / Privilege)因此不能把 MySQL 的权限命令机械搬到 PostgreSQL。
例如:
MySQL'user'@'host'
PostgreSQLRole这就是两个 DBMS 在权限模型上的明显差异。
数据库连接
客户端连接数据库
MySQL 常见:
mysql -h 127.0.0.1 -P 3306 -u app -pPostgreSQL 常见:
psql -h 127.0.0.1 -p 5432 -U app -d appdb连接信息通常包含:
HostPortDatabaseUserPassword默认端口
常见默认端口:
| 数据库 | 默认端口 |
|---|---|
| MySQL | 3306 |
| PostgreSQL | 5432 |
例如:
MySQL192.168.1.20:3306
PostgreSQL192.168.1.20:5432实际部署时当然可以修改。
因此排查连接问题时:
不要假设数据库一定监听默认端口。
首先应该使用:
ss -lntp确认实际监听情况。
连接池
Web 应用通常不会对每一个 HTTP 请求都重新创建数据库连接。
更典型的方式是:
Application │ ▼Connection Pool │ ┌───┼───┐ ▼ ▼ ▼ C1 C2 C3 │ ▼ DBMS请求:
HTTP Request │ ▼Application │ ▼获取连接 │ ▼执行 SQL │ ▼归还连接连接池过小:
请求等待连接连接池过大:
数据库连接数过多↓内存 / CPU / 锁压力增加因此:
连接池是应用与数据库之间的重要容量控制点。
数据库备份
为什么需要备份
数据库存在:
磁盘损坏误删误更新程序 Bug人为操作错误勒索 / 攻击等风险。
因此:
数据库必须存在独立于数据库本身正常运行机制之外的备份策略。
需要区分:
事务持久性和:
备份前者解决:
数据库崩溃恢复后者解决:
人为 / 逻辑 / 灾难性数据损失MySQL 备份
mysqldump
MySQL 中最常见的逻辑备份工具之一:
mysqldump -u root -p appdb > appdb.sql得到:
appdb.sql之后可以恢复:
mysql -u root -p appdb < appdb.sql可以简单理解:
Database │ ▼mysqldump │ ▼SQL Dump │ ▼恢复 │ ▼DatabaseMySQL 逻辑备份的特点
逻辑备份的优势:
可读通用迁移方便但缺点也很明显:
数据量大时速度较慢恢复时间可能较长需要执行大量 SQL因此大型数据库不能只依赖简单的 mysqldump。
MySQL 官方文档对逻辑备份、恢复以及其他备份方式都有专门说明。MySQL Backup and Recovery
MySQL 物理备份
物理备份更接近:
复制数据库文件而不是:
导出 SQL例如:
Data Directory │ ▼Physical Backup │ ▼Restore物理备份通常更适合:
大型数据库快速恢复完整实例迁移但它通常要求:
备份工具数据库状态文件一致性版本兼容等条件更加严格。
MySQL 官方的备份文档同时涵盖逻辑和物理备份方案。
PostgreSQL 备份
PostgreSQL 常见的逻辑备份工具:
pg_dumppg_dumpall例如:
pg_dump -U app appdb > appdb.sql恢复:
psql -U app -d appdb < appdb.sql这里:
pg_dump↓备份单个数据库
pg_dumpall↓备份整个 PostgreSQL Cluster 的逻辑对象PostgreSQL 自定义格式备份
pg_dump 不一定只能输出纯 SQL。
例如:
pg_dump -Fc -U app appdb > appdb.dump然后可以通过:
pg_restore -U app -d appdb appdb.dump进行恢复。
相比普通 SQL dump:
Custom Format↓更适合配合 pg_restore↓可以进行更灵活的恢复操作PostgreSQL 物理备份
PostgreSQL 还支持基于:
Base Backup+WAL的物理备份和恢复体系。
例如:
Base Backup + WAL │ ▼恢复数据库这与 PostgreSQL 的:
WAL(Write-Ahead Logging)
机制密切相关。
官方文档对 Backup and Restore 以及 WAL 归档、基础备份等内容都有详细说明。
MySQL 与 PostgreSQL 备份方式对比
| 方式 | MySQL | PostgreSQL |
|---|---|---|
| 逻辑备份 | mysqldump | pg_dump |
| 全局逻辑备份 | mysqldump 等 | pg_dumpall |
| 物理备份 | 有 | 有 |
| 日志恢复能力 | Binlog 等 | WAL |
| 大型生产环境 | 通常需要专门备份方案 | 通常需要专门备份方案 |
因此:
备份命令只是第一步,真正重要的是“备份能不能恢复”。
恢复测试
一个非常常见的错误是:
每天都有备份↓所以数据库安全实际上更重要的问题是:
备份文件存在吗? ↓完整吗? ↓能恢复吗? ↓恢复需要多久? ↓恢复后的数据到哪个时间点?所以数据库备份一定应该包含:
Backup+Restore TestRPO 与 RTO
数据库高可用和灾备中经常出现:
RPO
Recovery Point Objective
表示:
可以接受最多丢失多少数据。
例如:
RPO = 5 min意味着故障时希望:
最多损失约 5 分钟的数据变化RTO
Recovery Time Objective
表示:
希望在多长时间内恢复服务。
例如:
RTO = 30 min意味着:
故障↓30 分钟内恢复服务因此:
RPO↓最多丢多少数据
RTO↓最多停多久MySQL 日志
MySQL 的日志体系比较丰富。
常见日志包括:
Error LogGeneral Query LogSlow Query LogBinary LogError Log
记录:
启动错误崩溃配置问题严重异常排查数据库:
启动失败服务异常时,首先就应该关注 Error Log。
Slow Query Log
慢查询日志用于记录:
执行时间超过指定条件的查询。
它非常适合:
慢 SQL 分析例如:
SQL ↓执行 8 秒 ↓Slow Query Log然后进一步:
EXPLAIN检查执行计划。
Binary Log
MySQL Binary Log(Binlog)非常重要。
它记录数据库中发生的:
数据修改事件并广泛用于:
复制增量恢复数据同步可以理解为:
Transaction │ ▼ Binlog │ ├── Replica └── RecoveryPostgreSQL 日志
PostgreSQL 常见日志用于记录:
启动 / 停止连接认证错误查询检查点恢复具体日志行为由 PostgreSQL 的:
logging_collectorlog_statementlog_min_duration_statementlog_min_messages等配置控制。
官方文档中的 Error Reporting and Logging 对日志配置进行了详细说明。
PostgreSQL WAL
PostgreSQL 非常重要的机制:
WAL(Write-Ahead Log)
其基本思想是:
数据修改 │ ▼先写 WAL │ ▼之后再处理数据页面这样数据库崩溃后可以根据 WAL 进行:
Crash RecoveryWAL 同时还是:
Streaming ReplicationPoint-in-Time Recovery等机制的重要基础。
性能与索引
为什么需要索引
例如:
SELECT *FROM usersWHERE email = 'alice@example.com';如果:
users有:
1000 万行没有适当索引时,数据库可能需要扫描大量记录。
建立索引后,可以缩小查找范围。
因此:
Index↓减少需要检查的数据↓提高某些查询效率MySQL 索引
MySQL 中最常见的索引结构之一是:
B-Tree例如:
CREATE INDEX idx_users_emailON users(email);查询:
SELECT *FROM usersWHERE email = 'alice@example.com';优化器可能选择:
Index Lookup然后定位数据。
PostgreSQL 索引
PostgreSQL 也支持:
B-treeHashGiSTSP-GiSTGINBRIN等不同索引类型。
其中最常用的仍然是:
B-tree例如:
CREATE INDEX idx_users_emailON users(email);但是 PostgreSQL 的索引体系比简单的:
“只有 B+Tree”更加丰富。
不同索引类型适合:
等值查询范围查询全文搜索数组JSON空间数据大范围顺序扫描等不同场景。
官方文档:PostgreSQL Indexes。
EXPLAIN
不能因为:
“建立了索引”就认为:
“查询一定变快”真正应该观察:
执行计划(Execution Plan)
MySQL:
EXPLAINSELECT *FROM usersWHERE email = 'alice@example.com';PostgreSQL:
EXPLAINSELECT *FROM usersWHERE email = 'alice@example.com';可以看到:
Seq ScanIndex ScanIndex Only ScanJoinCostRows等信息。
全表扫描
如果数据库决定:
Seq Scan或者:
Full Table Scan不一定表示数据库有问题。
有时候:
表很小或者:
查询返回大量数据全表扫描反而可能比使用索引更划算。
因此:
索引优化的核心不是“所有查询都必须走索引”,而是让优化器能够选择合适的访问路径。
联合索引
例如:
CREATE INDEX idx_userON users(name, age);可以用于某些涉及:
namename + age的查询。
但对于:
只查询 age是否能够有效利用这个索引,要结合具体 DBMS 的优化器和执行计划判断。
因此不要机械记成:
有索引↓一定使用慢查询排查
数据库查询变慢时,可以形成:
慢查询 ↓找到 SQL ↓EXPLAIN ↓查看执行计划 ↓是否全表扫描? ↓索引是否合理? ↓数据量是否增长? ↓是否存在锁等待? ↓CPU / Memory / I/O这样比直接:
“给字段加索引”更加可靠。
数据库资源
数据库性能不仅取决于 SQL。
还可能受到:
CPUMemoryDisk I/ONetworkConnectionsLocksCache影响。
例如:
SQL 很快但连接池耗尽应用仍然可能:
请求超时又例如:
SQL 没有问题但:
磁盘 I/O 很慢数据库仍然可能整体变慢。
因此:
数据库性能问题必须从 SQL、数据库内部状态和操作系统资源三个层次一起看。
MySQL 存储引擎
MySQL 一个非常重要的概念是:
Storage Engine(存储引擎)
MySQL Server 的通用服务层和具体存储引擎之间存在分层。
常见存储引擎:
InnoDB其中 InnoDB 是现代 MySQL 中最主要的事务型存储引擎。
可以简单理解:
MySQL Server │ ▼Storage Engine │ ▼Data / Index这也是为什么 MySQL 的:
事务锁索引日志等行为不能完全脱离存储引擎理解。
PostgreSQL 的存储体系
PostgreSQL 不采用与 MySQL InnoDB 完全相同的“可插拔存储引擎”模型。
它的核心数据管理由 PostgreSQL 本身的存储和执行架构负责。
因此:
MySQL↓Storage Engine 是非常重要的架构概念
PostgreSQL↓整体数据库引擎架构不同这也是两者学习时不能简单套模板的地方。
MySQL 复制
MySQL 可以通过:
Replication
让一个服务器从另一个服务器同步数据。
可以简单理解为:
Source │ │ Binlog ▼Replica │ ▼Replay典型架构:
Primary │ Binlog │ ┌─────┴─────┐ ▼ ▼ Replica 1 Replica 2可以用于:
读扩展备份辅助故障切换基础但:
Replication 不等于完整高可用。
还需要处理:
故障检测角色切换数据一致性客户端重新连接等问题。
PostgreSQL Streaming Replication
PostgreSQL 常见复制方式:
Streaming Replication
可以简化成:
Primary │ │ WAL ▼Standby │ ▼ReplayPrimary 持续产生:
WALStandby 接收并重放 WAL。
可以构建:
Primary │ ├── Standby 1 └── Standby 2这样的复制结构。
主从复制并不等于高可用
这是数据库运维中非常重要的一点。
假设:
Primary │ ▼Replica即使有 Replica:
Primary 挂了也不代表:
Replica 自动接管因为完整高可用还需要:
故障检测+Leader Election / Failover+客户端切换+数据一致性+脑裂防护等机制。
因此:
复制是高可用的基础能力之一,而不是高可用方案本身。
数据库高可用
一个简单的高可用架构可以理解成:
Client │ ▼ Proxy / VIP │ ┌─────┴─────┐ │ │ ▼ ▼ Primary Standby │ ▲ │ │ └── Replication如果:
Primary发生故障:
Failover ↓Standby ↓Promote ↓新的 Primary客户端需要:
重新连接因此一个真正可用的高可用方案一般还需要:
数据库+复制+故障检测+自动 / 半自动切换+客户端发现MySQL 与 PostgreSQL 高可用思路
| 方向 | MySQL | PostgreSQL |
|---|---|---|
| 主要复制基础 | Binlog | WAL |
| 常见复制 | Source / Replica | Primary / Standby |
| 日志 | Binlog | WAL |
| 故障切换 | 需要额外机制 | 需要额外机制 |
| 高可用 | Replication + Failover | Streaming Replication + Failover |
因此两套系统虽然:
实现方式不同但运维思想高度相似:
主库 ↓复制日志 ↓备用节点 ↓故障检测 ↓切换 ↓恢复服务数据库安全
数据库安全不能只考虑:
用户名密码还应该包括:
监听地址网络访问控制数据库用户权限认证TLS日志备份安全密钥管理例如:
Database │ ├── 不必要的公网暴露 ├── 弱密码 ├── 过高权限 └── 明文传输都可能成为安全风险。
数据库不要直接暴露公网
如果没有特殊需求:
Internet │ ▼Database :3306通常不是好的设计。
更常见:
Internet │ ▼Nginx │ ▼Application │ ▼Database也就是说:
数据库通常只需要对应用服务器开放,而不是对整个 Internet 开放。
因此数据库运维和 Linux 防火墙、网络管理是直接联系在一起的。
数据库故障排查
当 Web 应用出现:
Database connection failed可以建立如下思路:
应用 ↓数据库连接配置 ↓Host ↓Port ↓网络 ↓防火墙 ↓数据库监听 ↓用户名 / 密码 ↓权限 ↓数据库本身典型连接故障
Connection refused
例如:
Connection refused优先检查:
ss -lntp确认数据库端口是否监听。
例如:
33065432是否存在。
Timeout
例如:
Connection timed out更应该关注:
路由防火墙安全组网络 ACL链路Authentication failed
如果网络:
正常端口:
正常但认证失败:
Access deniedpassword authentication failed那么重点关注:
用户名密码Host / Source认证配置权限MySQL 日志排障
例如 MySQL 启动失败:
systemctl status mysql先看 systemd 状态。
再查看:
MySQL Error Log重点关注:
配置错误权限数据目录磁盘空间端口冲突InnoDB例如:
Disk Full可能导致:
数据库无法写入日志无法增长事务失败PostgreSQL 日志排障
PostgreSQL 同样可以:
systemctl status postgresql然后查看对应日志。
重点关注:
认证监听地址端口配置文件WAL恢复磁盘权限如果出现:
database system is starting up之类的信息,还需要结合当前数据库的:
RecoveryReplicationStartup状态判断。
一个完整的数据库运维排障模型
可以把前面的内容整合成:
Web Request │ ▼ Application │ ▼ Connection Pool │ ▼ Database Connection │ ┌──────────────┼──────────────┐ │ │ │ ▼ ▼ ▼ Network Port Auth │ │ │ └──────────────┼──────────────┘ ▼ DBMS │ ┌──────────┼──────────┐ │ │ │ ▼ ▼ ▼ SQL Transaction Lock │ │ │ └──────────┼──────────┘ ▼ Optimizer │ ▼ Index │ ▼ Data / Cache │ ▼ Disk如果出现:
请求变慢就可以逐层判断:
连接池? ↓网络? ↓数据库连接? ↓锁? ↓SQL? ↓索引? ↓磁盘?而不是一看到数据库慢就:
“加 CPU”或者:
“加索引”MySQL 与 PostgreSQL 的对比
| 项目 | MySQL | PostgreSQL |
|---|---|---|
| 类型 | 关系型数据库 | 关系型数据库 |
| 典型服务 | mysqld | PostgreSQL server |
| 默认端口 | 3306 | 5432 |
| 用户模型 | User + Host | Role |
| 常见客户端 | mysql | psql |
| 逻辑备份 | mysqldump | pg_dump |
| 关键日志 | Binlog / Error / Slow | WAL / Error / Query Logs |
| 常见索引 | B-Tree | B-tree 等多种 |
| 复制基础 | Binlog | WAL |
| 典型复制 | Source / Replica | Primary / Standby |
| 权限管理 | GRANT / REVOKE | GRANT / REVOKE |
| 服务管理 | systemd | systemd |
这里最重要的不是:
谁更好而是:
两者都是成熟的关系型数据库,但具体架构、配置和运维工具不同。
SQL 数据库系统的完整结构
把这篇内容与上一篇的数据库架构结合起来,可以得到:
Web Application │ ▼ Connection Pool │ ▼ ┌─────────┴─────────┐ │ │ ▼ ▼ MySQL PostgreSQL │ │ ┌──────┼──────┐ ┌─────┼──────┐ │ │ │ │ │ │ ▼ ▼ ▼ ▼ ▼ ▼ SQL Txn Index SQL Txn Index │ │ │ │ │ │ └──────┴──────┘ └─────┴──────┘ │ │ ▼ ▼ Storage Storage │ │ ▼ ▼ Disk Disk运维层面则是:
Database Operations │ ┌────────────────────┼────────────────────┐ │ │ │ ▼ ▼ ▼ Install Security Backup │ │ │ ▼ ▼ ▼ systemd User / Role Logical Backup │ Privilege Physical Backup ▼ │ │ Config ▼ ▼ │ Network / TLS Restore ▼ │ Logs ▼ │ RPO/RTO ▼ Troubleshooting │ ├── Connection ├── SQL ├── Lock ├── Index ├── CPU ├── Memory └── I/O │ ▼ High Availability │ ┌───────┴───────┐ │ │ Replication Failover数据库运维的核心思路
学习 MySQL 和 PostgreSQL,不应该只记:
mysql 怎么安装psql 怎么安装更重要的是建立下面这套思维:
数据库有没有运行? ↓监听在哪里? ↓谁可以连接? ↓谁拥有什么权限? ↓数据如何备份? ↓备份如何恢复? ↓日志在哪里? ↓SQL 为什么慢? ↓索引是否合理? ↓数据库是否受 CPU / Memory / I/O 限制? ↓主库故障怎么办?最终可以浓缩成:
安装 ↓配置 ↓权限 ↓连接 ↓SQL ↓事务 ↓索引 ↓日志 ↓备份 ↓恢复 ↓复制 ↓高可用这套知识已经覆盖了 Linux 运维岗位中最常见的数据库基础能力。
下一篇再继续学习:
NoSQL就可以自然进入:
RedisMongoDB等非关系型数据库,而不会和 MySQL / PostgreSQL 的关系型数据库体系混在一起。