GreatSQL一个关于主从复制的限制描述与规避( 三 )

结论:在主集群的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)修改忽略库


推荐阅读