MySQL主主复制模式—同步异常,重做主备同步,1062错误

当我们的数据出现同步异常时,我们需要重启slave同步,但是备库和主库之间数据延迟如果相差过大(此时间有MYSQL种配置的binlog日志保留时间决定),就必须要重新配置主备同步了。

为了方便区分,以下将主主数据库中,第一个主库称为主,第二个主库称为备

进入主服务器mysql:mysql -uroot -p****

  1. 停止主上的同步(此步骤非常关键,不停止可能导致数据丢失)

slave stop;

  1. 锁表(为了保障备份过程中没有新增数据,将表设置为只读)

FLUSH TABLES WITH READ LOCK;

  1. 查看主库状态,记录position和file列的bin文件

show master status;

  1. 在开一个主库的SSH连接,导出数据库(记住-R参数连同备份存储过程)

mysqldump -uroot -p123456 -R cdn_db > /home/cdndb.sql

  1. 在备库中导入上面备份的数据库

cd /home/

mysql -uroot -p*****

use cdn_db;

source cdndb2.sql;

  1. 停止备中的slave同步,并清除同步配置

slave stop;

reset slave;

  1. 执行change master to刷新同步配置(此特性在mysql 5.6以上)

change master to

master_host=’10.215.82.194′,

master_port=3306,

master_user=’aaa’,

master_password=’****’,

master_log_file=’mysql-bin.000241′,

master_log_pos=526979003;

  1. 完成以上操作,备库和主库数据已经基本一致,启动备库的slave

slave start;

  1. 查看与主库之间的同步延迟是否为0

show slave status\G;

查看 Slave_IO_Running的值是否为YES(IO进程)

查看 Slave_SQL_Running的值是否为NO(SQL解析进程)

查看seconds_behind_master值是否为0(与主库之间的同步延迟/秒)

  1. 等待seconds_behind_master值为0或接近0后切换到主库,解除锁表,开启主库中的slave同步

unlock tables;

start slave;

 

遇到1062 ERROR解决方案:

在my.conf的mysqld项目中加入

[mysqld]

slave-skip-errors=1062(表示暂时跳过1062错误)

重启SQL观察复制状态已经正常,不会再出现1062错误导致同步中断,此时再去my.cnf中删除slave-skip-errors=1062此行,重启SQL后也可以完成正常同步了。

造成此现象(ERROR 1062 主键重复)的原因可能是在主主环境中,两台数据均拥有写入的权限,即:A插入一条自增主键为n的数据,在同一时间因为数据库没有进行更新,B也插入一条自增主键为n的数据,那么此时,我们的主主复制的数据库就会出现主键冲突,而在上述中我们对备库进行了数据直接导入,与主保持了数据一致,而在主的记录中,备库应该还处于失联的状态,自己的数据领先于备库,当备库重新加入同步复制后就去主库同步数据,,在实际中我们已经将主的数据全部导入了备,不存在此问题,所以可以通过暂时忽略1062错误的方式完成数据一致性校验后,再停止忽略1062错误。

如果以上方案不适用于你的环境,没能解决此问题,请参考以下链接

https://blog.csdn.net/qq_37836418/article/details/70665339

发表评论

电子邮件地址不会被公开。 必填项已用*标注