记一次生产变乱:一年的数据被删除了

打印 上一主题 下一主题

主题 1009|帖子 1009|积分 3027

故事开始

 快要放工了,心情是这样的。

 
 突然电话响了,一看电话号码是项目甲方负责人的号码
 

 
 菊花一紧,难道出什么问题了,硬着头皮接通了电话。
 
 
@####@,你们程序怎么回事 ,某个业务的数据界面一条都查询不到了。。。。。
 
我们马上排查一下,看看那什么情况(心理活动:尼玛,尼玛,我怎么知道啊)???
 
莫慌,先搞条SQL到数据库查一把  阿弥陀佛,祈祷只是查询条件的问题。 
 
哦豁、哦豁、数据库里也没了,用户做了一年的使命数据都没了,我尼玛!!!!
 
甲方要求本日必须恢复数据,什么问题导致的你们反面自己排查去。
 
好好好,是是是
 
(恢复数据不都是小菜一碟的事究竟我们数据库天天凌晨有定时全量备份,也开了binlog日志的,哈哈,这难不倒我)
恢复数据没问题啊

binlog内里把删除语句找出来,逆向改成插入语句不就恢复了,这事不就欧了。
 
说干就干,先让公司现场运维同事帮忙把binlog拷贝出来
 
开始搞binlog,通过命令: mysqlbinlog --no-defaults -vv --base64-output=decode-rows --start-datetime='2024-12-30 16:49:35' --stop-datetime='2024-12-30 17:00:00'  mysql-bin.000103 >outsql1.sql;找出对应时间点的语句删除。
 
 
 


找到删除语句照旧很顺利,但是

binlog 中的删除语句只有被删除数据的ID,没有删除数据的详细数据,tmd 这怎么搞(反面再说原因,先恢复数据要紧)
 
没办法只能拷贝全量备份文件了
 
问题又来了,公司运维说科技运维说拷贝不出来,文件太大了要拷贝1个小时(备份源文件 7G) 
 打工人本日注定是无法按时放工了 跟现场一顿沟通 tmd 发现竟然没有压缩,压缩了一下,瞬间缩水了很多,终于拷贝出来了 你以为拷贝出来就没问题了嘛? 
最开始想简单了,想的就是把全量备份还原到本地,然后在本地把对应业务丢失数据的表搞成脚本恢复到生产上就完事了 MD,但是一顿操作发现,7G的数据全量还原到本地也tmd太太太慢了。还原了1个小时才还原不到10%,这不是到来日诰日早上都不一定能还原完 7G的文件,就别想用普通的编辑软件打开了,肯定是不行的。 没办法,只能2条腿走路,先让它慢慢还原着,然后再去找找看有没有其他办法可以从7G的这个文件里把需要的数据筛出来 一顿Google 、度娘加ChatGPT后发现通过 mysqldump -u root -p mydatabase > mydatabase_backup.sql 备份的文件,不管一个表有多少数据,备份文件中都只会天生了一条插入语句 再通过这个命令: cat testdb_all.sql |grep -E ‘INSERT INTO `personchangeinfo`’ > personchangeinfo1.sql 就可以从全量备份文件中找出并天生一个新文件 通过实测是可从 7G的文件内里找出详细的某张表的插入语句的,这样就好办了,不用还原整改备份,可以单表举行还原,节省了一大把时间。(tmd 今晚应该不用熬通宵了) 到了这一步至少可以先恢复到丢失数据当天凌晨的数据了,凌晨之后的的数据好像无能为力了(不知道各位大神有没有什么好办法?),硬着头皮给现场项目方打电话汇报结果。 一看时间已经晚上11点了,MD天选的打工人。 说明:

数据丢失的原因:程序缺陷导致,一个平常不用的功能,刚好年底了用到了
binlog内里为啥只有删除数据的ID没有详情:由于Binlog 格式设置的是“Mixed”
总结:

1、设Binlog模式要慎重,还得的按照自己项目现实情况去设置 binlog 类型,不然可能会对恢复数据造成麻烦。
binlog 有三种格式:



    • Statement(Statement-Based Replication,SBR):每一条会修改数据的 SQL 都会记录在 binlog 中。
    • Row(Row-Based Replication,RBR):不记录 SQL 语句上下文信息,仅生存哪条记录被修改。
    • Mixed(Mixed-Based Replication,MBR):Statement 和 Row 的混合体。 

Statement
Statement 模式只记录执行的 SQL,不需要记录每一行数据的变化,因此极大的减少了 binlog 的日志量,制止了大量的 IO 操作,提拔了系统的性能。(比如update user set name="张三" where id >1 and id  personchangeinfo1.sql ; 这个命令很实用,可以从大文件内里查找匹配内容并输出到新文件 </strong>
4、用mysqldump 备份的文件,压缩比很可观的,别忘了压缩。
    
   
 
 
 
 
 
 
 
 
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

罪恶克星

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表