Quantcast
Channel: 小蓝博客
Viewing all articles
Browse latest Browse all 3145

MySQL知识笔记整理

$
0
0

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 脚本备份数据。适合小规模数据的备份。
  • 物理备份

    • 使用 xtrabackupmysqlbackup 进行热备份,适合大规模数据的备份。
  • 恢复

    • 恢复数据时可以通过重放二进制日志进行增量恢复,保证数据一致性。### 总结

Viewing all articles
Browse latest Browse all 3145

Trending Articles