导航

MySQL 错误集-汇总

Posted on 2019-03-28 18:28  许爱琪  阅读(300)  评论(0编辑  收藏  举报

Q&A:

MySQl报错之@@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_MODE = ON

导入的时候加入-f参数即可 

原因分析:导出原系统开启GTID模式,而导入库没有开启GTID模式

 

Q&A:

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

【解决方案】
方法一:reset mater
这个操作可以将当前库的GTID_EXECUTED值置空
方法二:--set-gtid-purged=off
在dump导出时,添加--set-gtid-purged=off参数,避免将gtid信息导出

 

Q&A:

Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction 'ad904b26-5128-11e9-92eb-0242c0a80015:3' at master log binlog.000005, end_log_pos 975. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

【解决方案】
查看造成问题的SQL:
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS --verbose node2-relay-bin.000002 > /tmp/mysqlbin.log
方法一:
STOP SLAVE;
SET @@SESSION.GTID_NEXT = '8fc8d9ac-a62b-11e6-a3ee-a4badb1b4a00:7649';
BEGIN; COMMIT;
SET @@SESSION.GTID_NEXT = AUTOMATIC;
START SLAVE;
方法二:
##GTID模式下的复制,sql_slave_skip_counter是不支持的
set global slave_exec_mode='IDEMPOTENT';##设置成IDEMPOTENT模式可以让从库避免1032(从库上不存在的键)和1062(重复键,需要存在主键或则唯一键)的错误,该模式只有在ROW EVENT的binlog模式下生效,在STATEMENT EVENT的binlog模式下无效
stop slave;
start slave;
set global slave_exec_mode='STRICT'; 
参考来源:http://www.cnblogs.com/zhoujinyi/p/8035413.html

再通过pt-table-checksum和 pt-table-sync做数据一致性处理

创建检查账号:
GRANT SELECT, PROCESS, SUPER, REPLICATION SLAVE,CREATE,DELETE,INSERT,UPDATE ON *.* TO 'pt_checksum' IDENTIFIED BY '1qaz!QAZ';

检查是否有差异:
pt-table-checksum h='192.168.0.21',u='pt_checksum',p='1qaz!QAZ',P=3306 -d gtid --tables=t --nocheck-replication-filters --replicate=percona.checksums --no-check-binlog-format
--[no]check-binlog-format        #默认会检查binlog-format,如果不是statment,就会报错退出,想避免该检查可以设置--no-check-binlog-format
--replicate                      #用来指定存放计算结果的表名, 默认是percona.checksums,工具会默认自动创建库percona和表checksums并将checksum的检查结果输入到这个表中
--[no]check-replication-filters  #默认在检查到在主从复制过程中有被用..ignore..过滤掉的表,检查会中断并退出,如果想避开这个检查可以设置--no-check-replication-filters
参考来源:https://www.cnblogs.com/xiaoyanger/p/5584554.html

我们使用pt-table-sync工具还同步这张表的数据:
pt-table-sync --charset=utf8 --print --no-check-slave -d gtid -t t h=192.168.0.21,u='pt_checksum',p='1qaz!QAZ',P=3306 h=192.168.0.22,u='pt_checksum',p='1qaz!QAZ',P=3306 ##前面填主库的内容,后面填从库的内容
--no-check-slave                 #不检查desitination是否为从库
--print                          #打印差异变更语句
--execute                        #执行差异变更语句
执行变更可以直接执行差异变更SQL或者通过以下语句执行:
pt-table-sync --charset=utf8 --execute --no-check-slave -d gtid -t t h=192.168.0.21,u='pt_checksum',p='1qaz!QAZ',P=3306 h=192.168.0.22,u='pt_checksum',p='1qaz!QAZ',P=3306

注意:如果是sync主从数据,只有当需要sync的表都有唯一键(主键或唯一索引),才能使用--sync-to-master and/or --replicate。(没有唯一键,则只能在desitination上直接修改,而指定--sync-to-master and/or –replicate时只能在主库上修改),
如果sync主从时没有指定--replicate或者--sync-to-master则所有修改都在从库上执行(不论表上是否有唯一键)