MariaDB复制 - 由于中继日志中的gtid语句导致的从属延迟

时间:2018-04-11 16:20:25

标签: mysql mariadb replication database-replication gtid

我正在从MySql迁移到MariaDB,其中涉及复制,一切正常,并且主MySql(5.5.59)与奴隶MariaDB(10.1.26)的兼容性很好。

当我启用从MariaDB主服务器到MariaDB从服务器的复制时,会出现问题(相同版本:10.1.26)。在某些情况下,在大规模更新中发现,奴隶开始滞后。 如果我将主服务器恢复到MySql(5.5.59)并且我复制到MariaDB中的同一个从服务器,则在同一组更新中不会发生延迟。

我检查了延迟的MariaDB从站中的中继日志,比较了当MySql是主服务器时收到的日志和MariaDB是主服务器时收到的日志日志,唯一的区别是当主服务器是MariaDB时我可以看到相关的语句去gtid。

我想在主服务器是MariaDB时禁用中继日志中gtid语句的存在,并进行类似于没有gtid的“旧样式”MySql复制的复制,但是我没有找到是否可以做这一点。

1 个答案:

答案 0 :(得分:1)

复制延迟是由于从属服务器中的表mysql.gtid_slave_pos中设置了引擎,默认情况下,此表是InnoDB,并且接收复制更新的表不是InnoDB。

正如下面的链接所解释的那样,奴隶执行的每个事务都会导致mysql.gtid_slave_pos的更新,如果表的引擎不同,可能会导致性能不佳(在我的情况下,服务器落后于4000+)秒,更改mysql.gtid_slave_pos中的引擎,立即复制。

https://mariadb.com/kb/en/library/mysqlgtid_slave_pos-table/

从MariaDB 10.3.1开始,引入了一个新参数来帮助解决这个问题:gtid_pos_auto_engines此参数将为复制中涉及的每个引擎创建一个不同的表mysql.gtid_slave_pos。不幸的是,使用previus版本的MariaDB似乎无法实现这一点,表mysql.gtid_slave_pos必须是唯一的,其引擎的选择取决于DBA和复制中涉及的表/查询