Mysql的日志机制

56 阅读1分钟

当我们执行一条修改的sql语句时,执行步骤如下图所示: image.png 可以看到在第二步的时候在undo日志中写入了旧值,在五步和第六步分别写入了redo和binlog日志。 那么它们具体如何实现的呢?

一、redo log重做日志

写入磁盘

image.png

写入策略

image.png

image.png

应用场景

适合物理上的问题进行恢复(mysql服务异常终止)

二、binlog归档日志

binlog二进制日志记录保存了所有执行过的修改操作语句,不保存查询操作。可在Mysql服务意外终止时恢复数据。

注意:启动binlog日志功能,会影响服务器性能,但如果需要恢复数据主从复制功能,则好处大于对服务器的影响。

是否开启

image.png

配置启动

image.png

日志格式

image.png

写入磁盘

image.png

操作日志

查看日志

image.png

删除日志

image.png

数据恢复

根据偏移量恢复(at 在begin前commit后):

mysqlbinlog --no-defaults --start-position=219 --stop-position=468 --database=test D:/SOFTWARE/mysql5.7/data/mysql-binlog.000001 | mysql -uroot -p123456 -v test

根据时间戳恢复(需要转成日期格式) mysqlbinlog --no-defaults --start-datetime="2023-10-10 10:00:00" --stop-datetime="2023-10-10 11:00:00" --database=test D:/SOFTWARE/mysql5.7/data/mysql-binlog.000001 | mysql -uroot -p123456 -v test

特别注意:如果要恢复大量数据,要备份+binlog,且保证备份的数据在binlog最大删除时间内(多几天)。

应用场景

适合逻辑上的问题进行恢复(sql操作)

undo log回滚日志

image.png

其他日志

错误日志

image.png

通用查询日志

image.png

常见问题

image.png