Loading... ### 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`),避免超出服务器硬件资源的承载能力。 - **分区表**: - 对于超大表,可以通过表分区优化查询性能。常见的分区方式包括范围分区(RANGE)、列表分区(LIST)等。 #### 7. 数据备份与恢复 MySQL 提供多种备份与恢复工具: - **逻辑备份**: - 使用 `mysqldump` 生成 SQL 脚本备份数据。适合小规模数据的备份。 - **物理备份**: - 使用 `xtrabackup` 或 `mysqlbackup` 进行热备份,适合大规模数据的备份。 - **恢复**: - 恢复数据时可以通过重放二进制日志进行增量恢复,保证数据一致性。### 总结 最后修改:2024 年 08 月 27 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