写点什么

删库了不用跑路!binlog 恢复数据实操

作者:EquatorCoco
  • 2024-08-08
    福建
  • 本文字数:759 字

    阅读完需:约 2 分钟

各位道友大家好呀!

想必道友们或多或少都听说过 MySQL 的 binlog 的作用,它记录了数据库整个的生命周期,可用于恢复数据或者从库同步数据。

那么如果发生了数据库误删,具体该怎样恢复数据呢?

下面就以一个例子来给道友们演示一下,让我们开始吧!do it!


数据备份


首先,数据库要定时进行备份,因为如果需要恢复数据,可以缩小 binlog 执行范围

mysqldump -uroot -p --master-data=2 --single-transaction -A > /www/server/data/fanrencode-back.sql
复制代码


参数 master-data 为 2 可以记录更多的细节,比如位置信息,方便 binlog --start-position定位


binlog 恢复数据


模拟误删操作

首先,新增一条测试数据,然后对库进行备份




然后我们又新增了数据,但是不小心把表给清空了



那么我们该怎么恢复数据呢?

有条件的话先在测试库里执行,没问题再在生产执行。


恢复数据

1.执行备份的文件




可以看到数据已经恢复成 mysqldump 备份时的数据了


2.执行 binlog

查看 mysqldump 备份的文件的结束位置,如图可知是 1969



注意这个 MASTER_LOG_POS 在文件的最上面,用 PgUp 翻到最上面即可。

然后查询 mysql-bin.000011 这个 binlog 文件,直接 vim 查看的话会乱码,所以我们把文件以明文的形式(-vv)输出到另一个 test.binlog 文件

/www/server/mysql/bin/mysqlbinlog mysql-bin.000011 -vv > test.binlog
复制代码


如果提示 unknown variable 'default-character-set=utf8'.错误,则需要在 mysqlbinlog 后面加上--no-defaults 参数

然后再 vim 查看就不乱码了,由图可知 truncate 操作的位置在 902120



然后执行恢复操作

/www/server/mysql/bin/mysqlbinlog  --start-position=1969 --stop-position=902120 /www/server/data/mysql-bin.000011 | mysql -uroot -p
复制代码



这样就完成了数据的恢复



文章转载自:救苦救难韩天尊

原文链接:https://www.cnblogs.com/GilbertDu/p/18347112

体验地址:http://www.jnpfsoft.com/?from=infoq

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
删库了不用跑路!binlog恢复数据实操_MySQL_EquatorCoco_InfoQ写作社区