Mysql5.6.21-GTID主从切换

实验环境:3台服务器,A,B,C

A-Master:192.168.112.131

B-Slave:192.168.112.132

C-Slave:192.168.112.129

一:查看当前复制状态。

1:查看 A,B,C 服务器TID。

A-master服务器:192.168.112.131

sql>show master status;

B-Slave服务器:192.168.112.132

sql>show slave status\G

C-Slave服务器:192.168.112.132

sql>show slave status\G

二:模拟数据不一致性,A主服务器宕机。

1:C-salve断开主从。

sql>stop slave;

2:A-Master插入新数据。

sql>create table t13(id int);

sql>create table t14(id int);

sql>create table t15(id int);

这个时候,我们可以发现,C服务器缺少13-15表的数据。B服务器是正常的。

3:模拟A服务器宕机,直接关闭A服务器的mysql服务。

$sh ../scripts/mysql_shutdown.sh

4:查看B服务器状态。

sql>show slave status\G

三:将B-slave提升为主服务。

1:停止B服务器上的slave服务

sql>stop slave;

2:C服务器更改连接主服务器IP地址

sql>change master to master_host=‘192.168.112.132‘, master_user=‘ruser‘,master_password=‘rpass‘,master_auto_position=1;

3:C服务器启动slave服务,查看C服务器状态。

sql>start slave;

sql>show slave status\G

这里会发现一个疑问,为什么C服务器上的Executed_Gtid_set的值还是:7edc6fd5-e1bf-11e4-8842-000c29e512d6:1-16,

按照理论,GTID不是唯一的么?难道B和A服务器的GTID是一样的??记住这里执行的relay日志。relay日志记录的GTID值肯定是原来A服务器上的。

4:查看C服务器从B服务器复制的新数据。

sql>use testhuang;

sql>show tables;

补充信息描述:

当前环境都是异步架构(非半同步),生产实际情况可能是C服务器复制的数据比较多,B还没来得及复制,A服务器

就宕机了。我们应该选择节点中,TID值最高的服务器做为主服务器。如果强制需要B服务器做为主,我们也应当让C先接管主,B服务连接C,数据都同步成功后,再进行切换。

回到刚才那个问题,为什么Executed_Gtid_set还是原来的值。我们先做一个实验。

5:B新主服务器添加新数据。

sql>create table t16(id int);

sql>create table t17(id int);

sql>create table t18(id int);

6:这个时候,我们执行show master status;

sql>show master status;

7d055966-e1bf-11e4-8842-000c2976947c:1-3

7edc6fd5-e1bf-11e4-8842-000c29e512d6:1-16

是否发现GTID的值变化了,一共有两行, ","隔开的,符合GTID的唯一理论了吧?因为之前的t13-t15是原来的GTID事务。所以C服务器在连接B服务器的时候,在没有添加任何数据之前,同步的信息标识还是A服务器的GTID值。我们可以同步relay日志查看。

7:C服务器上查看relay日志:

这里根据实际情况查看binlog日志文件。

$/usr/local/mysql56/bin/mysqlbinlog mysql-relay-bin.000002

我们可以发现C服务器上运用的relay日志。可以得出结论,B服务器上的binlog日志也是一样的。

因为该日志是从B服务器上拉取下来的,不信可以去看看,所以就符合了同一个事务所有节点的

GTID值都是一致的。下面案列中,我们也会更充分证明。

四:A服务器恢复,加入从节点。

1:启动A服务器mysql服务。

$sh ../scripts/mysql_startup.sh

2:查看当前状态

sql>show master status;

可以看到A服务器的GTID值,是1-16.目前并没有连接新主服务器。

3:连接新数据库B.

sql>change master to master_host=‘192.168.112.132‘, master_user=‘ruser‘,master_password=‘rpass‘,master_auto_position=1;

4:启动slave服务。

sql>start slave;

5:查看数据同步状态。

sql>use testhuang;

sql>start tables;

数据同t16-t18已经被同步过来了。

6:查看slave状态

sql>show slave status\G

我们可以发现,这里的Executed_Gtid_Set只有一个值,跟理论值完全对应。

时间: 2024-10-15 09:19:01

Mysql5.6.21-GTID主从切换的相关文章

MySQL5.7配置GTID主从---GTID介绍

一.什么是 GTIDGTID (Global Transaction Identifiers)是对于一个已提交事务的编号,事务的唯一编号,并且是一个全局唯一的编号.GTID 和事务会记录到 binlog 中,用来标识事务.GTID 是用来替代以前 classic 复制方法,MySQL-5.6.2 开始支持 GTID,在 MySQL-5.6.10 后完善.有了 GTID,一个事务在集群中就不再孤单,在每一个节点中,都存在具有相同标识符的兄弟们和它作伴,可以避免同一个事务,在同一个节点中出现多次的情

