结论:在主集群的binlog日志中找到了目标表的建表语句,说明主集群执行DDL时并没有关闭binlog日志,那么继续查看在灾备集群的中继日志中是否存在DDL语句
3.4、解析灾备集群的中继日志,确认是否拉取到灾备集群
#230822 14:08:15 server id 1943306 end_log_pos 475863662 GTID last_committed=16341 sequence_number=16342 rbr_only=noSET @@SESSION.GTID_NEXT= '9e668a93-2618-11ee-93ee-bc16954181bb:47498079'/*!*/;……use `information_schema`/*!*/;SET TIMESTAMP=1692684495/*!*/;CREATE TABLE `abs_xxx`.`tmp_xxx_info` ( `ID` int(64) NOT NULL AUTO_INCREMENT, `CUSTOMER_NAME` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `CUSTOMER_NUM` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `PRODIST_SKU_NUM` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL, `STATUS` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL, `AGREEMENT_NUM` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `END_DATE` datetime DEFAULT NULL, PRIMARY KEY (`ID`), KEY `PK_PRODIST_SKU_NUM_AGREEMENT` (`PRODIST_SKU_NUM`) USING BTREE, KEY `IDX_AGREEMENT_NUM` (`AGREEMENT_NUM`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC/*!*/;# at 475864660#230822 14:08:15 server id 1943306 end_log_pos 475864512 GTID last_committed=16342 sequence_number=16343 rbr_only=yes/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
结论:灾备集群的中继日志中存在DDL建表语句,说明并不是IO线程出了问题
3.5、排查复制配置的忽略库表
Replicate_Ignore_DB: mysql,dbscale,dbscale_tmp,information_schema,performance_schema,sysReplicate_Wild_Ignore_Table: A.ab,B.bc
结论:忽略库表中并不包含目标表,但是根据以上解析日志发现 , 在主集群binlog日志中建表语句之前有个use information_schema/!/;
的语句,此库为同步忽略的系统库,因此触发了GreatSQL的规范限制,在忽略库下对未忽略进行操作Statement模式下记录语句默认不起作用 (详情:https://dev.mysql.com/doc/refman/5.7/en/replication-options-replica.html#option_mysqld_replicate-do-db)
4、解决同步报错在灾备集群创建目标表
greatsql> CREATE TABLE `abs_xxx`.`tmp_xxx_info` ( `ID` int(64) NOT NULL AUTO_INCREMENT, `CUSTOMER_NAME` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `CUSTOMER_NUM` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `PRODIST_SKU_NUM` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL, `STATUS` varchar(64) COLLATE utf8mb4_bin DEFAULT NULL, `AGREEMENT_NUM` varchar(256) COLLATE utf8mb4_bin DEFAULT NULL, `END_DATE` datetime DEFAULT NULL, PRIMARY KEY (`ID`), KEY `PK_PRODIST_SKU_NUM_AGREEMENT` (`PRODIST_SKU_NUM`) USING BTREE, KEY `IDX_AGREEMENT_NUM` (`AGREEMENT_NUM`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;greatsql> stop slave;greatsql> start slave;
结论:在灾备集群创建目标表后重启复制恢复成功
三、限制规避1、第一种规避方式执行DDL时进入目标库
greatsql> use abs_custgreatsql> DDL 语句(CREATEDROPALTER)
说明:在应用连接数据库时有可能默认就是information_schema
库,而此环境将系统库全部忽略,所以为了规避类似的问题 , 请在执行SQL语句时请先use到目标表的目标库 。
2、第二种规避方式修改主从复制配置,以下步骤为测试环境
关闭灾备集群在复制同步
greatsql> stop slave;Query OK, 0 rows affected, 1 warning (0.03 sec)
修改忽略库
推荐阅读
- 如何使用Noir从源代码检测攻击面
- 57岁的大郑爽,依然待字闺中未婚单身,最美扈三娘惊艳了一个时代
- 大炮打一个基数是啥意思?一个基数到底有多少颗炮弹
- 有关谷雨的儿歌 关于谷雨的儿歌
- 没结婚但有固定伴侣,这5位“中年尤物”,一个比一个过得滋润
- 大门指什么动物或者生肖 大门是代表哪一个生肖
- 关于白杨树的介绍作文 关于白杨树的介绍
- 关于元旦节的风俗 关于元旦节的风俗作文
- 床头放什么旺财旺身体 一个家旺不旺看厨房
- 同样是消防员,黄景瑜和杨洋对比,一个自然真实、一个呆若木鸡