MySQL在做主从复制时如何使用GTID
admin
2023-05-16 12:02:09
0

 本文主要给大家介绍MySQL在做主从复制时如何使用GTID,希望可以给大家补充和更新些知识,如有其它问题需要了解的可以持续在行业资讯里面关注我的更新文章的。

 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,那么在在事务中就不能创建和删除临时表,这一点需要注意,如创建临时表:

MySQL在做主从复制时如何使用GTID

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小时售前售后,随时帮您解答问题的。

相关内容

热门资讯

以“第一”之名赴强军之约(强军... 运—20A飞机在飞行中释放干扰弹。刘 川摄火箭军某部官兵正在集结登车。刘志词摄武警安徽总队合肥支队官...
金融时报:特朗普改口,伊朗已在... 当地时间8月2日,英国《金融时报》发文《伊朗在对特朗普政府的战争中占据主动权》。文章分析,经过半年的...
男孩在街边配电箱边玩耍时触电昏... 8月1日,河南三门峡灵宝市,有网友发视频称,一个男孩在桃林街上的一个配电箱旁触电晕倒,视频显示,急救...
遥控板按开关电视机啪的一声电视... 遥控板按开关电视机啪的一声电视没有电源了正常情况下遥控板按开关不会引起电视没有电源的问题,出现此类问...
按下启动键脱水嗡嗡响 1、脱水时转速高。2、衣物放置不平整。3、洗衣机放置的位置有问题。4、洗衣机内有异物存在。5、排水阀...
热水器复位键按下弹起 热水器复位键按下弹起:可能是热水器遥控器无法使用,或是遥控器电量耗尽,可以更换电池再使用;热水器频繁...
热水器开关是一直开着还是不用就... 不用就关,要是常年一直二十四小时开着,极易造成超负荷运行,热水器本身的使用时间就不久,要是二十四小时...
冰柜有个加热灯是开还是关 不需要关注具体的开关状态,因为冰箱在实际工作的过程当中,内部都会安装相应的自动感温装置,根据用户的设...
日本最新民调公布:76%民众支... 日本《琉球新报》2日报道,日本舆论调查协会8月1日公布的一项最新民意调查结果显示,76%的日本民众认...
疯狂降智的谷歌,彻底沦为“美国... 如果要问,现在谁家的AI能力最强?ChatGPT、Claude、DeepSeek各有千秋,吵上三天三...