MySQL5.7以后都基本用GTID方式复制了,相对于binlog和position号方式,在failover时候减少很多人工切换操作

GTID,global transaction identitifiers,基于全局事务的复制方式,由server_uuid:transaction_id组成,server_uuid在数据库启动过程生成,在/data/auto.cnf中

复制过程:master事务提交时GTID,记录到binlog;然后master的binlog传送到slave的relaylog,slave读取GTID生成gtid_next系统参数;slave校验GTID是否在binlog并进一步应用事务(5.7后是存放在gtid_executed系统表,这样不用开启log_slave_updates参数,从而不用把relaylog记录再记录到binlog,减少slave压力)

下面操作下:

首先主从都配置gtid_mode、enforce_gtid_consistency参数,其中备库多加个log_slave_updates=1

  1. [root@localhost /usr/local/mysql/data]$ cat /etc/my.cnf
  2. [mysqld]
  3. datadir=/usr/local/mysql/data
  4. log_bin=mysql-bin
  5. server_id=1
  6. gtid_mode=on
  7. enforce_gtid_consistency=on
  8. [root@localhost /usr/local/mysql/data]$
  1. mysql> show variables like '%gtid%';
  2. +----------------------------------+-----------+
  3. | Variable_name | Value |
  4. +----------------------------------+-----------+
  5. | binlog_gtid_simple_recovery | ON |
  6. | enforce_gtid_consistency | ON |
  7. | gtid_executed_compression_period | 1000 |
  8. | gtid_mode | ON |
  9. | gtid_next | AUTOMATIC |
  10. | gtid_owned | |
  11. | gtid_purged | |
  12. | session_track_gtids | OFF |
  13. +----------------------------------+-----------+
  14. 8 rows in set (0.00 sec)
  15.  
  16. mysql>

然后将之前异步复制的配置去掉,重新配置slave中主库信息即可

  1. mysql> show variables like '%log_slave_updates%';
  2. +-------------------+-------+
  3. | Variable_name | Value |
  4. +-------------------+-------+
  5. | log_slave_updates | ON |
  6. +-------------------+-------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> stop slave;
  10. Query OK, 0 rows affected (0.01 sec)
  11.  
  12. mysql> reset slave all;
  13. Query OK, 0 rows affected (0.02 sec)
  14.  
  15. mysql> change master to
  16. -> master_host='192.0.1.10',
  17. -> master_user='scott',
  18. -> master_password='tiger',
  19. -> master_port=3306,
  20. -> master_auto_position=1;
  21. Query OK, 0 rows affected, 2 warnings (0.02 sec)
  22.  
  23. mysql> start slave;
  24. Query OK, 0 rows affected (0.00 sec)
  25. mysql> show slave status\G
  26. *************************** 1. row ***************************
  27. Slave_IO_State: Waiting for master to send event
  28. Master_Host: 192.0.1.10
  29. Master_User: scott
  30. Master_Port: 3306
  31. Connect_Retry: 60
  32. Master_Log_File: mysql-bin.000004
  33. Read_Master_Log_Pos: 573
  34. Relay_Log_File: localhost-relay-bin.000002
  35. Relay_Log_Pos: 786
  36. Relay_Master_Log_File: mysql-bin.000004
  37. Slave_IO_Running: Yes
  38. Slave_SQL_Running: Yes
  39. Replicate_Do_DB:
  40. Replicate_Ignore_DB:
  41. Replicate_Do_Table:
  42. Replicate_Ignore_Table:
  43. Replicate_Wild_Do_Table:
  44. Replicate_Wild_Ignore_Table:
  45. Last_Errno: 0
  46. Last_Error:
  47. Skip_Counter: 0
  48. Exec_Master_Log_Pos: 573
  49. Relay_Log_Space: 997
  50. Until_Condition: None
  51. Until_Log_File:
  52. Until_Log_Pos: 0
  53. Master_SSL_Allowed: No
  54. Master_SSL_CA_File:
  55. Master_SSL_CA_Path:
  56. Master_SSL_Cert:
  57. Master_SSL_Cipher:
  58. Master_SSL_Key:
  59. Seconds_Behind_Master: 0
  60. Master_SSL_Verify_Server_Cert: No
  61. Last_IO_Errno: 0
  62. Last_IO_Error:
  63. Last_SQL_Errno: 0
  64. Last_SQL_Error:
  65. Replicate_Ignore_Server_Ids:
  66. Master_Server_Id: 1
  67. Master_UUID: 531fa6d1-627f-11e9-8dc7-000c297887a1
  68. Master_Info_File: /data/master.info
  69. SQL_Delay: 0
  70. SQL_Remaining_Delay: NULL
  71. Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
  72. Master_Retry_Count: 86400
  73. Master_Bind:
  74. Last_IO_Error_Timestamp:
  75. Last_SQL_Error_Timestamp:
  76. Master_SSL_Crl:
  77. Master_SSL_Crlpath:
  78. Retrieved_Gtid_Set: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2
  79. Executed_Gtid_Set: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2
  80. Auto_Position: 1
  81. Replicate_Rewrite_DB:
  82. Channel_Name:
  83. Master_TLS_Version:
  84. 1 row in set (0.00 sec)
  85.  
  86. mysql>

