记5.7mysql开启MTS失败

本文讨论了在MySQL 5.7环境中,尝试开启Multi-Threaded Slave (MTS)时遇到的GTID一致性错误。错误提示表明更新非事务性表和事务性表在同一语句中进行,这违反了GTID一致性规则。解决方案建议在开启MTS前进行充分规划,或者在测试环境中模拟并解决问题,避免直接在线上操作。DBA未遵循最佳实践导致了这次升级失败。
摘要由CSDN通过智能技术生成

问题:数据库偶尔有延迟问题, 经常对业务造成困扰。
环境:mysql5.7,mycat
目标:开启MTS
结果:开启失败,还原之前配置
失败原因:
: General error: 1785 Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables
以下是官方给出的解释:
https://dev.mysql.com/doc/refman/5.7/en/replication-options-gtids.html
https://dev.mysql.com/doc/refman/5.7/en/replication-gtids-restrictions.html

  1. 涉及非事务性存储引擎的更新。 网上说的最多的问题。数据库主表和从表引擎不一致
  2. CREATE TABLE … SELECT使用基于 GTID 的复制时不允许使用语句。
  3. 临时表。 使用 GTID 时,事务、过程、函数和触发器内部不支持CREATE TEMPORARY TABLE和 DROP TEMPORARY TABLE语句 。
  4. 防止执行不受支持的语句。 为了防止执行会导致基于 GTID 的复制失败的语句,所有服务器必须–enforce-gtid-consistency在启用 GTID 时使用该 选项启动。
  5. 跳过交易。 sql_slave_skip_counter使用 GTID 时不支持。
  6. 忽略服务器。 CHANGE MASTER TO使用 GTID 时不推荐使用语句 的 IGNORE_SERVER_IDS 选项,因为已应用的事务将被自动忽略。
  7. GTID 模式和 mysqldump。 如果目标服务器的二进制日志中没有 GTID ,则可以将使用mysqldump制作的转储导入 到启用了 GTID 模式的 MySQL 服务器中。
  8. GTID 模式和 mysql_upgrade。 当服务器在启用 ( gtid_mode=ON)全局事务标识符 (GTID) 的情况下运行时,不要通过mysql_upgrade (–write-binlog 选项)启用二进制日志记录。

总结:
由于有专门的DBA,无法环境数据库真实环境,查问题,顾只能贴资料。
解决方案:

  1. 类似这种升级,需要提前规划好,就是搭建集群的时候一开始并开启相关配置避免这种问题
  2. 如果需要在当前环境升级,搭建一套虚拟环境模拟真实环境,然后先在测试环境上填坑。 完成后在尝试线上。失败后马上恢复,再把问题复现到测试环境,解决后,再线上尝试。我们的DBA大哥显然没这么做。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值