mysql file-pos_mysql-5.7 调整mysql的复制方式由master_log_file+master_log_pos 到gtid 详解

一、祖传的master_log_file + master_log_pos的复制方式面临的问题:

在很久以前 那个时候我还没有出道,mysql就已经就有复制这个功能了。如果要告诉slave库从master二进制日志的哪个

地方开始复制,就要通过change master to 的master_log_file & master_log_pos 参数来指定。但是这个有个问题,就

是在slave出现问题后,slave要从那个地方开始重新同步呢?这个时候就比较小心了,因为show slave status 中对于文件

名和位置的返回有三组。

Master_Log_File: mysql-bin.000052Read_Master_Log_Pos:190Relay_Log_File: 74cstudio-relay-bin.0000031Relay_Log_Pos:355Relay_Master_Log_File: mysql-bin.000050Exec_Master_Log_Pos:77

如果dba在重新同步时指定的master_log_file + master_log_pos 参数不对,那么就会引起数据的不一致,而且这个不一致还

不太好发现。

二、gtid出现了:

1、有了gtid了之后对于重新同步时slave从哪里开始同步master的binlog不在由dba来管了,省心了!

2、有了gtid了之后只要对比一下master和slave上的gtid数据量就可以知道master和slave是否一致了!

三、gtid这么吊 怎么建立一个基于gtid的复制呢?:

根据官方文档要把复制方式从master_log_file + master_log_pos 换到基于gtid的复制,要经过如下几步:

1、把master和slave都设置为read_only 这样做是为了slave能同步所有master上的已有更新,同步完成之后

slave的数据量就是等于master的数据量了。

2、关闭master 和 slave

3、开启master 和 slave 上的gtid功能 、开启read_only 功能。这都通过my.cnf文件配置下就行啦。

4、启动master 和 slave

5、让slave 以gtid的方式同步

6、设置master 和 slave 可写

四、举例:

还是先看一下已有master -> slave 环境的相关信息:

mysql>show slave status \G*************************** 1. row ***************************Slave_IO_State: Waitingfor master tosend event

Master_Host:172.16.192.10Master_User: repl

Master_Port:3306Connect_Retry:60Master_Log_File: mysql-bin.000005Read_Master_Log_Pos:190Relay_Log_File: 74cstudio-relay-bin.000003Relay_Log_Pos:355Relay_Master_Log_File: mysql-bin.000005Slave_IO_Running: Yes

Slave_SQL_Running: Yes

1、设置master 和 slave 为只读:

master:

Type 'help;' or '\h' for help. Type '\c' to clear the currentinput statement.

mysql> set @@global.read_only=1;

Query OK,0 rows affected (0.00 sec)

slave:

mysql> set @@global.read_only=1;

Query OK,0 rows affected (0.00 sec)

2、等slave完全同步了所有的master的更新后就关闭master 和 slave:

master:

[root@74cstudio mysql]# mysqladmin -uroot shutdown

slave:

[root@74cstudio mysql]# mysqladmin -uroot shutdown

3、开启master 和 slave 上的gtid功能并把它们设置成read_only

master

[mysqld]

gtid_executed_compression_period=1000 # 1000gtid_mode=on # off

enforce_gtid_consistency=on # off

read_only=1 # off

slave

[mysqld]

gtid_executed_compression_period=1000 # 1000gtid_mode=on # off

enforce_gtid_consistency=on # off

read_only=1 # off

4、启动master 和 slave

master

[root@cstudio mysql]# systemctl start mysql

slave

[root@cstudio mysql]# systemctl start mysql

5、让slave 以gtid的方式同步

slave

mysql>change master to-> master_host='172.16.192.10',-> master_port=3306,-> master_user='repl',-> master_password='repl@352',-> master_auto_position=1;

Query OK,0 rows affected, 2 warnings (0.00sec)

mysql>start slave;

Query OK,0 rows affected (0.00 sec)

6、把master 和 slave 设置为可写

master

mysql> set @@global.read_only=0;

Query OK,0 rows affected (0.00sec)

mysql> show global variables like 'read_only';+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only | OFF |

+---------------+-------+

slave

mysql> set @@global.read_only=0;

Query OK,0 rows affected (0.00sec)

mysql> show global variables like 'read_only';+---------------+-------+

| Variable_name | Value |

+---------------+-------+

| read_only | OFF |

+---------------+-------+

7、还是show slave status 看一下slave 同步的状态作为结束

mysql>show slave status \G*************************** 1. row ***************************Slave_IO_State: Waitingfor master tosend event

Master_Host:172.16.192.10Master_User: repl

Master_Port:3306Connect_Retry:60Master_Log_File: mysql-bin.000006Read_Master_Log_Pos:509Relay_Log_File: 74cstudio-relay-bin.000005Relay_Log_Pos:714Relay_Master_Log_File: mysql-bin.000006Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Auto_Position:1

五、用gtid同步时可以方便的校对数据的一致性:

master上看执行哪些事务

mysql>show master status \G*************************** 1. row ***************************

File: mysql-bin.000006Position:509Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set: 49d1e2c1-a8bc-11e7-8f4e-000c296c32b0:1-10

1 row in set (0.00 sec)

slave上看执行了哪些事务

mysql>show master status \G*************************** 1. row ***************************

File: mysql-bin.000006Position:509Binlog_Do_DB:

Binlog_Ignore_DB:

Executed_Gtid_Set: 49d1e2c1-a8bc-11e7-8f4e-000c296c32b0:1-10

1 row in set (0.00 sec)

由上面可以看出两次执行show master status \G 的输出中Executed_Gtid_Set的值是一样的,说明master上的每一个事务都

有在slave 上执行,所以可以得出master 和 slave是一致的结论。

六、在执行master_log_file + master_log_pos 到 gtid 同步方式的变更时的注意项:

1、在四.2中那个关闭master 和 slave 的时候一定要确定slave 已经应用了master 的所以变更。

2、在四.4中最好先把slave设置成skip-slave-start=1 , 不然会发现在执行change master to 的时候会报slave 已经启动了

当然这个报错可能通过先执行stop slave  然后再执行change master to 来规避。

七、最后还是说一下什么是gtid:

gtid 这个哥们的中文全称叫 “全局事务ID”,说白了就是事务的“身份证号码”. 快10点了不想多说了。

----------------------------------------------------------------------

0a3e331fb138a6303b570ec802d5ee7b.png

92ac5e46bf7e258c53521cbd9e08e3bf.png

-----------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值