MySQL5.7配置GTID主从---搭建GTID主从

准备说明: master:192.168.10.100 slave:192.168.10.101 一.配置GTID参数 配置文件均为/etc/my.cnf Master参数配置: gtid-mode = ON enforce-gtid-consistency = ON server-id =100 binlog_format = ROW log-bin = /data/mysql/data/mysql-bin Slave上参数配置: gtid-mode = ON enforce-gtid-con

CentOS6.8下MySQL5.6.40基于GTID主从及多线程复制

大纲 一 GTID简介 二 环境准备 三 数据库的安装 四 基于GTID主从配置步骤 五 验证GTID复制功能 一 GTID简介 GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号.GTID实际上是由UUID+TID组成的.其中UUID是一个MySQL实例的唯一标识.TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增.下面是一个GTID的具体形式3E11FA47-71CA-11E1-9E33-C80AA9429562:23更详

mysql5.7.24 gtid双主复制+atlas+keepalived

一环境介绍: 系统: centos7 [root@mgr01 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 [root@pxc02 ~]# cat /etc/hosts 10.0.0.6 pxc01 10.0.0.7 pxc02 关闭selinux:vim /etc/sysconfig/selinuxgetenforce 保证服务器时间同步: ntpdate ntp1.aliyun.com */5 * * * * ntpdate ntp1.al

MySQL主从复制——MySQL-5.6基于GTID及多线程的复制

一.Mysql 5.6 新特性 .... 复制功能的改进 ⒈支持多线程复制,(slave-parallel-workers=0     0: 表示禁用多线程功能:)事实上是针对每个database开启相应的独立线程.即每个库有一个单独的(sql thread),如果线上业务中,只有一个database或者绝大多数压力集中在个别database的话,多线程并发复制特性就没有意义了. ⒉支持启用GTID,对运维人员来说应该是一件令人高兴的事情,在配置主从复制,传统的方式里,你需要找到binlog和P

redis的sentinel主从切换(failover)与Jedis线程池自动重连

本文介绍如何通过sentinel监控redis主从集群,并通过jedis自动切换ip和端口. 1.配置redis主从实例 10.93.21.21:6379 10.93.21.21:6389 10.93.21.21:6399 主从同步关系 master:10.93.21.21:6379 slave:10.93.21.21:6389,10.93.21.21:6399 master配置如下: # 实例ip和端口 bind 10.93.21.21 port 6379 # pid文件 pidfile re

redis主从切换的集群管理

网 站的访问量慢慢上来了.为了网站的性能方面,开始用了redis做缓存策略.刚开始的时候,redis是一个单点,当一台机器岩机的时候,redis的 服务完全停止,这时就会影响其他服务的正常运行.费话不多说了,下面利用redis sentinel做一个主从切换的集群管理.做这个集群管理的时候,查过很多资料才完全了解,他是怎么做的. java 客户端请看: http://blog.mkfree.com/posts/52b146e6479e5a64742fddd0 参考资料:http://redis.

mycat读写分离与主从切换

1, 分库分表的优缺点.以及为什么分表方式无法成为主流? 分表:在台服务器上,优点是易维护,类似表分区,缺点是在一台db服务器上,无法分担IO.负载集中. 分库:在多台服务器上,优点是分担IO.负载均衡,缺点是较不易维护.数据统计以及jion操作有些难度. 数据库切分的目的是为了分担IO.负载均衡,分表无法达到最佳的要求,所以无法成为主流. 2, 准备主库 tar -xvf mysql-5.6.12.tar.gz cd mysql-5.6.12 time cmake . -DCMAKE_INST

Mycat读写分离、主从切换学习(转)

http://blog.csdn.net/zhanglei_16/article/details/50707487 Mycat读写分离.主从切换学习问题一:分表.分库的优缺点,以及分表无法成为主流分表方式:是在将一个大表,在一个db库内,分成多个分表,优点是:分开之后的表,仍然在一个库内,便于查看.管理.缺点:db只能在一个服务器内,不能解决I/O问题,负载集中 分库方式:将一个大表,分布在多个DB中,每个DB只保留一部分数据,所有数据组合起来才是全库的数据.优点:优点是分担IO.负载均衡,可以

Httpd2.4.10+Mysql5.6.21+Php5.61编译安装(PHP集成为HTTPD的模块)

一.编译安装Httpd2.4.10 1.解决依赖关系 httpd-2.4.10需要较新版本的apr和apr-util,因此需要事先对其进行升级.升级方式有两种,一种是通过源代码编译安装,一种是直接升级rpm包.这里选择使用编译源代码的方式进行,在Apache官方网站下载apr 与apr-util码源包. 1)编译安装apr # tar xf apr-1.5.1.tar.bz2 # cd apr-1.5.1 # ./configure --prefix=/usr/local/apr # make