基于GTID的 mysql 主从故障切换

  • mysql 从 5.6.5 后新增了一种基于 GTID 的复制方式

  • 普通主从复制:
    普通主从复制主要是基于二进制日志文件位置的复制,因此主必须启动二进制日志记录并建立唯一的服务器ID,复制组中的每个服务器都必须配置唯一的服务器ID。如果您省略server-id(或者明确地将其设置为其默认值0),则主设备将拒绝来自从设备的任何连接。

  • GTID 主从:
    MySQL 5.6 的新特性之一,全局事务标识符(GTID)是创建的唯一标识符,并与在源(主)服务器上提交的每个事务相关联。此标识符不但是唯一的,而且在给定复制设置中的所有服务器上都是唯一的。所有交易和所有GTID之间都有一对一的映射关系 。它由服务器ID以及事务ID组合而成。这个全局事务ID不仅仅在原始服务器上唯一,在所有存在主从关系 的mysql服务器上也是唯一的。正是因为这样一个特性使得mysql的主从复制变得更加简单,以及数据库一致性更可靠。一个GTID在一个服务器上只执行一次,避免重复执行导致数据混乱或者主从不一致

环境

  • 2台 CentOS Linux release 7.5.1804 (Core)
    master 端 192.168.153.177
    slave 端 192.168.153.177
    关闭防火墙和selinux
部署:

安装 mysql5.6.5 及以上版本

yum -y install wget
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql57-community-release-el7-10.noarch.rpm

yum -y install mysql-community-server

启动 mysql

service mysqld start

查看 mysql 初始密码

[root@localhost ~]# grep password /var/log/mysqld.log

在这里插入图片描述
登录 mysql

mysql -uroot -p

回车后输入刚刚获取的密码

在这里插入图片描述
修改初始密码(密码有难度要求)

mysql> set password = password("NTMSsb_123");
Query OK, 0 rows affected, 1 warning (0.00 sec)
配置 GTID

配置文件修改

vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

port=3306
server_id=1     #服务器id
gtid_mode=on    #开启gtid模式
enforce_gtid_consistency=on #强制gtid一致性,开启后对特定的create table 不支持
log-bin=mysql-bin #开启二进制日志
binlog_format=row #默认为mixed混合模式,更改成row复制,为了数据一致性
log-slave-updates=1 #从库binlog才会记录主库同步的操作日志
skip_slave_start=1 #跳过slave复制线程
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

重启 mysqld

service mysqld restart

在这里插入图片描述
检查 GTID 状态
在这里插入图片描述

主从配置

主master操作:

mysql> grant all on *.* to slave@'192.168.153.177' identified by 'NTMSsb_123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

从slave操作:

mysql> change master to master_host='192.168.153.178',master_user='slave',master_password='NTMSsb_123',master_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

在这里插入图片描述

验证主从

主库插入

mysql> create database test;
Query OK, 1 row affected (0.00 sec)

mysql> use test;
Database changed
mysql> create table tb(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert tb values(0);
Query OK, 1 row affected (0.05 sec)

从库验收

mysql> use test;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from tb;
+------+
| id   |
+------+
|    0 |
+------+
1 row in set (0.00 sec)
模拟故障

断开主从 切换身份

mysql> stop slave;
Query OK, 0 rows affected (0.00 sec)

mysql> reset slave;
Query OK, 0 rows affected (0.01 sec)

故障中在从库插入数据

mysql> create database test2;
Query OK, 1 row affected (0.00 sec)

mysql> use test2;
Database changed
mysql> create table tb2(id int);
Query OK, 0 rows affected (0.01 sec)

mysql> insert tb2 values(0);
Query OK, 1 row affected (0.00 sec)

建立主从 从升级为主 主降级为从

从升级为主

mysql> grant all on *.* to slave@'192.168.153.178' identified by 'NTMSsb_123';
Query OK, 0 rows affected, 1 warning (0.00 sec)

主降级为从

mysql> change master to master_host='192.168.153.177',master_user='slave',master_password='NTMSsb_123',master_AUTO_POSITION=1;
Query OK, 0 rows affected, 2 warnings (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected (0.00 sec)

成功切换,查看数据是否成功同步

在这里插入图片描述
新从验证
成功同步!

mysql> use test2;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from tb2;
+------+
| id   |
+------+
|    0 |
+------+
1 row in set (0.00 sec)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值