简单的数据库恢复

问题:由于程序员的不小心,在更新操作的时候忘记加limit导致一个70多W条记录的表的几个字段全部更新
约定:被更新的表名为a,所在的数据库为A;新建的数据库为B,其中和A中a同名的表为b,(A、B和a、b其实在2个mysql中名字是一样的,我这样只是为了区分)把出事的时间点定为time
说明:有A数据库2天前的一个备份,并且A所在的服务器记录了A的binlog
 
解决流程:
1、新建一个mysql,开启新的端口,并把这个mysql做为A所在mysql的一个slave;新建数据库B,导入备份中的数据
 
2、利用程序把B中b表的内容全部更新到A中a表,并记录最后一个更新的id(endid)。到这里还只是恢复了2天前的数据,还有一部分数据没有恢复
 
3、把B中的b表单独做个cp备份
 
4、开启B数据库同A数据库的同步,特别注意:只同步到time之前这个时间点(这个可以使用start slave until master_log_file='*' ,master_log_pos=*;语句)

5、用程序把从endid到出事时a中的那个id的之间的b表数据同步到a中
 
在整个过程中出现的问题和没有注意的地方:
1、由于在做备份的时候使用的是 --master-data=2,在同步的时候出现从第一个binlog同步的时候,而这时候没有去使用CHANGE MASTER TO MASTER_LOG_FILE='*, MASTER_LOG_POS=*;,而是用把binlog中的sql导出再导入数据库,导致数据出错

2、在同步的时候应该只同步a这张表(replicate-do-table=A.a)

3、没有考虑硬件的影响(由于这台服务器上跑了好几个mysql,应先关闭其他端口的mysql,这样同步起来会更快)

你可能感兴趣的:(mysql,数据恢复,职场,休闲,master-slave)