GTID(Global Transaction Identifiers) :全局事务标识, 是对于一个已提交事务的编号,并且是一个全局唯一的编号。 用来代替传统复制的方法,GTID复制与普通复制模式的最大不同就是不需要指定二进制文件名和位置。
本次为一次简单的测试和验证,所以仅用一主一从的架构来演示。首先准备两台装有MySQL数据库的机器(一台作为master,另一台作为slave),而且要保证两台机器的环境必须一致,同时两台机器的时间也要保持一致。
(1)两台机器均关闭防火墙及SELINUX
systemctl stop firewalld
systemctl disable firewalld
setenforce 0 --临时关闭selinux
vim /etc/sysconfig/selinux --修改配置文件永久关闭selinux(操作略...)
(2)两台机器均开启mysqld服务
systemctl start mysqld
systemctl enable mysqld
在master端操作
(3)开启GTID及log-bin日志
vim /etc/my.cnf --在[mysqld]下添加如下内容
=========================================================================================
server-id=1 --定义server id(在实际生产中可写为IP后四位数)
log-bin = mylog --开启binlog日志(不定义路径的话默认在/var/lib/mysql/下)
gtid_mode = ON --开启gtid
enforce_gtid_consistency=1 --强制gtid
systemctl restart mysqld
(5)master服务上创建账户
mysql> grant replication slave,reload,super on *.* to 'slave'@'%' identified by 'ZRSanqy@123';
mysql> flush privileges;
=========================================================================================
【参数】:
replication slave权限:拥有此权限可以查看从服务器,从主服务器读取二进制日志。
super权限:允许用户使用修改全局变量的SET语句以及CHANGE(属于MASTER语句)
reload权限:必须拥有reload权限,才可以执行flush [tables | logs | privileges]
【注意】:在真实生产环境中需采用高级别的密码,同时将'%'换成slave对应的IP
在slave端操作
(6)开启GTID
vim /etc/my.cnf --在[mysqld]下添加如下内容
========================================================================================
server-id=2
gtid_mode = ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
systemctl restart mysqld
(8)两台机器分别做本地解析
(9)slave端登录数据库连接master
mysql> \e
change master to
master_host='master', --主ip 地址(最好用域名)
master_user='授权用户', --主服务上面创建的用户
master_password='授权密码',
master_auto_position=1; --master起始位置
-> ;
mysql> start slave; --启动slave角色
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G --查看状态,验证sql和IO是不是yes,如果均为yes,说明主从同步完成。
(1)在主库master上创建数据
mysql> create database test; --创建数test据库
mysql> create table test.t1(id int); --在数据库test中创建t1表
mysql> insert into test.t1 values(1); --在t1表中添加记录
mysql> select * from test.t1; --查看表的信息
mysql做主从同步时,master宕机,如何进行切换?
(1)在salve执行执行:
mysql> stop slave;
mysql> reset master;
(2)查看是否只读模式:
mysql> show variables like 'read_only';
=========================================================================================
如果为只读模式,则需要修改my.cnf文件,注释read-only=1,并重启mysqld服务;
或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off。
(3)查看slave状态:
show slave status \G
(4)最后在程序中将原来主库IP地址改为现在的从库IP地址,测试应用连接是否正常。