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.

Read_Master_Log_Pos:

Relay_Log_File: 74cstudio-relay-bin.

Relay_Log_Pos:

Relay_Master_Log_File: mysql-bin.

Exec_Master_Log_Pos:

如果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: Waiting for master to send event

Master_Host: 172.16.192.10

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000005

Read_Master_Log_Pos: 190

Relay_Log_File: 74cstudio-relay-bin.000003

Relay_Log_Pos: 355

Relay_Master_Log_File: mysql-bin.000005

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

1、设置master 和 slave 为只读:

master:

Type 'help;' or '\h' for help. Type '\c' to clear the current input 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 = #

gtid_mode =on # off

enforce_gtid_consistency =on # off

read_only = # off

slave

[mysqld]

gtid_executed_compression_period = #

gtid_mode =on # off

enforce_gtid_consistency =on # off

read_only = # 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=,

-> master_user='repl',

-> master_password='repl@352',

-> master_auto_position=;

Query OK, rows affected, warnings (0.00 sec)

mysql> start slave;

Query OK, rows affected (0.00 sec)

6、把master 和 slave 设置为可写

master

mysql> set @@global.read_only=0;

Query OK, 0 rows affected (0.00 sec)

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.00 sec)

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: Waiting for master to send event

Master_Host: 172.16.192.10

Master_User: repl

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000006

Read_Master_Log_Pos: 509

Relay_Log_File: 74cstudio-relay-bin.000005

Relay_Log_Pos: 714

Relay_Master_Log_File: mysql-bin.000006

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Auto_Position: 1

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

master上看执行哪些事务

mysql> show master status \G

*************************** 1. row ***************************

File: mysql-bin.000006

Position: 509

Binlog_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.000006

Position: 509

Binlog_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点了不想多说了。

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

2c2535d2d402fddd7c565d0ced3ce28d.png

84dc3a564efea1e9ead548d08469ed4b.png

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

MySQL: Connection Refused,调整 mysql.ini中的 max_connections

连接相同的结构的MySQL数据库,一套库Tomcat启动正常,另一套库一直报Connection Refused. 可以断定是连接数太小了.查找mysql.ini中的 max_connections, ...

MySQL基础篇(03):系统和自定义函数总结,触发器使用详解

本文源码:GitHub·点这里 || GitEE·点这里 一.系统封装函数 MySQL 有很多内置的函数,可以快速解决开发中的一些业务需求,大概包括流程控制函数,数值型函数.字符串型函数.日期时间函数 ...

PowerDesigner15在win7-64位系统下对MySQL 进行反向工程以及建立物理模型产生SQL语句步骤图文傻瓜式详解

1.安装PowerDesigner15.MySQL5.不详细讲解了.网上一大把.请各位亲参考去. 2.安MyODBC-standard-3.51.0.7-win.msi.mysql-connector ...

全网最详细的CentOS7里安装MySQL时出现No package mysql-server available错误的解决办法(图文详解)

不多说,直接上干货! 直接yum install mysql的话会报错,原因在于yum安装库里没有直接可以用的安装包,此时需要用到MariaDB了,MariaDB是MySQL社区开发的分支,也是一个增 ...

(转)Mysql数据库之Binlog日志使用总结Linux下用户组、文件权限详解

Linux下用户组.文件权限详解 原文:http://blog.csdn.net/sdulibh/article/details/51566772 用户组 在linux中的每个用户必须属于一个组,不能 ...

MySQL数据库锁机制之MyISAM引擎表锁和InnoDB行锁详解

转 http://blog.csdn.net/hsd2012/article/details/51112009 转 http://blog.csdn.net/e421083458/article/de ...

(转)使用Spring注解方式管理事务与传播行为详解

http://blog.csdn.net/yerenyuan_pku/article/details/52885041 使用Spring注解方式管理事务 前面讲解了怎么使用@Transactional ...

跨浏览器复制神器 ZeroClipboard 2.x快速入门详解

有些时候,我们希望让用户在网页上完成某个操作就能自动将指定的内容复制到用户计算机的剪贴板中.但是出于安全原因,大多数现代浏览器都未提供通用的剪贴板复制接口(或即便有,也默认被禁用).只有IE浏览器可以 ...

复制档案或目录 linux cp命令详解

cp (复制档案或目录) [root@linux ~]# cp [-adfilprsu] 来源档(source) 目的檔(destination)[root@linux ~]# cp [options ...

随机推荐

Gollum 安装笔记

环境Ubuntu server 14.04 sudo apt-get install ruby1.9.1 ruby1.9.1-dev make zlib1g-dev libicu-dev build- ...

java : 包装类 缓冲机制的使用(转载)

摘要: 八种基本数据类型和其包装类中 Integer valueOf(int i).Byte valueOf(byte b).Short valueOf(short s).Long valueOf(l ...

main()函数的完整形式

初学C语言都觉得main作为整个程序的入口函数是不需要传递参数的,但事实上,我们完全可以给main()传入参数进而控制整个程序的执行,就像我们使用DOS命令传入的参数一样,这里面argc表示传入的参数 ...

简单实体Json序列化(输出JSON的属性可变)

简单实体Json序列化(输出JSON的属性可变) 一.先看效果 可以看出 , 我们在序列化一个对像时, 只给出了 我们想要 输出的两个字段名,  实际实体有5个属性, 经过可变属性序列化后的JSON ...

android滑动基础篇 TouchView

效果图: 代码部分: activity类代码: package com.TouchView; import android.app.Activity; import android.os.Bundle ...

SRM-供应商关系管理-组织模式

https://wiki.scn.sap.com/wiki/display/SRM/PPOMA_BBP 供应商关系管理 ... 组织模式 PPOMA_BBP     跳到元数据结束   由Ivy Li ...

Wookmark-jQuery-master 瀑布流插件使用介绍,含个人测试DEMO

要求 必备知识 本文要求基本了解 Html/CSS,  JavaScript/JQuery. 开发环境 Dreamweaver CS6 / Chrome浏览器 演示地址 演示地址 资料下载   测试预 ...

docker 查看容器的网络连接

#! /bin/bash echo $1 PID=$(docker inspect -f '{{.State.Pid}}' $1) nsenter -t $PID -n netstat |grep E ...

np.random.random()函数 参数用法以及numpy.random系列函数大全

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.r ...

springboot+websocket+sockjs进行消息推送【基于STOMP协议】

springboot+websocket+sockjs进行消息推送[基于STOMP协议] WebSocket是在HTML5基础上单个TCP连接上进行全双工通讯的协议,只要浏览器和服务器进行一次握手,就 ...

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值