数据库主从同步错误恢复

方法一:忽略错误后,继续同步

备注:适用于主从数据库相差不大的情况

1、master端执行命令,将数据库设置为全局读锁,不允许写入新数据。

1
MariaDB [(none)]>flush tables with read lock;

2、slave端停止slave的I/O及SQL线程。

1
MariaDB [(none)]>stop  slave;

3、slave端将同步错误的sql跳过一次(跳过操作会导致主从数据不一致)。

1
MariaDB [(none)]>set  global  sql_slave_skip_counter=1;

4、slave端启动slave,恢复同步状态。

1
MariaDB [(none)]>start   slave;

5、master端解除数据库全局读锁。

1
MariaDB [(none)]>unlock tables;

方法二:重新做主从同步,使数据完全同步

备注:适用于主从数据库相差很大的情况

1、master端执行命令,将数据库设置为全局读锁,不允许写入新数据。

1
MariaDB [(none)]> flush tables with read lock;

2、master端查看master状态。

1
MariaDB [(none)]> show master status\G

3、master端对数据库进行完整备份。

1
mysqldump -uroot -pserver8 --databases  newdb > /root/newdb.sql;

4、master端使用scp命令传输数据库文件newdb.sql到从服务器/root根目录。

1
scp /root/newdb.sql root@192.168.1.210:/root

5、slave端导入master端复制过来的数据库。

1
mysql  -uroot  -pclient8a  <  /root/newdb.sql

6、slave端登录数据库,停止slave的I/O及SQL线程。

1
2
mysql -uroot -p
MariaDB [(none)]>stop slave;

7、slave端重新配置主从关系(master_log_file与master_log_pos是主服务器master状态下的File与Position)。

1
2
3
4
5
6
7
MariaDB [(none)]> use mysql; #切换数据库
MariaDB [mysql]> change master to
master_host='192.168.1.200',
master_user='new',
master_password='new',
master_log_file='mysql-bin.000001',
master_log_pos=653; #配置主从同步参数

8、slave端启动slave。

1
MariaDB [mysql]>start   slave;

9、slave端查看slave状态,确认slave端I/O线程和SQL线程均为yes。

1
MariaDB [mysql]>show slave status\G

10、master端解除数据库全局读锁。

1
MariaDB [(none)]>unlock tables;