本教程可恢复master-bin记录开始的所有(或单表)数据(后续将完善恢复某个节点区间的数据的流程)。
1、先把master-bin转成sql(存储位置自行定义)
mysqlbinlog --no-defaults /mnt/mysql/master-bin.000001 > /master1.sql
mysqlbinlog --no-defaults /mnt/mysql/master-bin.000002 > /master2.sql
mysqlbinlog --no-defaults /mnt/mysql/master-bin.000003 > /master3.sql
2、将几个sql合并成1个
cat master1.sql master2.sql master3.sql master4.sql master5.sql master6.sql master7.sql master8.sql > masterAll.sql
3、此处得到的就是自日志备份一来的所有sql执行记录。如果要恢复某个表,需执行以下命令提取指定的表xx(xx为你的数据库表)
grep -B0 -A0 -wi ‘xx’ /masterAll.sql >/recover.sql
提取出来的命令sql语句没带分号,且每行会出现–
故需要将–替换成分号
sed -i ‘s/--
/;
/g’ ls | grep -E 'recover.sql'
4、登录数据库
mysql -uroot -p
输入密码
use database(database是你的数据库)
source /recover.sql(执行后即恢复该表数据)