一、祖传的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点了不想多说了。

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

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

mysql-5.7 调整mysql的复制方式由master_log_file+master_log_pos 到gtid 详解的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. Ubuntu 16.04 LTS安装好之后需要做的15件事

    看到这篇文章说明你已经从老版本升级到 Ubuntu 16.04 或进行了全新安装,在安装好 Ubuntu 16.04 LTS 之后建议大家先做如下 15 件事.无论你是刚加入 Ubuntu 行列的新用 ...

  2. 为什么要使用href=”javascript:void(0);”?

    JavaScript中语句最后的分号是可以缺省的,那为何要使用javascript:;而不是javascript:呢? 是习惯还是规范,我疑惑了! 具有代码洁癖的coder们,没事多写一个分号,圣洁的 ...

  3. Office EXCEL 不用VB,你也可以制作自己的Excel菜单!

    还记得这个讨厌的VB吗?为了做一个COM插件,生成一个DLL,麻烦一大堆.其实我们想要的仅仅是把自己写的宏封装一下,更好的调用而已. 打开工具,自定义,在命令菜单中选择新菜单,然后拖放右侧的新菜单到顶 ...

  4. JSP基本的语法、3个编译指令、7个动作指令、9个内置对象

    一.jsp概述 JSP是java server page的缩写,其本质是一个简化的servlet,是一种动态网页技术标准.jsp页面是在HTML页面中嵌入java程序段.使用jsp开发的应用程序能够跨 ...

  5. Java从零开始学十二(构造方法)

    一.构造方法 构造方法的主要目的是为类中的属性初始化 二.构造方法的定义格式 class 类名称{ 访问权限 类名称(类型1 参数1,类型2 参数2,…){ 程序语句 ; …    // 构造方法没有 ...

  6. Java从零开始学十(Arrays类对数组的常用方法)

    一.Arrays类常用方法 二.简单例子 package com.pb.demo1; import java.util.Arrays; /* * Arrays工具类的中的几个常用方法 * 1.copy ...

  7. 浏览器 UA 判断

    export const inBrowser = typeof window !== 'undefined' export const inWeex = typeof WXEnvironment != ...

  8. OpenERP 在context中写自己的部门ID

    使用OpenERP自定义模块开发的时候,你会发现,有一个uid(当前登录用户id)特别好用,不管是在xml的domain 条件表达式中,还是在类中,都能很方便的使用uid.有一段时间就一直在琢磨,这个 ...

  9. 好记性不如烂笔头77-多线程-Thread子类的线程对象是不同的

    Thread子类的线程对象是不同的. 比方: EasySelfThread thread = new EasySelfThread(); //同一个线程对象 Thread t1 = new Threa ...

  10. maven 创建web项目的标准目录结构

      maven 创建web项目的标准目录结构 CreateTime--2018年4月18日21:05:37 Author:Marydon 1.标准目录介绍(开发目录) 2.在eclipse下,目录展示 ...