全局事务标识符(Global Transaction Identifier,GTID)是MySQL5.6版本开始在主从复制方面推出的重要特性,它是一个已提交事务的编号,并且是全局唯一编号,不仅是在主库上,在给定的复制设置中的所有数据库上,它都是唯一的。
GTID是由server_uuid和事务id组成,格式为GTID=server_uuid:transaction_id。其中server_uuid是数据库启动时自动生成的,存放在数据库目录下的auto.cnf文件中,transaction_id是事务提交时由系统顺序分配的序列号。
基于GTID的主从复制环境搭建
1. 环境准备
MySQL版本:5.7.25
IP:master: 192.168.94.128
slave : 192.168.94.129
2. 主从节点的主要参数配置如下:
server-id=6log_bin=onbinlog-format=rowenforce_gtid_consistency=ONgtid_mode=ON#其中server-id主从不能一样。
3. 建立复制用户
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*TO 'repl'@'%' identified by 'repl'
4. 数据同步。
分两种情况:
第一种情况是两个库都是新搭建的环境,直接在从库执行change master 语句就行。
第二种情况是主库已经跑了一段时间了,主库的binlog可能已经删除了,无法获取所有的GTID信息。这时候就需要用备份先还原备库。
当采用mysqldump备份时,采用如下命令备份,针对备份的数据在备库可以通过source命令恢复。
mysqldump -uroot -pmyroot --single-transaction--master-data=2 --all-databases --triggers--routines --events -A >master.sql
生成的文件中可以看到如下信息:
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;SET @@SESSION.SQL_LOG_BIN= 0;-- GTID state at the beginning of the backupSET @@GLOBAL.GTID_PURGED='7e6667ab-903a-11ea-ae4a-000c29d7c488:1-16';
其中SET @@SESSION.SQL_LOG_BIN= 0表示临时关闭binlog的写入,是否生成binlog意味着在导入数据的时候会不会生成新的Gtid事务,从库导入时不需要在生成Gtid,所以需要关闭binlog。
GTID_PURGED代表备份时刻主库已经执行过的Gtid事务合集,在从库SET @@GLOBAL.GTID_P