MySQL 日志模块

2019-09-28  本文已影响0人  灰气球

原文《MySQL实战45讲》

redo log (重做日志)

​ redo log 是 InnoDB 引擎特有的日志,主要是为了实现 crash-safe能力。保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe。

​ 当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写到 redo log 里面,并更新内存,这个时候更新就算完成了。同时,InnoDB 引擎会在适当的时候,将这个操作记录更新到磁盘里面,而这个更新往往是在系统比较空闲的时候做。InnoDB 的 redo log 是固定大小的,从头开始写,写到末尾就又回到开头循环写。

img

​ write pos 是当前记录的位置,一边写一边后移,写到文件末尾就重头开始写。checkpoint 是当前要擦除的位置,也是往后推移并且循循环的,擦除记录前要把记录更新到数据文件。write pos 和 checkpoint 之间的空间可以存入新的更新,如果 write pos 追上了 checkpoint ,这个时候不能再执行新的更新了,需要把 checkpoint 推进一下。

binlog (归档日志)

​ redo log 是 InnoDB 引擎特有的日志,而Server层也有自己的日志,为binlog(归档日志)。binlog日志只能用于归档,没有crash-safe的能力。binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。

redo log 和 binlog 的区别

MySQL 相关设置项

binlog 使用

  1. 开启 binlog 日志(Docker安装的MySQL)

    # 进入mysql容器
    docker exec -it [mysql容器id] /bin/bash
    # 进入配置文件目录下
    cd /etc/mysql/mysql.conf.d/
    # 开启binlog
    echo 'log-bin=/var/lib/mysql/mysql-bin' >> mysqld.cnf
    echo 'server-id=123454' >> mysqld.cnf
    # 修改binlog格式
    echo 'binlog-format=ROW' >> mysqld.cnf
    
上一篇 下一篇

猜你喜欢

热点阅读