本文主要给大家介绍MySQL在做主从复制时如何使用GTID,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在创新互联行业资讯里面关注我的更新文章的。
成都创新互联公司主营黄石港网站建设的网络公司,主营网站建设方案,重庆APP开发公司,黄石港h5重庆小程序开发搭建,黄石港网站营销推广欢迎黄石港等地区企业咨询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复制时多个线程仅会使用一个事务,实际如果开启多线程复制时还是多线程复制,只是在查看线程列表时显示的是只有一个。
看了以上关于MySQL在做主从复制时如何使用GTID,希望能给大家在实际运用中带来一定的帮助。本文由于篇幅有限,难免会有不足和需要补充的地方,如有需要更加专业的解答,可在官网联系我们的24小时售前售后,随时帮您解答问题的。
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。