MYSQL_架构之主从GTID

来源:这里教程网 时间:2026-03-01 15:01:26 作者:

GTID又叫全局事务ID(Global Transaction ID),是一个已提交事务的编号,并且是一个全局唯一的编号,Mysql 5.6版本之后在主从复制类型上新增了GTID复制。GTID是由server_uuid和事务ID组成的。即GUID=server_id:transaction_id.server_uuid是在数据库启动过程中自动生成的。每台机器的server_uuid不一样,同一环境删除重新搭建之后也不一样。 工作原理:

1.       master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。

2.       slave端的I/O线程将变更的binlog,写入到本地的relay log中。

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

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

5.       如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog. 环境配置

/

主服务器

从服务器

Ip

192.168.31.79

192.168.31.188

hostname

mysql

mysql2

mysql-version

5.7.23

5.7.23

Server-id

f99accbf-6690-11ea-a934-080027c1c1ff

a535303f-668e-11ea-8be9-080027b0e953

1.主库配置

1.1参数配置[root@mysql2 bin]# vi /etc/my.cnf添加内容如下

gtid_mode=on

enforce_gtid_consistency=on

log_bin=on

binlog_format=row

server-id=79 [root@mysql2 bin]# service mysql stop[root@mysql2 bin]# service mysql stop 1.2权限配置[root@mysql bin]# mysql -uroot -pmysql> grant replication slave on *.* to 'rep'@'192.168.31.%' identified by 'Oracle123';mysql> flush privileges; 

2.主库备份数据至从库恢复

注:如果是新搭建的环境,可以不用做迁移步骤。 

3.从库配置

2.1 从库参数配置[root@mysql2 bin]# vi /etc/my.cnf添加内容如下

gtid_mode=on

enforce_gtid_consistency=on

log_slave_updates=1

serve-id=188  2.2从库权限配置 [root@mysql2 bin]# mysql -uroot -pmysql> change master to master_host='192.168.31.79', master_user='rep',master_password='Oracle123',master_port=3306,master_auto_position=1;mysql> start slave; 

3.检查主从状态

1)主库mysql> show master status;  2)从库mysql> show slave status\G;

  4.验证1)主库mysql> create database test;2)从库mysql> show databases; 注:在mysql 5.7版本之后,gtid_executed数值会被持久化 mysql> use mysqlmysql> desc gtid_executed;mysql> select * from gtid_executed; 在执行reset master中,会清空表内的数据。  mysql> show variables like '%gtid_executed%';该参数用来控制gtid_executed表的压缩。默认值是1000.意味着表压缩在执行1000个 事务之后开始。 

相关推荐