MariaDB 复制 - 由于中继日志中的 gtid 语句导致从站滞后

MariaDB replication - slave lag due to gtid statements in relay log

我正在进行从 MySql 到涉及复制的 MariaDB 的迁移工作,一切工作正常并且主 MySql (5.5.59) 与从属 MariaDB (10.1.26) 的兼容性) 不错。

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

我检查了滞后的MariaDB slave中的relay logs,比较了当MySql是master时收到的和当MariaDB是master时收到的,唯一的区别是当master是MariaDB我可以看到与gtid相关的语句。

我想在主服务器是 MariaDB 时禁用中继日志上 gtid 语句的存在,并进行类似于没有 gtid 的 "old style" MySql 复制的复制,但我已经找不到是否可以这样做。

复制滞后是由于在从属服务器 table mysql.gtid_slave_pos 中设置的引擎,默认情况下此 table 是 InnoDB 而 table 是正在接收复制更新的不是 InnoDB。

正如下面 link 中所解释的,slave 执行的每个事务也会导致 mysql.gtid_slave_pos 的更新,如果 table 的引擎不同,则可能导致性能不佳(在我的情况下,服务器滞后 4000 多秒,更改 mysql.gtid_slave_pos 中的引擎,现在立即进行复制)。

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

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