千家信息网

MySQL GTID 主从复制的原理及配置

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也
千家信息网最后更新 2025年11月07日MySQL GTID 主从复制的原理及配置

GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。本文主要描述了快速配置一个基于GTID的主从复制架构,供大家参考。


一、GTID的概念

1、全局事务标识:global transaction identifiers。

2、GTID是一个事务一一对应,并且全局唯一ID。

3、一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致。

4、GTID用来代替传统复制方法,不再使用MASTER_LOG_FILE+MASTER_LOG_POS开启复制。而是使用MASTER_AUTO_POSTION=1的方式开始复制。

5、MySQL-5.6.5开始支持的,MySQL-5.6.10后开始完善。

6、在传统的slave端,binlog是不用开启的,但是在GTID中slave端的binlog是必须开启的,目的是记录执行过的GTID(强制)。


二、GTID的组成

GTID = source_id:transaction_id

source_id,用于鉴别原服务器,即mysql服务器唯一的的server_uuid,由于GTID会传递到slave,所以也可以理解为源ID。

transaction_id,为当前服务器上已提交事务的一个序列号,通常从1开始自增长的序列,一个数值对应一个事务。

示例: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23

前面的一串为服务器的server_uuid,即3E11FA47-71CA-11E1-9E33-C80AA9429562,后面的23为transaction_id


三、GTID的优势

1、更简单的实现failover,不用以前那样在需要找log_file和log_pos。

2、更简单的搭建主从复制。

3、比传统的复制更加安全。

4、GTID是连续的没有空洞的,保证数据的一致性,零丢失。



四、GTID的工作原理

1、当一个事务在主库端执行并提交时,产生GTID,一同记录到binlog日志中。

2、binlog传输到slave,并存储到slave的relaylog后,读取这个GTID的这个值设置gtid_next变量,即告诉Slave,下一个要执行的GTID值。

3、sql线程从relay log中获取GTID,然后对比slave端的binlog是否有该GTID。

4、如果有记录,说明该GTID的事务已经执行,slave会忽略。

5、如果没有记录,slave就会执行该GTID事务,并记录该GTID到自身的binlog, 在读取执行事务前会先检查其他session持有该GTID,确保不被重复执行。

6、在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。



五、配置GTID

对于GTID的配置,主要修改/etc/my.cnf配置文件中与GTID特性相关的几个重要参数(建议使用mysql-5.6.5以上版本),如下:

1、主:

[mysqld]

server_id=1

gtid_mode=on #开启gtid模式

enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持

log_bin=master-binlog

log-slave-updates=1

binlog_format=row #强烈建议,其他格式可能造成数据不一致

skip_slave_start=1


2、从:

[mysqld]

server_id=1

gtid_mode=on

enforce_gtid_consistency=on

log_bin=master-binlog

log-slave-updates=1

binlog_format=row

skip_slave_start=1



六、配置基于GTID的复制

1、新配置的mysql服务器

在主服务器上执行以下操作:

> grant replication slave on *.* to 'rep'@'192.168.1.%' identified by '123';


对于新配置的mysql服务器,按本文第五点描述配置参数文件后,在slave端执行以下操作

> CHANGE MASTER TO

-> MASTER_HOST='192.168.1.135',

-> MASTER_USER='rep',

-> MASTER_PASSWORD='123',

-> MASTER_PORT=3306,

-> MASTER_AUTO_POSITION = 1;

Query OK, 0 rows affected, 2 warnings (0.01 sec)


> start slave;

Query OK, 0 rows affected (0.01 sec)


> show slave status \G; #查看是否正常同步




2、已运行经典复制mysql服务器转向GTID复制

(1)按本文第五点描述配置参数文件;

(2)所有服务器设置global.read_only参数,等待主从服务器同步完毕;

> SET @@global.read_only = ON;


(3)依次重启主从服务器;

(4)使用change master 更新主从配置;

> CHANGE MASTER TO

-> MASTER_HOST='192.168.1.135',

-> MASTER_USER='rep',

-> MASTER_PASSWORD='123',

-> MASTER_PORT=3306,

-> MASTER_AUTO_POSITION = 1;

Query OK, 0 rows affected, 2 warnings (0.01 sec)


> start slave;

Query OK, 0 rows affected (0.01 sec)


> show slave status \G;





服务器 服务 事务 配置 主从 一致 全局 参数 数据 一致性 传统 文件 原始 不用 序列 建议 特性 端的 同步 强制 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 星际2怎么设置服务器 国家网络安全宣传周宣传图片 黑暗与光明手游如何进服务器 lol垃圾服务器 软件开发考试考什么 3d交互软件开发 网络安全工程师证书报考条件 移动网络安全解释 电脑网络安全管理办事流程 计算机网络技术大专 大鱼时代网络技术出品 高速公路网络安全工作总结 我的世界金币兑换商店服务器 浦东新区专业软件开发信息推荐 东南大学轨道交通网络安全 一个游戏关闭服务器还能运营吗 华为数据库技术应知应会题库 舒悦小说软件开发 证券公司网络技术岗 贵州国税金税盘安全服务器 娄底软件开发哪家专业 常熟什么是网络技术排名靠前 中网致标网络技术有限公司 互联网大会周鸿祎科技报国 如何备份orcl数据库 sql2005数据库名 什么是软件开发服务价钱 网络安全行政处罚名单 网络上辱骂他人网络安全法 网络安全具体有什么业务
0