图片来自Pexels作者在高并发场景下开发的简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多的童鞋,这里放上开源框架的地址:https://github.com/sunshinelyz/mykit-delay写在前面估计这几天二狗子叔叔来了,还有他非常沮丧,情绪低落,工作时有点心不在焉。让他发个版本,结果一行命令删除线上数据库!你没听错:在线数据库被删除了!运营方顿时炸了:怎么回事?系统进不去!这是什么情况?!很多顾客都在抱怨!!虽然运营方很慌张,不知所措,但作为技术人员,我们还是要冷静,不就是删除数据库吗?没关系,哥来帮你!事件背景MySQL数据库每天0:00自动全量备份。一天早上9点,二狗子不小心掉了一个数据库。我们需要通过准备好的数据文件和增量的binlog文件来恢复数据。主要思路和原理是利用准备好的sql文件中记录的CHANGEMASTER语句,binlog文件及其位置点信息,找出binlog文件的增量部分,使用mysqlbinlog命令导出上述binlog文件到一个sql文件中,并删除其中的drop语句。通过导出binlog文件的sql文件,可以还原出完整的数据流程示意图)NOTNULDEFAULT'0',PRIMARYKEY(`id`),KEY`index_name`(`name`))ENGINE=InnoDBAUTO_INCREMENT=8DEFAULTCHARSET=utf8mysql>insertstudentvalues(1,'zhangsan',20);mysql>insertstudentvalues(2,'lisi',21);mysql>insertstudentvalues(3,'wangwu',22);全命令#mysqldump-uroot-p-B-F-R-x--master-data=2test|gzip>/server/backup/test_$(date+%F).sql.gz参数说明:-B指定数据库-F刷新日志-R备份存储过程等-x锁表--master-data添加CHANGEMASTER语句和binlog文件及位置点信息备份语句继续插入数据和删除数据库mysql>insertstudentvalues(4,'xiaoming',20);mysql>insertstudentvalues(5,'xiaohong',20);我们模拟插入数据时的误操作,删除测试数据库mysql>dropdatabasetest;这个时候全量备份之后,我们会去误操作,时不时的,用户写入的数据在binlog里面,需要恢复。查看全量备份后新增的binlog文件#cd/server/backup/#lstest_2020-08-19.sql.gz#gzip-dtest_2020-08-19.sql.gz#grepCHANGEtest_2020-08-19.sql--CHANGEMASTERTOMASTER_LOG_FILE='mysql-bin.000003',MASTER_LOG_POS=107;这里是全量备份时binlog文件所在的位置,即mysql-bin.000003的第107行,所以本次全量备份中已经包含了这个文件之前的binlog文件中的数据移动binlog文件中的sql文件,读取sql,去掉drop语句#cp/data/3306/mysql-bin.000003/server/backup/#mysqlbinlog-dtestmysql-bin.000003>mysql-bin.000003.sql接下来用vim编辑mysql-bin.000003.sql文件并删除drop语句。注意:在恢复完整备份数据之前,必须删除binlog文件。否则,在恢复过程中,语句会不断写入binlog,最终导致增量恢复数据部分变得更加混乱恢复数据#mysql-uroot-p
