从删库到没跑路的一些经历总结,BinLog 的使用【专业克制 rm -rf】——清欢

早上还在公交车,甲方打电话问为什么统计报表数据不显示了,一脸懵逼,回忆起来这几天删除了很多次表,还用的Truncate删除的,不可恢复的
拿着生产数据当测试了,删了测,测了删,心想一定要有备份啊,结果发现没备份
甲方说月底了,需要给集团汇总报表数据,现在上级问下来了
到了场地,啧啧了,还好有备份文件,不过是每天早上4 点自动备份的数据,这几天每天用那么多次 Truncate,最终的数据肯定丢失很严重
果然甲方发现丢失了三天的数据,让我给找回,不然没法给上级交代。。。。。。
第一反应,我没想过跑路,可能是程序员的职业操守,遇到问题第一面对问题,解决问题,我想到了刚毕业的时候老师教的 binlog,然后一顿百度,查看下是否开启 binlog 了,不幸中的万幸!binlog 开启状态
MySQL 已启用 binlog 在 my.cnf 或 my.ini 中确认如下配置:
[mysqld]
log-bin=mysql-bin
binlog-format=ROW
查看 binlog 的状态
SHOW BINARY LOGS;
ok 开始上硬菜,既然开启 binlog 那就按照步骤来找回数据

1.本地创建数据库

我的是苹果电脑 Mac,所以需要下载 dmg,然后配置环境变量

echo 'export PATH="/usr/local/mysql/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc

拉取生产上的数据下来,没办法怂了,害怕了,不敢直接拿生产数据库做实验了

2.拉取binlog文件

binlog 文件是二进制文件,先用 binlog 解析成 mysql 文件

这里使用时间来缩小范围,把 binlog 文件缩小化,比如就昨天使用的 Truncate 那就把时间改成昨天的 00 点和 24 点

mysqlbinlog --start-datetime="2024-12-25 10:00:00"  --stop-datetime="2024-12-25 23:59:59" --database=miantiaoji_dev --result-file=recover.sql  /path/to/mysql-bin.000001 /path/to/mysql-bin.000002

把这个 sql 文件拿到本地打开
在这里插入图片描述
这里直接搜 Truncate,然后找到前面有个at,后面的数字,一定要记下来,很重要!特别重要!后期恢复数据就靠这个了,把所有的 Truncate 的数字都记录下来

3.利用初始化数据

多个数字之间,1-2 执行完了 执行 2-3,以此类推把删除的数据都粘贴出来 Insert

mysqlbinlog  --start-position=199595629 --stop-position=223722528 /Users/chentangxu/mysql-bin.000004 | mysql -u root -p

在这里插入图片描述

4执行粘贴出来的SQL

在这里插入图片描述

完美收官

以后删库别紧张,别跑路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值