二、基于GTID的主从复制
基于 GTID 方式:全局事务标示符,自mysql5.6版本开启的新型复制方式。
GTID的组成:server_uuid:序列号
UUID:每个mysql实例的唯一ID,由于会传递到slave,所以也可以理解为源ID
序列号:在每台MySQL服务器上都是从1开始自增长的序列,一个数值对应一个事务。
1、工作过程
master 更新数据时,会在事务前产生 GTID,一同记录到 binlog (二进制日志)中
slave 端的 I/O 线程将变更的 binlog,写入到本地的relay log(中继日志)中。
sql 线程从 relay log 中获取 GTID,然后对比 slave 端的 binlog 是否有记录
如果有记录,说明该 GTID 的事务已经执行,slave 会忽略
如果没有记录,slave 就会从 relay log 中执行该 GTID 的事务,并记录到 binlog。
在解析过程中会判断是否有主键,如果有就用二级索引,如果没有就用全部扫描。
2、优势
更简单的实现 failover,不用以前那样在需要找二进制日志文件 log_file 和位置值 log_pos.
更简单的搭建主从复制
比传统的复制更加安全
GTID 是连续的没有空洞的,保证数据的一致性,零丢失。
slave 无需知道 master 的 pos 值和日志文件值,只需要知道 master 的 ip、用户名、密码即可;
3、搭建 GTID 方式的主从复制
(1)主配置
[root@node2 ~]# cat /etc/my.cnf
[mysqld]
server-id=1
# 开启GTID模式,添加此⾏
gtid_mode=ON
# 开启GTID的⼀些安全限制,添加此⾏
enforce_gtid_consistency=true
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@node2 ~]# systemctl restart mysqld ;systemctl enable mysqld
对复制用户授权
mysql> create user 'repluser'@'%' identified with mysql_native_password by "123";
Query OK, 0 rows affected (0.10 sec)
mysql> grant replication slave on *.* to 'repluser'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.10 sec)
mysql>
(2)从配置
[root@node3 ~]# cat /etc/my.cnf
[mysqld]
server-id=2
gtid_mode=ON
enforce_gtid_consistency=true
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
[root@node2 ~]# systemctl restart mysqld ;systemctl enable mysqld
从库链接主库
查看主
show master status;
mysql> CHANGE MASTER TO
MASTER_HOST = '10.1.1.6',
MASTER_USER = 'repluser',
MASTER_PASSWORD = '123',
master_auto_position=1;
Query OK, 0 rows affected, 7 warnings (0.04 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.08 sec)
mysql>show slave status\G;
验证主从
mysql> show databases;