当前位置: 首页 > MySQL数据库

怎么理解MySQL的GTID复制

时间:2026-01-28 14:10:40
什么是GTID

什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能。
GTID是事务提交时创建分配的唯一标识符,所有事务均与GTID一一映射。

GTID的格式类似于:
5882bfb0-c936-11e4-a843-000c292dc103:1
这个字符串,用“:”分开,前面表示这个服务器的server_uuid,这是一个128位的随机字符串,在第一次启动时生成(函数generate_server_uuid),对应的variables是只读变量server_uuid。 它能以极高的概率保证全局唯一性,并存到文件
DATADIR/auto.cnf中。因此要注意保护这个文件不要被删除或修改。

第二部分是一个自增的事务ID号,事务id号+server_uuid来唯一标示一个事务。

mysql> show global variables like '%gtid%';+--------------------------+------------------------------------------+| Variable_name            | Value                                    |+--------------------------+------------------------------------------+| enforce_gtid_consistency | ON                                       || gtid_executed            | 5882bfb0-c936-11e4-a843-000c292dc103:1-6 || gtid_mode                | ON                                       || gtid_owned               |                                          || gtid_purged              |                                          |+--------------------------+------------------------------------------+5 rows in set (0.00 sec)mysql> show global variables like '%uuid%';+---------------+--------------------------------------+| Variable_name | Value                                |+---------------+--------------------------------------+| server_uuid   | 5882bfb0-c936-11e4-a843-000c292dc103 |+---------------+--------------------------------------+1 row in set (0.00 sec)shell> cat auto.cnf [auto]server-uuid=5882bfb0-c936-11e4-a843-000c292dc103
设置GTID复制

    同步主从数据

    mysql> SET @@global.read_only = ON;Query OK, 0 rows affected (0.01 sec)

    停止所有数据库

    shell> mysqladmin -u root -p shutdown

    设置开发GTID模式并启动所有数据库

    shell> vi my.cnf  添加如下内容================================================================[mysqld]gtid_mode=ONlog-slave-updates=ONenforce-gtid-consistency=ON          #强制GTID的一致性================================================================

    从库指定主库

    mysql> CHANGE MASTER TO       -> MASTER_HOST = host,      -> MASTER_PORT = port,      -> MASTER_USER = user,      -> MASTER_PASSWORD = password,      -> MASTER_AUTO_POSITION = 1;mysql> START SLAVE;Query OK, 0 rows affected (0.04 sec)

    禁止read-only模式

    mysql> SET @@global.read_only = OFF;Query OK, 0 rows affected (0.00 sec)
GTID复制的限制

GTID 模式实例和非GTID模式实例是不能进行复制的,要求非常严格,要么都是GTID,要么都不是
gtid_mode 是只读的,要改变状态必须1)关闭实例、2)修改配置文件、3) 重启实例

  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素