测试一下,ok的,主库状态可以看到

  1. mysql> show master status;
  2. +------------------+----------+--------------+------------------+------------------------------------------+
  3. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  4. +------------------+----------+--------------+------------------+------------------------------------------+
  5. | mysql-bin.000004 | 573 | | | 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2 |
  6. +------------------+----------+--------------+------------------+------------------------------------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql>

将slave中log_slave_updates关掉,就能看到mysql.gtid_executed表中记录已执行gtid信息了

  1. mysql> select * from mysql.gtid_executed;
  2. +--------------------------------------+----------------+--------------+
  3. | source_uuid | interval_start | interval_end |
  4. +--------------------------------------+----------------+--------------+
  5. | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 1 | 2 |
  6. | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 3 | 3 |
  7. +--------------------------------------+----------------+--------------+
  8. 2 rows in set (0.00 sec)

由于是基于事务的,所以就有了限制条件:

create table select的方式在基于行复制的情况下会被拆分为创建表和insert数据两个事件,某些情况下这两个事件会被分配相同GTID导致后面insert数据部分被忽略而产生错误;

一个事务中既包含InnoDB表又包含MyISAM表会导致可能产生多个gtid,或者表在主从库中存储引擎不一致都会产生gtid复制异常

MYSQL GTID 复制的更多相关文章

  1. MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结

    GTID复制典型的复制错误有两种:1,数据对象级别的错误,包括主库上update的数据在从库上不存在,主从逐渐冲突,库表索引等对象的冲突等等,   如果是纯粹的跳过错误的话,这一类的错误需要跳过思路是 ...

  2. MySQL GTID复制

    什么是GTID 什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID是事 ...

  3. MySQL GTID复制错误处理之跳过错误

    某Slave报错信息: mysql> show slave status\G; mysql> show slave status\G; ************************** ...

  4. 【3.2】【mysql基本实验】mysql GTID复制(基于空数据的配置)

    概述:本质上和传统异步复制没什么区别,就是加了GTID参数. 且可以用传统的方式来配置主从,也可以用GTID的方式来自动配置主从. 这里使用GTID的方式来自动适配主从. 需要mysql5.6.5以上 ...

  5. (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)

    一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...

  6. 与MySQL传统复制相比,GTID有哪些独特的复制姿势?

    与MySQL传统复制相比,GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军,苏宁云商IT总部资深技术经理,从事数 ...

  7. mysql之 MySQL 主从基于 GTID 复制原理概述

    一. 什么是GTID ( Global transaction identifiers ):MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid ...

  8. mysql之 mysql 5.6不停机主从搭建(一主一从基于GTID复制)

    环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火 ...

  9. MySQL的GTID复制与传统复制的相互转换

    主库:192.168.225.128:3307从库1:192.168.225.129:3307 Gtid作为5.6版本以来的杀手级特性,却因为不支持拓扑结构内开关而饱受诟病.如果你需要从未开启GTID ...

随机推荐

  1. 【Spring Data JPA篇】JPA的底层原理(二)

    一.接口继承结构 二.底层原理

  2. 刘长峰 js基础讲座笔记 课后作业

    1.DataType Assert 数据类型断言 一.typeof : 判断变量的类型 ,返回字符串 typeof a   返回 'undefined' .'boolean' .'string' .' ...

  3. django -- admin里的配置

    前戏 Django给我们提供了一个后台管理系统,方便我们进行数据表的管理 创建超级用户 python manage.py createsuperuser 配置 默认我们登录到后台不显示任何一张表,如果 ...

  4. 复杂模拟 | 1095 模拟N个学生有K个志愿填M个学校

    妈的智障 #include <stdio.h> #include <memory.h> #include <math.h> #include <string& ...

  5. 屏蔽flash地区识别

    host文件添加以下0.0.0.0 geo2.adobe.com

  6. 获取oracle中某张表的各个字段名称

    select column_name from all_tab_columns where table_name='AT2_SSIS_CHNDB_CLIENT_INFO'

  7. Spring mvc 前后台通过json交互【转】

    原文转自:https://www.cnblogs.com/zhaojiankai/p/8184596.html 本节内容: @RequestBody @ResponseBody 请求json,响应js ...

  8. bootstarp treeview 获取勾选和获取Selected选中

    在用treeview的时候,经常会遇到一些官网没有详细说明的东西,比如获取勾选和获取选中的方法,获取选中官网是有明显说明的, 如下 : $('#resourceTree').treeview('get ...

  9. 2019年上-C语言程序设计课程内容

    第一节课 序言 为何学习C语言 打印hello world程序 编译步骤,认识编译器 冯诺依曼体系结构 hello world程序如何在计算机上运行的 第二节课 基本数据类型与表达式 求华氏温度对应的 ...

  10. C#调用WPS将文档转换成pdf进行预览

    引用:https://www.jianshu.com/p/445996126c75 vs启动项目可以生成wps实例 本地iis部署的站点却不行 原因是vs是管理员权限,而iis没有权限 解决方法 启动 ...