一天,不小心删除了一个表。drop table student; (非gtid主从)
此时主从mysql的这个表都被删除了,此时怎么恢复。
1.先停止数据库再写入数据,可以停了应用,或者启动服务器上的防火墙
2.在每天凌晨0点,备份前天的全量备份数据
做个全量备份数据模拟:
/usr/local/mysql/bin/mysqldump -uroot -p123456 --master-data=2 --single-transaction -R -B --triggers --databases mei > 20191127.txt
先查看一下student表的内容
然后今天往这个表里插入了几条数据
然后手贱,把student表删除了
下面开始来进行恢复。
先查看一下备份文件,head -n 30 20191127.txt
找到上一次备份的时候,备份到哪个binlog的哪个位置了
然后获取从这个binlog文件的这个位置开始的内容
/usr/local/mysql/bin/mysqlbinlog --no-defaults -vv -d mei --start-position=7546 /data/mysql/datanode1/bin-log-mysqld5.000005 > 20191127all.sql
如果内容被插入到了两个binlog文件,那么这语句执行两次就可以了
/usr/local/mysql/bin/mysqlbinlog --no-defaults -vv -d mei --start-position=7546 /data/mysql/datanode1/bin-log-mysqld5.000005 > 20191127all.sql
/usr/local/mysql/bin/mysqlbinlog --no-defaults -vv -d mei /data/mysql/datanode1/bin-log-mysqld5.000006 >>20191127all.sql
把20191127all.sql里面的drop table mei;这一句删除
grep -n "drop table mei" 20191127all.sql; #通过grep找到需要删除的语句位于第几行
sed -i '87,93d' 20191127all.sql #删除87到93行
开始恢复内容
先恢复全备数据
/usr/local/mysql/bin/mysql -uroot -p123456 <20191127.txt
然后恢复增量的数据
/usr/local/mysql/bin/mysql -uroot -p123456 <20191127all.sql
查看内容