当我们执行一条修改的sql语句时,执行步骤如下图所示:
可以看到在第二步的时候在undo日志中写入了旧值,在五步和第六步分别写入了redo和binlog日志。
那么它们具体如何实现的呢?
一、redo log重做日志
写入磁盘
写入策略
应用场景
适合物理上的问题进行恢复(mysql服务异常终止)
二、binlog归档日志
binlog二进制日志记录保存了所有执行过的修改操作语句,不保存查询操作。可在Mysql服务意外终止时恢复数据。
注意:启动binlog日志功能,会影响服务器性能,但如果需要恢复数据或主从复制功能,则好处大于对服务器的影响。
是否开启
配置启动
日志格式
写入磁盘
操作日志
查看日志
删除日志
数据恢复
根据偏移量恢复(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操作)