MySQL(高级篇)

逻辑结构

  • 一条sql语句是如何执行的嘞【逻辑架构图↓↓↓】
    MySQL(高级篇)

物理结构

  • MySQL是通过文件系统对数据和索引进行存储的。
  • MySQL从物理结构上可以分为日志文件和数据索引文件。
  • MySQL在Linux中的数据索引文件和日志文件都在/var/lib/mysql目录下。
  • 日志文件采用顺序IO方式存储、数据文件采用随机IO方式存储。

日志文件

  • 错误日志(errorlog)
    默认是开启的,而且从5.5.7以后无法关闭错误日志,错误日志记录了运行过程中遇到的所有严重的错误
    信息,以及 MySQL每次启动和关闭的详细信息。

  • 二进制日志(bin log)
    记录数据变化
    binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容,语句以事件的形式保存,描述了数据的变更顺序,binlog还包括了每个更新语句的执行时间信息。如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。 【生产中开启】

  • 通用查询日志(general query log)
    啥都记录 耗性能 生产中不开启

  • 慢查询日志(slow query log)
    SQL调优 定位慢的 select 记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句

  • 重做日志(redo log)
    重做日志记录着数据库所发生的变化,进行一条DML语句时候如果提交会先写入重做日志里。如果数据库出问题了,也可以根据重做日志来进行恢复。
    数据库日志和数据落盘机制:
    MySQL(高级篇)

  • 回滚日志(undo log)
    Undo记录存储的是老版本数据,当一个旧事务需要读取数据时,为了能读取到老版本数据,需要顺着undo连找到满足其可见性的记录。

  • 中继日志(relay log)
    MySQL进行主主复制或主从复制的时候会在home目录下产生相应的relaylog。
    relaylog很多方面都跟binlog差不多,区别:从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relaylog日志内容并应用到从服务器。