- 文档首页
数据库传输服务
常见问题
常见预检查报错
报错源库参数 gtid_mode 和预期不一致,期望是:ON,但设置为了:OFF,怎么办?
常见预检查报错
报错源库参数 gtid_mode 和预期不一致,期望是:ON,但设置为了:OFF,怎么办?
报错源库参数 gtid_mode 和预期不一致,期望是:ON,但设置为了:OFF,怎么办?
可能原因
由于 GTID 是 MySQL 5.6 版本引入的新特性,因此在 MySQL 5.6 及后续版本中都会存在这个问题。DTS 仅支持 gtid_mode 的取值为 ON 和 OFF,所以建议将 gtid_mode 设置为 ON,否则 DTS 任务在创建进行预检查时都会报错。
GTID(Global Transaction Identifier,全局事务标识)是 MySQL 5.6 及后续版本中引入的一种用于标识和协调事务的机制。它为每个事务分配一个全局唯一的标识符,使得在基于 GTID 的复制环境中,管理和跟踪主从同步变得更加简单和可靠。
解决方案
在预检查遇到该报错提示时,您需要将参数 gtid_mode 的取值修改为 ON。
为确保系统的一致性并防止可能的错误,gtid_mode 参数提供了包括 OFF、OFF_PERMISSIVE、ON_PERMISSIVE 和 ON 取值:
- OFF:关闭 GTID 模式,即不使用 GTID 进行事务管理。
- OFF_PERMISSIVE:系统既接受没有 GTID 的事务,也接受带有 GTID 的事务,但不允许只有 GTID 的事务。这是一个过渡状态,允许从关闭 GTID 模式向开启 GTID 模式逐步过渡。
- ON_PERMISSIVE:系统生成 GTID 并将其附加到新的事务中,但仍然接受没有 GTID 的事务。这也是一个过渡状态,允许从关闭 GTID 模式向开启 GTID 模式逐步过渡。
- ON:完全启用 GTID 模式,只接受带有 GTID 的事务,拒绝没有 GTID 的事务。
需要注意的是,将 gtid_mode 参数从 OFF 修改为ON,您需要按照顺序逐级修改。gtid_mode 参数的取值等级依次为 OFF<->OFF_PERMISSIVE<->ON_PERMISSIVE<->ON。具体操作如下所示:
- 在主从复制结构两边都将 gtid_mode 参数取值由 OFF 修改为 OFF_PERMISSIVE:
- MySQL 5.7.6 之前的版本需要在 my.cnf 配置文件中修改并重启数据库才能生效,MySQL 5.7.6 及之后的版本通过全局命名修改,不需要重启数据库,但是需要重置所有业务连接。
- 在主从复制结构两边都将 gtid_mode 参数取值由 OFF_PERMISSIVE 修改为 ON_PERMISSIVE:
- 在各个实例节点上执行以下命令,检查匿名事务是否被消耗完:
说明
如果返回结果是 0,那么表示匿名事务已被消耗完。
- 在主从复制结构两边都将 gtid_mode 参数取值由 ON_PERMISSIVE 修改为 ON:
- 在 my.cnf 文件中添加以下内容,后重启数据库即初始值生效:
说明
my.cnf 配置文件的默认路径为 /etc/my.cnf,现场以实际情况为准。
最近更新时间:2026.10.16 10:56:37