Mysql根据日志恢复数据

此文详细介绍了根据mysql的二进制日志恢复丢失的数据。

在7月17日不小心删除了一个工程的整个数据,导致数据丢失。 最新的备份是5月29日。丢失的数据比较多。由于我发现这个mysql数据库开启了日志功能,日志记录从从5月3日到7月17日。

  1. 查看mysql是否开启二进制日志。bin-log日志记录了所有的DDL和DML的语句。

  查看my.cnf中是否有log-bin的设置

Log-bin=mysql-bin

EXPIRE_LOGS_DAYS
此参数是设置日志的过期天数,过期的日志将会被自动删除,这有利于减少我们管理日志的工作量,需要修改my.cnf

EXPIRE_LOGS_DAYS=3

这里我们设定保存日志为3天,3天之后过期的日志将被自动删除

2、定期完整备份
你还需要间隔一定的时间做数据库的完整备份,只有这样你才有可能快速的恢复最新数据。

3、查看备份时间
查看你备份的时间,如backup.sql,取最后一行:-- Dump completed on 2012-11-08 11:11:48

或者查看backup.sql 的文件生成日期也可以。

4恢复

  bin-log是记录着mysql所有事件的操作,当mysql发生灾难性错误时,可以通过bin-log做完整恢复,基于时间点的恢复,和基于位置的恢复

基于时间点的恢复

 首先利用mysqlbinlog.exe 命令将二进制日志转换为txt文件。

D:\Mysql\bin>mysqlbinlog.exe  d:/Mysql/backupLog.000033>change.txt

change.txt 可以看到我删除这个库的时间,如下图所示

暂时关闭服务,防止新数据写入,导出二进制日志:

多个日志文件之间用空格隔开。查看生成的sql文件,找到操作的错误的sql语句,删除即可。

然后先导入之前备份的sql,在导入生成的sql,就可以恢复到删除之前的完整数据了。

基于位置恢复

将二进制文件导出为txt后,可以看到我删除库的位置

我删除库的位置为1398088,所以恢复的位置点是这个位置的前一个1397998

多个日志文件之间用空格隔开。查看生成的sql文件,找到操作的错误的sql语句,删除即可。

然后先导入之前备份的sql,在导入生成的sql,就可以恢复到删除之前的完整数据了。

如果只是错误的删除了一张表,在删除的位置上前后都有数据的话, 然后再导出删除位置之后的的sql

然后再导入这个生成的sql文件。

开启日志功能对mysql 的性能影响比较明显,大家根据实际情况而定。

猜你喜欢

转载自blog.csdn.net/weixin_54108529/article/details/122811895