简介 mysql主从不同步的几种情况
一 具体情况
1 主库有memory引擎的内存表
分析 由于memory表的数据存放在内存中,一旦主库数据丢失,从库可能就会发生数据复制异常
2 从库有super权限的用户进行数据操作
分析 5.7之前,哪怕设置从库只读,有super权限的用户还是可以进行数据修改,一旦在从库进行操作,那么主从数据必将不一致,发生数据复制异常
3 由于binlog格式非row的问题
分析 对于binlog格式非row的情况下,可能某些函数和机制都会造成主从同步异常
4 由于配置文件不一致导致的问题
1 server_id配置一致
2 sql_mode 配置不一致
3 主从信息保存在文件中,而非table级别
4 设置了table/db过滤规则
5 由于主库开启了某种特性造成的问题
分析 常见于event事件
二 解决办法
方案1
改造memory内存表要么去掉,要么改成innodb引擎
方案2
设置从库只读,不允许研发人员操作从库,不提供super账号
方案3
设置binlog为统一row格式
方案4
保证主从的配置文件大体一致,防止出现问题
方案5
1 对于已经存在的主从, 新建立events没有影响。从别的主库同步过来的event, 本身不会执行。
2 对于新建立的主从,如果有events ,那么需要在从库上把event_scheduler设置为off.否则本身还会执行一遍
三 修复主从不一致的方法
1 跳过主从不一致错误(不推荐),可能导致一系列重复问题
2 利用备份重做从库
3 利用binlog2sql/pt等开源工具对不一致的数据进行修复
四 常见 错误补充
1 变量问题
1 Could not execute Write_rows event on table practice.temp_baofoo_unbind; Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again, Error_code: 1197; Writing one row to the row-based binary log failed, Error_code: 1534; handler error HA_ERR_RBR_LOGGING_FAILED; the event's master log binlog.000017, end_log_pos 268602107
2 数据错乱
1 Could not execute Delete_rows event on table hcy.t1; Can't find record in 't1',
2 Could not execute Write_rows event on table hcy.t1; Duplicate entry '2' for key 'PRIMARY'
3 binlog定位问题
1 [ERROR] Slave I/O: Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'