主从数据同步-GTID配置一、GTID 是什么GTID = Global Transaction ID,全局事务唯一 IDMySQL 5.6 开始支持,8.0 默认推荐开启,是替代传统binlog文件+pos位点的新一代主从复制定位方案。 格式:uuid:事务号uuid:主库唯一 server_uuid事务号:该主库执行的第 N 个事务二、核心功能与作用(对比传统点位复制)1. 自动定位同步点位(你现在用的master_auto_position=1)传统复制痛点: 搭建 / 重建从库必须手动记录主库binlog文件名、position偏移量,一旦记错、丢日志,同步直接报错。 GTID 作用: 开启MASTER_AUTO_POSITION=1后,从库自动告知主库自己已执行完哪些 GTID 事务,主库自动推送未执行过的新事务,不用手动填日志文件和位点。对应你当前场景:你配置master_auto_position=1就是依靠 GTID 自动找同步起点。2. 主从切换更简单(故障转移、MGR、主从切换必备)传统切换: 主宕机,找新主时,需要对比所有从库 binlog 点位,人工找数据最全的从库提升为主,操作繁琐。 GTID 作用: 所有节点统一事务编号,直接对比Executed_Gtid_Set就能一眼看出哪个从库数据最新,一键切换主库,适配高可用架构(MGR、MHA)。3. 杜绝重复事务、数据冲突传统点位缺陷: 手动写错 pos,会重复同步同一批事务,产生主键冲突、数据重复。 GTID 特性: 每个全局事务只执行一次,从库自动跳过已经执行过的 GTID 事务,不会重复回放,大幅减少同步报错。4. 支持多源复制(多主同步)一台从库同时同步多个主库的数据,传统点位很难维护,GTID 依靠不同 uuid 区分不同主库事务,天然支持多源复制。5. 方便数据校验、数据一致性排查执行命令快速对比主从数据是否一致:-- 查看本机已经执行完的所有GTID show variables like '%gtid_executed%'; -- 查看已经拉取但未执行的GTID show variables like '%gtid_retrieved%';只需对比主从Executed_Gtid_Set,就能判断是否数据完全同步,无需对比 binlog 文件。6. 迁移、备份恢复后主从快速搭建使用 mysqldump 物理 / 逻辑备份时,备份文件会记录当前执行完成的 GTID 集合。 新从库导入备份后,直接master_auto_position=1自动同步增量,不用手动记录备份时刻 binlog 点位。三、GTID 两大核心配套参数(主库配置)主库操作:[root@db01 backup]# cat /etc/my.cnf [mysqld] user=mysql port=3306 pid-file=/data/3306/data/db02.pid basedir=/opt/module/mysql datadir=/data/3306/data socket=/tmp/mysql.sock gtid-mode=on enforce-gtid-consistency=true重启数据库systemctl restart mysql.service -- 进入数据库验证配置文件参数 mysql -uroot -proot123 mysql show master status; +---------------+----------+--------------+------------------+------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+------------------------------------------+ | binlog.000002 | 543 | | | f24ba3c0-7397-11f1-a178-000c290386a9:1-8 | +---------------+----------+--------------+------------------+------------------------------------------+ 1 row in set (0.00 sec)删除一个数据库 mysql show databases; +--------------------+ | Database | +--------------------+ | data | | haha1 | | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 7 rows in set (0.00 sec) mysql drop database haha1; Query OK, 0 rows affected (0.00 sec) 937展示了删除数据库信息mysql show binlog events in 'binlog.000976'; +---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | binlog.000976 | 4 | Format_desc | 1 | 126 | Server ver: 8.0.36, Binlog ver: 4 | | binlog.000976 | 126 | Previous_gtids | 1 | 197 | f24ba3c0-7397-11f1-a178-000c290386a9:1-5 | | binlog.000976 | 197 | Gtid | 1 | 274 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:6' | | binlog.000976 | 274 | Query | 1 | 381 | drop database test1 /* xid=814 */ | | binlog.000976 | 381 | Gtid | 1 | 458 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:7' | | binlog.000976 | 458 | Query | 1 | 565 | drop database hehe1 /* xid=1590 */ | | binlog.000976 | 565 | Gtid | 1 | 642 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:8' | | binlog.000976 | 642 | Query | 1 | 753 | create database haha1 /* xid=1602 */ | | binlog.000976 | 753 | Gtid | 1 | 830 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:9' | | binlog.000976 | 830 | Query | 1 | 937 | drop database haha1 /* xid=1607 */ | +---------------+-----+----------------+-----------+-------------+-------------------------------------
MySQL-数据库同步扩展(GTID配置和延时同步 )
发布时间:2026/7/16 5:01:11
主从数据同步-GTID配置一、GTID 是什么GTID = Global Transaction ID,全局事务唯一 IDMySQL 5.6 开始支持,8.0 默认推荐开启,是替代传统binlog文件+pos位点的新一代主从复制定位方案。 格式:uuid:事务号uuid:主库唯一 server_uuid事务号:该主库执行的第 N 个事务二、核心功能与作用(对比传统点位复制)1. 自动定位同步点位(你现在用的master_auto_position=1)传统复制痛点: 搭建 / 重建从库必须手动记录主库binlog文件名、position偏移量,一旦记错、丢日志,同步直接报错。 GTID 作用: 开启MASTER_AUTO_POSITION=1后,从库自动告知主库自己已执行完哪些 GTID 事务,主库自动推送未执行过的新事务,不用手动填日志文件和位点。对应你当前场景:你配置master_auto_position=1就是依靠 GTID 自动找同步起点。2. 主从切换更简单(故障转移、MGR、主从切换必备)传统切换: 主宕机,找新主时,需要对比所有从库 binlog 点位,人工找数据最全的从库提升为主,操作繁琐。 GTID 作用: 所有节点统一事务编号,直接对比Executed_Gtid_Set就能一眼看出哪个从库数据最新,一键切换主库,适配高可用架构(MGR、MHA)。3. 杜绝重复事务、数据冲突传统点位缺陷: 手动写错 pos,会重复同步同一批事务,产生主键冲突、数据重复。 GTID 特性: 每个全局事务只执行一次,从库自动跳过已经执行过的 GTID 事务,不会重复回放,大幅减少同步报错。4. 支持多源复制(多主同步)一台从库同时同步多个主库的数据,传统点位很难维护,GTID 依靠不同 uuid 区分不同主库事务,天然支持多源复制。5. 方便数据校验、数据一致性排查执行命令快速对比主从数据是否一致:-- 查看本机已经执行完的所有GTID show variables like '%gtid_executed%'; -- 查看已经拉取但未执行的GTID show variables like '%gtid_retrieved%';只需对比主从Executed_Gtid_Set,就能判断是否数据完全同步,无需对比 binlog 文件。6. 迁移、备份恢复后主从快速搭建使用 mysqldump 物理 / 逻辑备份时,备份文件会记录当前执行完成的 GTID 集合。 新从库导入备份后,直接master_auto_position=1自动同步增量,不用手动记录备份时刻 binlog 点位。三、GTID 两大核心配套参数(主库配置)主库操作:[root@db01 backup]# cat /etc/my.cnf [mysqld] user=mysql port=3306 pid-file=/data/3306/data/db02.pid basedir=/opt/module/mysql datadir=/data/3306/data socket=/tmp/mysql.sock gtid-mode=on enforce-gtid-consistency=true重启数据库systemctl restart mysql.service -- 进入数据库验证配置文件参数 mysql -uroot -proot123 mysql show master status; +---------------+----------+--------------+------------------+------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +---------------+----------+--------------+------------------+------------------------------------------+ | binlog.000002 | 543 | | | f24ba3c0-7397-11f1-a178-000c290386a9:1-8 | +---------------+----------+--------------+------------------+------------------------------------------+ 1 row in set (0.00 sec)删除一个数据库 mysql show databases; +--------------------+ | Database | +--------------------+ | data | | haha1 | | information_schema | | mysql | | performance_schema | | sys | | test | +--------------------+ 7 rows in set (0.00 sec) mysql drop database haha1; Query OK, 0 rows affected (0.00 sec) 937展示了删除数据库信息mysql show binlog events in 'binlog.000976'; +---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +---------------+-----+----------------+-----------+-------------+-------------------------------------------------------------------+ | binlog.000976 | 4 | Format_desc | 1 | 126 | Server ver: 8.0.36, Binlog ver: 4 | | binlog.000976 | 126 | Previous_gtids | 1 | 197 | f24ba3c0-7397-11f1-a178-000c290386a9:1-5 | | binlog.000976 | 197 | Gtid | 1 | 274 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:6' | | binlog.000976 | 274 | Query | 1 | 381 | drop database test1 /* xid=814 */ | | binlog.000976 | 381 | Gtid | 1 | 458 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:7' | | binlog.000976 | 458 | Query | 1 | 565 | drop database hehe1 /* xid=1590 */ | | binlog.000976 | 565 | Gtid | 1 | 642 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:8' | | binlog.000976 | 642 | Query | 1 | 753 | create database haha1 /* xid=1602 */ | | binlog.000976 | 753 | Gtid | 1 | 830 | SET @@SESSION.GTID_NEXT= 'f24ba3c0-7397-11f1-a178-000c290386a9:9' | | binlog.000976 | 830 | Query | 1 | 937 | drop database haha1 /* xid=1607 */ | +---------------+-----+----------------+-----------+-------------+-------------------------------------