本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • MySQL
  • MySQL主从复制(6)基于GTID的主从复制配置与故障恢复教程

MySQL主从复制(6)基于GTID的主从复制配置与故障恢复教程

发布:TangLu2018-11-23 18:23分类: MySQL 标签: mysql gtid

MySQL在5.6版本开始支持GTID(全局事务标识),阿里云的RDS就是使用的GTID方式,每个MySQL上都有一个唯一的UUID,然后每个事务也会生成一个ID,GTID则由UUID和事务ID结合组成,每当数据发生变化时,GTID末位的数字会自增。相比使用binlog实现主从复制,GTID配置更方便,从库切换为主库时也更方便。

使用GTID后从库的复制过程:从库通过IO进程把主库binlog传输到本地relaylog,然后查看relaylog中的GTID是否已经存在,已经存在则不执行。下面是基于GTID的主从复制配置过程:

一、在主库与从库的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  #从库开启

使用GTID时不用再去关注binlog的position信息了,而这些信息会被保存在datadir下的master.info文件

查看数据库唯一UUID的方式(主从的ID是不一样的)

1、查看数据存放目录中的auto.cnf文件

2、登录MySQL客户端执行show global variables like 'server_uuid' 命令


二、主库进行授权操作


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


三、从库执行复制,不用再指定binlog的position了

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


四、验证数据


在主库执行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主从复制(6)基于GTID的主从复制配置与故障恢复教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-452.html  [生成短网址]

已有 0/991 人参与

发表评论:

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

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