MySQL 相关知识笔记
1. MySQL 架构概述
MySQL 采用典型的客户端-服务器架构,主要分为以下几个层次:
- 连接管理与安全性:客户端请求通过连接层处理,进行身份验证和权限控制,决定是否允许访问数据库。
- SQL 解析与优化:查询语句经过解析器生成解析树,再由优化器决定最佳的执行计划。优化器会考虑索引、JOIN顺序等因素,以提高查询性能。
- 存储引擎:MySQL 提供了多种存储引擎(如 InnoDB、MyISAM 等),不同存储引擎具有不同的特性。InnoDB 是默认引擎,支持事务和外键。
2. MySQL 存储引擎
InnoDB:
- 支持事务、ACID(原子性、一致性、隔离性、持久性)特性和外键。
- 采用 MVCC(多版本并发控制)以支持高并发性。
- 使用聚簇索引,数据存储按照主键排序。
MyISAM:
- 不支持事务和外键,适合以读为主的应用场景。
- 表级锁定,不适合高并发写入的场景。
- 支持全文索引,适合全文搜索应用。
3. MySQL 索引类型
B+树索引:
- B+树索引是 MySQL 中使用最广泛的索引类型。它用于排序和范围查询,适合大部分场景。
- 聚簇索引:InnoDB 的主键索引是聚簇索引,数据和索引一起存储。
- 非聚簇索引:其叶子节点保存的是主键值而不是数据行。
哈希索引:
- 仅适用于基于等值查询的场景,不支持范围查询。
- Memory 存储引擎支持哈希索引,查询速度非常快。
全文索引:
- 支持基于自然语言文本的搜索,适合搜索大量文本数据的场景。
4. MySQL 事务管理
MySQL 的事务由以下几个关键点构成:
- ACID 特性:事务必须具备原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
事务隔离级别:
- READ UNCOMMITTED:最低隔离级别,允许读取未提交数据,可能导致脏读。
- READ COMMITTED:防止脏读,但可能出现不可重复读。
- REPEATABLE READ:InnoDB 的默认隔离级别,防止脏读和不可重复读,但可能会出现幻读。
- SERIALIZABLE:最高隔离级别,防止所有并发问题,但性能最差。
- MVCC(多版本并发控制):InnoDB 通过保存数据的多个版本来实现读写操作的并发控制。MVCC 主要通过回滚日志和事务版本号来实现。
5. MySQL 复制与高可用
MySQL 支持多种复制机制,用于高可用性和负载均衡:
主从复制:
- 异步复制:主服务器将二进制日志(binlog)传输到从服务器,从服务器应用日志进行数据同步。
- 半同步复制:主服务器在收到至少一个从服务器确认后才认为事务提交成功。
GTID(全局事务标识符)复制:
- GTID 使得复制更加可靠和便于管理。每个事务拥有唯一标识符,从服务器可以精确地跟踪主服务器上执行的事务。
高可用架构:
- 通过 MySQL 复制和故障切换工具(如 MHA、Orchestrator),可以实现自动主从切换,提升数据库的高可用性。
6. MySQL 性能优化
查询优化:
- 使用
EXPLAIN
语句查看查询执行计划,确定是否使用了合适的索引。 - 尽量避免全表扫描,使用合适的索引提高查询效率。
- 优化 JOIN 查询的顺序,减少临时表的使用。
- 使用
索引优化:
- 索引设计时要避免冗余索引,尽量使用复合索引。
- 尽量减少使用函数或表达式对索引列的处理,否则会导致索引失效。
配置优化:
- 调整 InnoDB 缓冲池大小(
innodb_buffer_pool_size
),确保足够的内存用于缓存数据和索引。 - 合理设置连接数(
max_connections
),避免超出服务器硬件资源的承载能力。
- 调整 InnoDB 缓冲池大小(
分区表:
- 对于超大表,可以通过表分区优化查询性能。常见的分区方式包括范围分区(RANGE)、列表分区(LIST)等。
7. 数据备份与恢复
MySQL 提供多种备份与恢复工具:
逻辑备份:
- 使用
mysqldump
生成 SQL 脚本备份数据。适合小规模数据的备份。
- 使用
物理备份:
- 使用
xtrabackup
或mysqlbackup
进行热备份,适合大规模数据的备份。
- 使用
恢复:
- 恢复数据时可以通过重放二进制日志进行增量恢复,保证数据一致性。### 总结