如何快速恢复SLAVE从库上某几张表
在日常工作中,同步报错是DBA遇到最多的一个问题,如果修复后发现还没有解决,通常的办法是在master上重新导入一份备份,然后在slave上恢复,这个方案是针对整个库不是很大的情况,那么如果是数据库比较大,全部导出再导入耗时就很长,这时,就要通过特殊的方法恢复某几张表
例如,employees的employees这张表和master的不一致,操作方法如下
(1)Master:
select count(*) from employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
Slave:
select count(*) from employees;
+----------+
| count(*) |
+----------+
| 99976 |
+----------+
(2)在主库上导出employees这张表,并记录下binlog和pos点:
/application/mariadb10/bin/mysqldump --master-data=2 -uroot -p123456 -h192.168.214.88 employees employees > employees.sql
(3)把备份上传到slave上,查看employees.sql文件,找到binlog和pos点
如head -30 employees.sql
-- CHANGE MASTER TO MASTER_LOG_FILE='my3306-bin.000008', MASTER_LOG_POS=508744250;
(4)在slave机器上导入employees.sql,命令如下
source employees.sql;
(5)在从库上做change master to 指向,直到sql_thread线程为NO
start slave until master_log_file='my3306-bin.000008', master_log_pos=508744250;
这一步是为了保障其他表的数据不丢失,一直在同步,直到同步到那个点为止,employees表的数据在之前的导出已经生产了一份快照,只要导入后开启同步即可!
直到sql_thread线程为NO
(6)导入完毕后,开启同步即可
start slave;
验证数据
select count(*) from employees;
+----------+
| count(*) |
+----------+
| 300024 |
+----------+
再次检查从库状态!!