设为首页 收藏本站
查看: 628|回复: 0

[经验分享] MySQL的GTID复制

[复制链接]
发表于 2018-9-29 07:18:43 | 显示全部楼层 |阅读模式
  MySQL在5.6后多了一个新的功能就是在做主从复制时使用GTID,和传统的使用relaylog中指定log_pos+log_file的主从复制相比,在使用GTID做主从复制时可以不指定slave需求读取master中的哪一个binlog和偏移量。在传统的MySQL主从复制中,一旦指定错误master的偏移量后,那么就会造成主从不一致,而在基于GTID做的主从复制中就不会发生这样的问题。GTID实际上是master提交了一次事务后而产生的ID,所以在配置的过程中一般都会开启enforce_gtid_consistency(强制事务一致)的配置参数以确保GTID的安全,但是需要注意的是如果开启了开启enforce_gtid_consistency,那么在在事务中就不能创建和删除临时表,这一点需要注意,如创建临时表:
create temporary table  
建议改成
  
create table
  除此外还会开启log_slave_updates,这个变量在master和slave中都会开启,除此之外毋庸置疑的是一定需要开启binlog,至于其它大体和log_pos+log_file的主从复制类似,在此就说以一下不一样的地方,至于其它的以前有说过log_pos+log_file的主从复制需要的可以参看:http://jim123.blog.51cto.com/4763600/1862808,在master和slave中开启GTID的相关变量,当然如果是允许重启的话先配置好二者my.cnf是更好的,其中二者的my.cnf的[mysqld]下都需要添加的是:
log_slave_updates = on  
gtid_mode = on
  
enforce_gtid_consistency = on
  
在slave下建议开启只读:
  
read_only = on
  
relay_log_info_repository=TABLE
  
#把主从的信息记录在表中,缺省是和旧版本中一样是写在文件中
  

  
master_info_repository=TABLE
  
#这一条写在master上
  其处,在配置的过程中最好把master的写入关闭,开启只读:
mysql> set global read_only = ON;  
Query OK, 0 rows affected (0.00 sec)
  在开启相应的变量参数后,在slave上做GTID的主从复制时使用master_auto_position会根据GTID找到log_pos+log_file,相比传统的方式更为的方便
mysql> stop slave;  
Query OK, 0 rows affected (0.08 sec)
  

  
mysql> change master to master_auto_position=0;
  
Query OK, 0 rows affected (0.01 sec)
  

  
mysql> change master to master_host='192.168.168.253',master_user='test_backup',master_password='test_backup',master_auto_position = 1;
  
Query OK, 0 rows affected, 2 warnings (0.01 sec)
  

  
mysql> start slave;
  
Query OK, 0 rows affected (0.01 sec)
  在开启后可以查看GTID参数变量:
mysql> show global variables like '%GTID%';  当然为了服务高可用,在使用GTID时MySQL也会开启log_pos+log_file,只是我们就不需要想以前那样手动指向log_pos+log_file,因此使用GTID的方式做主从复制修复时还和以前不一样:
mysql> stop slave;  
Query OK, 0 rows affected (0.08 sec)
  

  
mysql> change master to master_auto_position=0;
  
Query OK, 0 rows affected (0.01 sec)
  

  
mysql> change master to master_host='192.168.168.253',master_user='test_backup',master_password='test_backup',master_log_file='mysql-bin.000014',master_log_pos=405051906;
  
Query OK, 0 rows affected, 2 warnings (0.01 sec)
  

  
mysql> start slave;
  
Query OK, 0 rows affected (0.01 sec)
  当然这个是基于GTID和binlog结合的恢复方式,在选择主从复制的方式只要选择其中一中恢复即可,如果只是业务不繁忙的情况下仅有少量的或没有事务时也可以尝试着使用跳过事务的方式来解决错误:
mysql> STOP SLAVE;  
Query OK, 0 rows affected (0.01 sec)
  
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
  
Query OK, 0 rows affected (0.01 sec)
  
mysql> START SLAVE;
  
Query OK, 0 rows affected (0.01 sec)
  此外需要注意的是在使用MySQL的GTID时是不支持GTID直接动态关闭,如果需要关闭则需要使用GTID的4种状态:
ON:开启  
OFF:关闭
  
OFF_PERMISSIVE:关闭准备
  
ON_PERMISSIVE:开启准备
  正常的开启和关闭流程是:OFF  OFF_PERMISSIVE  ON_PERMISSIVE  ON,即
SET GLOBAL gtid_mode = 'OFF_PERMISSIVE';  
SET GLOBAL gtid_mode = 'ON_PERMISSIVE';
  
SET GLOBAL enforce_gtid_consistency = ON;#在开启准备的过程中开启
  
SET GLOBAL gtid_mode = 'ON';
  最后,需要注意的是在开启GTID复制时多个线程仅会使用一个事务,实际如果开启多线程复制时还是多线程复制,只是在查看线程列表时显示的是只有一个。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-603472-1-1.html 上篇帖子: mysql日志详细解析 下篇帖子: mysql 主从故障恢复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表