【问题标题】:MariaDB replication - slave lag due to gtid statements in relay logMariaDB 复制 - 由于中继日志中的 gtid 语句导致从属滞后
【发布时间】:2018-04-11 16:20:25
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: mysql mariadb replication database-replication gtid


    【解决方案1】:

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

    正如下面链接中所解释的,slave 执行的每个事务也会导致 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。不幸的是,使用以前版本的 MariaDB 似乎不可能实现这一点,表 mysql.gtid_slave_pos 必须是唯一的,其引擎的选择取决于 DBA 和复制中涉及的表/查询

    【讨论】:

      猜你喜欢
      • 2020-11-11
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多