基于gtid的半同步mysql主从复制

127 篇文章 0 订阅
36 篇文章 0 订阅

此篇博客的是在上一篇博客(mysql主从复制)的基础上写的

https://blog.csdn.net/weixin_40543283/article/details/87911286

 此篇博客写的是基于gtid的半同步mysql主从复制

一、gtid的半同步mysql主从复制的原理介绍

1.什么是gtid?

GTID (Global Transaction ID) 是对于一个已提交事务的编号,并且是一个全局唯一的编号。 GTID 实际上 是由 UUID+TID 组成的。其中 UUID 是一个 MySQL 实例的唯一标识。TID 代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。

 2.gtid有什么优点?

在原来基于二进制日志的复制中,从库需要告知主库要从哪个偏移量进行增量同步,如果指定错误会造成数据的遗漏,从而造成数据的不一致。借助GTID,在发生主备切换的情况下,MySQL的其它从库可以自动在新主库上找到正确的复制位置,这大大简化了复杂复制拓扑下集群的维护,也减少了人为设置复制位置发生误操作的风险。另外,基于GTID的复制可以忽略已经执行过的事务,减少了数据发生不一致的风险。

如下图,可以查看到gtid的id号码

2.什么是异步复制和半同步复制

简单来说,异步复制就是直接把master的bin-log扔给slave,而不管slave有没有备份好relay-bin-log,而半同步则是在把master的bin-log扔给slave以后,需要slave返回一个ack值,才会进行提交刷盘

 所以,异步复制和半同步复制的主要区别还是事务在主库写完binlog后需要从库返回一个已接受(ACK),才放回给客户端;

2.部署

环境:

  • 虚拟机server1:master数据库
  • 虚拟机server2:slave数据库
  • 软件:mysql-5.7.24-1.el7.x86_64    ==>   点击下载

1.sever1:master节点

将软件使用scp传到server1和server2

安装mysql软件

yum install mysql-community-common-5.7.24-1.el7.x86_64.rpm 
mysql-community-client-5.7.24-1.el7.x86_64.rpm 
mysql-community-libs-5.7.24-1.el7.x86_64.rpm 
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm 
mysql-community-server-5.7.24-1.el7.x86_64.rpm -y

然后修改数据库设置文件

vim /etc/my.cnf                    ##添加下面的语句

log-bin=mysql-bin
server-id=1
gtid_mode=ON
enforce-gtid-consistency=true

然后开启数据库软件

systemctl start mysqld
cat /var/log/mysqld.log | grep password                    ##查看数据库的初始密码
mysql_secure_installation                                  ##安全初始化,密码要复杂些,我设置的密码是Mysql1994.

进入数据库设置为master节点

mysql -pMysql1994.

mysql> grant replication slave on *.* to repl@'172.25.1.%' identified by 'Mysql1994.';
mysql> Flush privileges;
mysql> show master status;

 如上,master节点就设置好了

接下来,进行半同步设置

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  ##安装半同步master插件
mysql> SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';  ##查看插件状态
mysql> SET GLOBAL rpl_semi_sync_master_enabled=ON;	   ##实现热同步

 这就设置好了基于gtid的半同步复制的master

/var/lib/mysql/auto.cnf这个文件可以查看uuid

2.sever2:slave节点

安装mysql软件

yum install mysql-community-common-5.7.24-1.el7.x86_64.rpm 
mysql-community-client-5.7.24-1.el7.x86_64.rpm 
mysql-community-libs-5.7.24-1.el7.x86_64.rpm 
mysql-community-libs-compat-5.7.24-1.el7.x86_64.rpm 
mysql-community-server-5.7.24-1.el7.x86_64.rpm -y

然后修改数据库设置文件

vim /etc/my.cnf                    ##添加下面的语句

server-id=2
gtid_mode=ON
enforce-gtid-consistency=true

然后开启数据库软件

systemctl start mysqld
cat /var/log/mysqld.log | grep password                    ##查看数据库的初始密码
mysql_secure_installation                                  ##安全初始化,密码要复杂些,我设置的密码是Mysql1994.

先测试以下远程用户是否可以登陆

进入数据库设置为slave节点

mysql -pMysql1994.
      mysql> change master to master_host='172.25.1.5',
          master_user='repl',
          master_password='Mysql1994.',
          master_log_file='mysql-bin.000002',
          master_log_pos=1398;
      mysql> start slave;
      mysql> show slave status\G

出现图片最下方的两个yes,这样就设置成功了,接下来设置半同步

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';   ##安装slave插件
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;                      ##实现热同步

这就设置好了基于gtid的半同步复制的slave

var/lib/master.info是记录一些你的主数据库的信息,

3.测试:

思路:在server1上新建表格,然后故意停止掉slave,会发现slave等待十秒,然后会转为异步复制,当slave开启的时候,又会自动转为半同步

1)server1:

mysql> SHOW STATUS LIKE '%RPL%';	##查看主数据库状态
mysql> SHOW VARIABLES LIKE '%RPL%';	##查看设置信息

新建一个表

mysql> CREATE TABLE xupt(
    -> username varchar(10) not null,
    -> password varchar(50) not null
    -> );
mysql> use nelws
	mysql> insert into xupt values ('user5','123');
	mysql> select * from xupt	

 一开始不要停止slave,在server1插入信息

在server2查看

第二次在往表格里插入数据未提交的时候,在server2上停止slave

mysql> use nelws
	mysql> insert into xupt values ('user6','123');
	mysql> select * from xupt	

如上图,等了十秒,切换为了异步,当server2打开slave的时候,就会切换回来,看时间便知~

ok~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值