MYSQL GTID 复制
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
- [root@localhost /usr/local/mysql/data]$ cat /etc/my.cnf
- [mysqld]
- datadir=/usr/local/mysql/data
- log_bin=mysql-bin
- server_id=1
- gtid_mode=on
- enforce_gtid_consistency=on
- [root@localhost /usr/local/mysql/data]$
- mysql> show variables like '%gtid%';
- +----------------------------------+-----------+
- | Variable_name | Value |
- +----------------------------------+-----------+
- | binlog_gtid_simple_recovery | ON |
- | enforce_gtid_consistency | ON |
- | gtid_executed_compression_period | 1000 |
- | gtid_mode | ON |
- | gtid_next | AUTOMATIC |
- | gtid_owned | |
- | gtid_purged | |
- | session_track_gtids | OFF |
- +----------------------------------+-----------+
- 8 rows in set (0.00 sec)
- mysql>
然后将之前异步复制的配置去掉,重新配置slave中主库信息即可
- mysql> show variables like '%log_slave_updates%';
- +-------------------+-------+
- | Variable_name | Value |
- +-------------------+-------+
- | log_slave_updates | ON |
- +-------------------+-------+
- 1 row in set (0.00 sec)
- mysql> stop slave;
- Query OK, 0 rows affected (0.01 sec)
- mysql> reset slave all;
- Query OK, 0 rows affected (0.02 sec)
- mysql> change master to
- -> master_host='192.0.1.10',
- -> master_user='scott',
- -> master_password='tiger',
- -> master_port=3306,
- -> master_auto_position=1;
- Query OK, 0 rows affected, 2 warnings (0.02 sec)
- mysql> start slave;
- Query OK, 0 rows affected (0.00 sec)
- mysql> show slave status\G
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.0.1.10
- Master_User: scott
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.000004
- Read_Master_Log_Pos: 573
- Relay_Log_File: localhost-relay-bin.000002
- Relay_Log_Pos: 786
- Relay_Master_Log_File: mysql-bin.000004
- Slave_IO_Running: Yes
- Slave_SQL_Running: Yes
- Replicate_Do_DB:
- Replicate_Ignore_DB:
- Replicate_Do_Table:
- Replicate_Ignore_Table:
- Replicate_Wild_Do_Table:
- Replicate_Wild_Ignore_Table:
- Last_Errno: 0
- Last_Error:
- Skip_Counter: 0
- Exec_Master_Log_Pos: 573
- Relay_Log_Space: 997
- Until_Condition: None
- Until_Log_File:
- Until_Log_Pos: 0
- Master_SSL_Allowed: No
- Master_SSL_CA_File:
- Master_SSL_CA_Path:
- Master_SSL_Cert:
- Master_SSL_Cipher:
- Master_SSL_Key:
- Seconds_Behind_Master: 0
- Master_SSL_Verify_Server_Cert: No
- Last_IO_Errno: 0
- Last_IO_Error:
- Last_SQL_Errno: 0
- Last_SQL_Error:
- Replicate_Ignore_Server_Ids:
- Master_Server_Id: 1
- Master_UUID: 531fa6d1-627f-11e9-8dc7-000c297887a1
- Master_Info_File: /data/master.info
- SQL_Delay: 0
- SQL_Remaining_Delay: NULL
- Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
- Master_Retry_Count: 86400
- Master_Bind:
- Last_IO_Error_Timestamp:
- Last_SQL_Error_Timestamp:
- Master_SSL_Crl:
- Master_SSL_Crlpath:
- Retrieved_Gtid_Set: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2
- Executed_Gtid_Set: 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2
- Auto_Position: 1
- Replicate_Rewrite_DB:
- Channel_Name:
- Master_TLS_Version:
- 1 row in set (0.00 sec)
- mysql>
测试一下,ok的,主库状态可以看到
- mysql> show master status;
- +------------------+----------+--------------+------------------+------------------------------------------+
- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
- +------------------+----------+--------------+------------------+------------------------------------------+
- | mysql-bin.000004 | 573 | | | 531fa6d1-627f-11e9-8dc7-000c297887a1:1-2 |
- +------------------+----------+--------------+------------------+------------------------------------------+
- 1 row in set (0.00 sec)
- mysql>
将slave中log_slave_updates关掉,就能看到mysql.gtid_executed表中记录已执行gtid信息了
- mysql> select * from mysql.gtid_executed;
- +--------------------------------------+----------------+--------------+
- | source_uuid | interval_start | interval_end |
- +--------------------------------------+----------------+--------------+
- | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 1 | 2 |
- | 531fa6d1-627f-11e9-8dc7-000c297887a1 | 3 | 3 |
- +--------------------------------------+----------------+--------------+
- 2 rows in set (0.00 sec)
由于是基于事务的,所以就有了限制条件:
create table select的方式在基于行复制的情况下会被拆分为创建表和insert数据两个事件,某些情况下这两个事件会被分配相同GTID导致后面insert数据部分被忽略而产生错误;
一个事务中既包含InnoDB表又包含MyISAM表会导致可能产生多个gtid,或者表在主从库中存储引擎不一致都会产生gtid复制异常
MYSQL GTID 复制的更多相关文章
- MySQL GTID复制Slave跳过错误事务Id以及复制排错问题总结
GTID复制典型的复制错误有两种:1,数据对象级别的错误,包括主库上update的数据在从库上不存在,主从逐渐冲突,库表索引等对象的冲突等等, 如果是纯粹的跳过错误的话,这一类的错误需要跳过思路是 ...
- MySQL GTID复制
什么是GTID 什么是GTID呢, 简而言之,就是全局事务ID(global transaction identifier ),最初由google实现,官方MySQL在5.6才加入该功能.GTID是事 ...
- MySQL GTID复制错误处理之跳过错误
某Slave报错信息: mysql> show slave status\G; mysql> show slave status\G; ************************** ...
- 【3.2】【mysql基本实验】mysql GTID复制(基于空数据的配置)
概述:本质上和传统异步复制没什么区别,就是加了GTID参数. 且可以用传统的方式来配置主从,也可以用GTID的方式来自动配置主从. 这里使用GTID的方式来自动适配主从. 需要mysql5.6.5以上 ...
- (5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)
一.基于GTID的异步复制(一主一从)无数据/少数据搭建 二.基于GTID的无损半同步复制(一主一从)(mysql5.7)基于大数据量的初始化 正文: [0]概念 [0.5]GTID 复制(mysql ...
- 与MySQL传统复制相比,GTID有哪些独特的复制姿势?
与MySQL传统复制相比,GTID有哪些独特的复制姿势? http://mp.weixin.qq.com/s/IF1Pld-wGW0q2NiBjMXwfg 陈华军,苏宁云商IT总部资深技术经理,从事数 ...
- mysql之 MySQL 主从基于 GTID 复制原理概述
一. 什么是GTID ( Global transaction identifiers ):MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid ...
- mysql之 mysql 5.6不停机主从搭建(一主一从基于GTID复制)
环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火 ...
- MySQL的GTID复制与传统复制的相互转换
主库:192.168.225.128:3307从库1:192.168.225.129:3307 Gtid作为5.6版本以来的杀手级特性,却因为不支持拓扑结构内开关而饱受诟病.如果你需要从未开启GTID ...
随机推荐
- 【Spring Data JPA篇】JPA的底层原理(二)
一.接口继承结构 二.底层原理
- 刘长峰 js基础讲座笔记 课后作业
1.DataType Assert 数据类型断言 一.typeof : 判断变量的类型 ,返回字符串 typeof a 返回 'undefined' .'boolean' .'string' .' ...
- django -- admin里的配置
前戏 Django给我们提供了一个后台管理系统,方便我们进行数据表的管理 创建超级用户 python manage.py createsuperuser 配置 默认我们登录到后台不显示任何一张表,如果 ...
- 复杂模拟 | 1095 模拟N个学生有K个志愿填M个学校
妈的智障 #include <stdio.h> #include <memory.h> #include <math.h> #include <string& ...
- 屏蔽flash地区识别
host文件添加以下0.0.0.0 geo2.adobe.com
- 获取oracle中某张表的各个字段名称
select column_name from all_tab_columns where table_name='AT2_SSIS_CHNDB_CLIENT_INFO'
- Spring mvc 前后台通过json交互【转】
原文转自:https://www.cnblogs.com/zhaojiankai/p/8184596.html 本节内容: @RequestBody @ResponseBody 请求json,响应js ...
- bootstarp treeview 获取勾选和获取Selected选中
在用treeview的时候,经常会遇到一些官网没有详细说明的东西,比如获取勾选和获取选中的方法,获取选中官网是有明显说明的, 如下 : $('#resourceTree').treeview('get ...
- 2019年上-C语言程序设计课程内容
第一节课 序言 为何学习C语言 打印hello world程序 编译步骤,认识编译器 冯诺依曼体系结构 hello world程序如何在计算机上运行的 第二节课 基本数据类型与表达式 求华氏温度对应的 ...
- C#调用WPS将文档转换成pdf进行预览
引用:https://www.jianshu.com/p/445996126c75 vs启动项目可以生成wps实例 本地iis部署的站点却不行 原因是vs是管理员权限,而iis没有权限 解决方法 启动 ...