千家信息网

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

发表于:2024-11-28 作者:千家信息网编辑
千家信息网最后更新 2024年11月28日,GTID是一个基于原始mysql服务器生成的一个已经被成功执行的全局事务ID,它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器器上唯一,在所有存在主从关系 的mysql服务器上也
千家信息网最后更新 2024年11月28日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安全错误 数据库的锁怎样保障安全 网络安全运维怎么涨工资 mc服务器自定义参数 桓台财务办公软件开发咨询 食用菌数据库 复仇者联盟服务器数量 画出网络安全通用模型简要说明 新零售网络安全类的心得体会 软件开发公司中文模板网站 网络技术书籍pdf 深圳响当当网络技术有限公司 利箭在行动的服务器在哪里 长沙数据库管理员薪资 微表情和肢体语言数据库 小学开展国家网络安全宣传活动 杭州裹媒网络技术有限公司 万州区一站式软件开发流程代理商 如何录入条码数据库 东营包装软件开发公司 达梦数据库怎么添加 网络安全的五大要素可用性 数据库在哪修改后台密码 什么软件可以抓取数据库 育企秀互联网科技公司 网络安全教育的内涵必要性 高中信息技术关系型数据库 财务软件数据库锁死了怎么办 聊天软件开发开题报告 四川省信用社软件开发 广州什么学校学软件开发 薪资数据库
0