
Mysql同步复制报错故障处理
-
先听大哥给你讲讲异步复制和同步复制的区别:
异步复制:master将binlog发送给slave,不管slave是否接受完毕,也不管是否执行完,这一动作就结束。
半同步复制:master把binlog发送过去,slave确认接受完,但不管它是否执行完,slave会给master 一个信号我这边收到了,动作结束。。
-
ERROR处理:
1 问题:在master上删除一条记录后,slave上找不到记录导致报错
#解决方法:因主机master已经删除了改记录,可采取从机直接跳过的方式解决 命令如下:stop slave;set global sql_slave_skip_counter=1;start slave
2 问题:主键重复
#解决方法:在slave上执行-> desc 表 -> 得到主键的字段名 -> delete掉重复主键 -> 开启同步功能 start salve;
3 问题:在master 上更新一条记录,slave上找不到
#解决方法: 在master 查到该数据 在slave上进行填补(啊哈哈)然后执行跳过报错 命令如下:stop slave;set global sql_slave_skip_counter=1;start slave
4 问题:slave的中继日志relay-log损坏
#解决方法: 找到同步binglog日志和POS点,然后重新进行同步,这样就可以有新的中继日志了。操作如下 stop slave; -> CHANGE master TO master_LOF_FILE=’MySQL-bin.xxxxxx’,master_LOG_POS=xxx; -> start slave;(完美)
5 问题:在Mysql master上使用binlog_ignore_db命令忽略一个库以后,使用mysql –e执行的所有语句就不写binlog了。结果行创建的表在slave上一个都没有,原因就是没有使用 use 库名
先来了解下忽略某个库的复制参数(两个参数):
一个是binlog_ignore_db(是在主上设置,列如,binlog_ignore_db=test,这时对test库的所有操作都不会记录下来),
另一个是replicate-ignore-db(是在从库上设置,列如,replicate-ignore-db=test,这时对test库下的所有操作都不会被SQL线程执行)
#解决方法:所以最好在从库上执行replicate-ignore-db
-
方法: