You need to enable JavaScript to run this app.
导航
报错源库参数 gtid_mode 和预期不一致,期望是:ON,但设置为了:OFF,怎么办?
最近更新时间:2024.07.16 10:41:06首次发布时间:2024.07.16 10:41:06

可能原因

由于 GTID 是 MySQL 5.6 版本引入的新特性,因此在 MySQL 5.6 及后续版本中都会存在这个问题。DTS 仅支持 gtid_mode 的取值为 ONOFF,所以建议将 gtid_mode 设置为 ON,否则 DTS 任务在创建进行预检查时都会报错。
GTID(Global Transaction Identifier,全局事务标识)是 MySQL 5.6 及后续版本中引入的一种用于标识和协调事务的机制。它为每个事务分配一个全局唯一的标识符,使得在基于 GTID 的复制环境中,管理和跟踪主从同步变得更加简单和可靠。

解决方案

在预检查遇到该报错提示时,您需要将参数 gtid_mode 的取值修改为 ON
为确保系统的一致性并防止可能的错误,gtid_mode 参数提供了包括 OFFOFF_PERMISSIVEON_PERMISSIVEON 取值:

  • 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。具体操作如下所示:

  1. 登录源数据库实例。

  2. 修改 gtid_mode 的参数取值。

    1. 在主从复制结构两边都将 gtid_mode 参数取值由 OFF 修改为 OFF_PERMISSIVE

      MySQL 5.7.6 之前的版本需要在 my.cnf 配置文件中修改并重启数据库才能生效,MySQL 5.7.6 及之后的版本通过全局命名修改,不需要重启数据库,但是需要重置所有业务连接。

      SET GLOBAL gtid_mode = OFF_PERMISSIVE;
      
    2. 在主从复制结构两边都将 gtid_mode 参数取值由 OFF_PERMISSIVE 修改为 ON_PERMISSIVE

      SET GLOBAL gtid_mode = ON_PERMISSIVE;
      
    3. 在各个实例节点上执行以下命令,检查匿名事务是否被消耗完:

      SHOW VARIABLES LIKE '%ONGOING_ANONYMOUS_TRANSACTION_COUNT%';
      

      预期执行结果如下所示:

      说明

      如果返回结果是 0,那么表示匿名事务已被消耗完。

      mysql> SHOW VARIABLES LIKE '%ONGOING_ANONYMOUS_TRANSACTION_COUNT%';
      +-------------------------------------+-------+
      | Variable_name                       | Value |
      +-------------------------------------+-------+
      | Ongoing_anonymous_transaction_count | 0     |
      +-------------------------------------+-------+
      1 row in set (0.00 sec)
      
    4. 在主从复制结构两边都将 gtid_mode 参数取值由 ON_PERMISSIVE 修改为 ON

      SET GLOBAL gtid_mode = ON;
      
    5. my.cnf 文件中添加以下内容,后重启数据库即初始值生效:

      说明

      my.cnf 配置文件的默认路径为 /etc/my.cnf,现场以实际情况为准。

      gtid_mode = on
      enforce_gtid_consistency = on
      
    6. 重新执行预检查任务。