本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL主从复制(3)使用GTID配置主从

MySQL主从复制(3)使用GTID配置主从

发布:TangLu2020-2-8 11:44分类: MySQL 标签: mysql 主从 主从复制

一、什么是GTID

MySQL在5.6版本开始支持GTID,也就是全局事务标识(阿里云的RDS就是使用的GTID方式),每个MySQL节点上都有一个唯一的UUID,每个事务也会生成一个事务ID,它们两者结合成为了GTID。每当数据发生变化时GTID末位的数字会自增,这个IT是全局唯一且具有幂等性的。相比使用binlog实现主从复制,GTID的配置更方便,从库切换为主库时也更方便。但需要注意的是GTID复制依赖于事务,所以MySQL必须配置为InnoDB引擎才可以。使用GTID部署的主从,复制过程如下:从库通过IO进程把主库binlog传输到本地relaylog,然后查看relaylog中的GTID是否已经存在,已经存在则不执行。


二、GTID主从部署

1、在主库与所有从库的my.cnf中都做以下配置

server_id = 1  #这个ID号主从依然不能一样
gtid_mode = on  #开启GTID
enforce_gtid_consistency = on  #强制GTID的一致性
log-slave-updates = 1  #MySQL 5.6版本必须开启这个,5.7已经可以不用,但建议打开
log-bin = master-bin  #从库可不开binlog
log-bin-index = master-bin.index  #同上
relay-log = relay-log  #从库开启
relay-log-index = relay-log.index
binlog_format= row
read_only = 1  #从库开启



2、主库进行授权操作

grant replication slave,replication client on *.* to 'repl'@'192.168.1.110' identified by '123456'


3、从库执行复制,不用再指定binlog的position了,这些信息会被保存在datadir下的master.info文件

change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1;
start slave;


4、查看数据库唯一UUID的两种方式(主从的ID是不一样的)查看数据存放目录中的auto.cnf文件;登录MySQL客户端执行show global variables like 'server_uuid' 命令

三、验证数据

在主库执行show binlog event in 'master-bin.000001'查看主库当前事务ID是多少(每次有SQL执行这个ID都会增加)

微信截图_20181010100241.png


在从库执行show slave status命令查看事务ID是否与主库一致

企业微信截图_20181010095354.png

由于采用了GTID的方式,所以从库也会有binlog日志,通过show master logs可以看到与主库是一致的。在从库执行show binlog event in 'master-bin.000001'命令可以查看当前所执行的事务ID位置,正常情况与主库也是一致的


四、GTID主从复制发生异常如何处理

1、当主服务器发生意外情况导致从库无法自动同步时的解决(如从库停机期间主库的二进制日志被删除,会导致从库无法找到需要的ID):

#在从库上手动指定二进制日志文件和位置
mysql > stop slave;
mysql > change master to master_host='192.168.1.100',master_user='repl',master_password='123456',master_log_file='master-bin.000005',master_log_pos=526,master_auto_position=0;
mysql > start slave;


2、如果从库忘了指定relay-log而又发生了主机名更改的情况,只需要在从库重新执行一次同步

stop slave;
reset slave;
change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1;


3、如果主库忘了指定bin-log而又发生了主机名更改的情况,从库会报错“Slave has more GTIDs than the master has,using the master's SERVER_UUID”,意思就是说自己的GTID比主库的更大了。解决方法(所有命令在从库执行):

stop slave;
reset slave;
reset master;  #从库的binlog已经无效了,所以要执行这个命令
change master to master_host='192.168.1.100',master_port=3306,master_user='repl',master_password='123456',master_auto_position=1; 


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《MySQL主从复制(3)使用GTID配置主从
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-452.html  [生成短网址]

已有 0/2276 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~