我正在做一个从mysql到mariadb的迁移工作,其中涉及到复制,一切都很好,主mysql(5.5.59)到从mariadb(10.1.26)的兼容性也很好。
当我启用从mariadb master到mariadb slave的复制(相同版本:10.1.26)时,问题就出现了。在某些情况下,在大量更新中发现,从服务器开始延迟。如果我将主服务器恢复到mysql(5.5.59),并在mariadb中复制到同一个从服务器,那么在同一组更新中就不会出现延迟。
我检查了延迟的mariadb slave中的中继日志,比较了mysql为主时接收到的日志和mariadb为主时接收到的日志,唯一的区别是当主服务器为mariadb时我可以看到与gtid相关的语句。
当主机是mariadb时,我想禁用中继日志上的gtid语句,并进行类似于没有gtid的“旧式”mysql复制的复制,但是我还没有发现是否可以这样做。
1条答案
按热度按时间uidvcgyl1#
复制延迟是由于从服务器中mysql.gtid\u slave\u pos表中设置的引擎造成的,默认情况下,该表是innodb,接收复制更新的表不是innodb。
正如下面的链接中所解释的,slave执行的每个事务也会导致mysql.gtid\u slave\u pos上的更新,如果表的引擎不同,则会导致性能不好(在我的例子中,服务器延迟了4000多秒,在mysql.gtid\u slave\u pos中更改引擎,复制现在立即进行)。
https://mariadb.com/kb/en/library/mysqlgtid_slave_pos-table/
从mariadb 10.3.1开始,引入了一个新参数来帮助解决这个问题:gtid\u pos\u auto\u engines这个参数将为复制中涉及的每个引擎创建一个不同的表mysql.gtid\u slave\u pos。不幸的是,使用previus版本的mariadb似乎不可能做到这一点,表mysql.gtid\u slave\u pos必须是唯一的,其引擎的选择取决于dba和复制中涉及的表/查询