记5.7mysql开启MTS失败

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:数据库偶尔有延迟问题, 经常对业务造成困扰。
环境: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大哥显然没这么做。
### MySQL 5.7.x 版本特性 MySQL 5.7引入了许多新特性和改进,显著提升了性能、可扩展性和安全性。主要特点包括: - **InnoDB存储引擎增强**:提供了更好的事务处理能力,支持在线DDL操作,增强了数据压缩功能[^1]。 - **JSON支持**:新增原生JSON数据类型的全面支持,允许更高效地查询和管理半结构化数据[^2]。 - **窗口函数**:虽然正式加入是在后续版本中完成,但在5.7版里已经打下了基础,为复杂分析提供便利[^3]。 - **多线程复制(MTS)**:提高了并行复制效率,减少了主从延迟时间[^4]。 - **优化器改进**:通过多种方式改善了SQL执行计划的选择逻辑,使得更多种类的查询能够获得更快的速度。 - **安全加固**:加强了身份验证机制,默认启用更强加密算法,并增加了密码强度策略等功能。 ### 安装配置方法 对于不同操作系统环境下的MySQL 5.7.x安装有几种常见的方式可以选择: #### 源码编译安装 适用于希望完全控制软件构建过程的情况。此方法涉及下载官方发布的源代码包,在本地环境中按照特定顺序编译链接生成最终的应用程序文件。 ```bash mkdir -p /opt/package/mysql_package && cd /opt/package/mysql_package \ && wget https://cdn.mysql.com/archives/mysql-5.7/mysql-boost-5.7.44.tar.gz ``` #### Yum安装部署 针对基于RedHat/CentOS系统的简化方案,利用预建好的RPM包实现一键式自动化安装流程,极大地方便了管理员的操作。 #### 二进制包安装 这种方式适合那些不想经历繁琐编译步骤却又想享受接近于定制化的用户体验的人群。它同样依赖于预先打包好的二进制分发版来进行快速设置。 #### 免安装版本 特别设计用于Windows平台或者临时测试场景下使用的简便途径。只需解压即可运行,无需复杂的前期准备工作。 ### 使用教程概览 初次接触MySQL的新手可以从以下几个方面入手学习如何有效管理和应用该数据库管理系统: - 学习基本命令行工具`mysql`客户端及其常用参数选项; - 掌握创建数据库对象(表空间、用户账号等)、导入导出备份恢复等相关技能; - 熟悉SQL语句编写规范以及最佳实践建议; - 关注性能调优技巧,比如索引设计原则、慢日志分析等方面的知识积累;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值