记一次mysqlbinlog恢复数据库数据

发布时间 2023-11-17 11:37:28作者: 搂猫睡觉的鱼

因为一些意外操作,用旧的备份覆盖了最新的数据库 数据,导致 最近几天内的数据被覆盖掉了。

百度了一圈。。用mysqlbinlog恢复比较靠谱,网上查 感觉 操作也比较简单。。实际吧。费点劲。。

 

MySQL 的Binlog是用于记录数据库中所有操作的日志文件。通过检查日志文件,可以找到误删除的数据,并进行恢复。

 

1.进入到数据库中,通过"SHOW BINARY LOGS;" 或者 "SHOW MASTER LOGS;" ,可查看所有可用的binlog文件,两种命令查询结果一致(具体没研究)

 2.通过"SHOW MASTER STATUS;",查看master状态,即最后(最新)一个binlog日志的编号名称。

3.我们可以将该文件导出为 sql 或者 txt 文件:

 3.1 全部导出(不建议)

mysqlbinlog --set-charset=utf8 /www/server/data/mysql-bin.000004 > tmp.sql

3.2 制定一个时间区间来导出(因为我是明确知道我是在什么时间点误操作的,可以快速进行定位)

mysqlbinlog --base64-output=decode-rows -v --database='数据库名' --start-datetime="2023-10-25 11:00:00" --stop-datetime="2023-10-25 12:00:00" /www/server/data/mysql-bin.000004 > tmp.sql

ps:tmp.sql 打开后可以很明显看到具体都进行了哪些sql操作。

4.使用mysqlbinlog命令进行恢复数据操作(实际是把这个(时间)区间内所有的数据库操作 增删改 操作一遍。)

mysqlbinlog --start-datetime="2023-10-20 11:00:00" --stop-datetime="2023-10-25 11:50:00" /www/server/data/mysql-bin.000004 --database=数据库名 | mysql -uroot  -p密码

 

可能遇到的问题。

1.mysqlbinlog 如果显示找不到命令(-bash:mysqlbinlog:command not found),可以通过映射方式去解决,

简单说下,通过which mysqlbinlog 确认是不是这个原因,

 一般mysqlbinlog和mysql 安装在同一路径,可以查看mysql/bin目录下是否有mysqlbinlog。

进入映射文件夹 cd /usr/local/bin

做映射:ln -s /www/server/mysql/bin/mysqlbinlog mysqlbinlog