MySQL通过binlog恢复误删数据原创
3人赞赏了该文章
543次浏览
编辑于2021年11月24日 10:22:37
binlog记录数据库所有的DDL和DML语句,当误删除数据时可以通过binlog找回,不过当binlog超过过期时间则无法再找回过期时间前的日志。
1.binlog存放位置:show variables like "%log_bin_basename%";
2.binlog过期时间:show variables like "%expire_logs_days%";
示例:
当2021-07-10 03:34:53时误删了数据,找到此时间段的binlog日志,将其放到tmp目录下/tmp/mysql_bin_39998.000682,将此时间区间(时间范围可以自定义,2021-07-10 03:34:47到021-07-10 03:35:00)执行过的sql语句生成到/tmp/binlog1.sql里,然后在生成的binlog1.sql文件里找到当时的删除记录,再手工转换为insert语句补回数据。
(注: 时间区间越精确、越小越好,生成的sql文件会很有几十M到几百M不等)
/usr/local/mysql/bin/mysqlbinlog --no-defaults --base64-output=decode-rows -d 库名 /tmp/mysql_bin_39998.000682 -v --start-datetime='2021-07-10 03:34:47' --stop-datetime='2021-07-10 03:35:00'> /tmp/binlog1.sql
推荐阅读