博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql GTID 半同步复制
阅读量:5766 次
发布时间:2019-06-18

本文共 3027 字,大约阅读时间需要 10 分钟。

1)什么是GTID

GTID(Global Transaction ID)是对于一个已提交事务的编号,并且是一个全局唯一的编号。GTID实际上是由UUID+TID组成的。其中UUID是一个MySQL实例的唯一标 识,保存在mysql数据目录下的auto.cnf文件里。TID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增。下面是一个GTID的具 体形式:3E11FA47-71CA-11E1-9E33-C80AA9429562:23。

2)GTID的作用

根据GTID可以知道事务最初是在哪个实例上提交的

GTID的存在方便了Replication的Failover

3)GTID比传统复制的优势

更简单的实现failover,不用以前那样在需要找log_file和log_Pos。

更简单的搭建主从复制。

比传统复制更加安全。

GTID是连续没有空洞的,因此主从库出现数据冲突时,可以用添加空事物的方式进行跳过。

4)GTID的工作原理:

master更新数据时,会在事务前产生GTID,一同记录到binlog日志中。

slave端的i/o线程将变更的binlog,写入到本地的relay log中。

sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录。

如果有记录,说明该GTID的事务已经执行,slave会忽略。

如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog。

在解析过程中会判断是否有主键,如果没有就用二级索引,如果没有就用全部扫描。

实验环境:rhel6.5
server7 master
server8 slave[root@server7 ~]# mysql -p

基于mysql主从复制实验

[root@server7 ~]# vim /etc/my.cnf
server-id=1
log-bin=mysql-bin

gtid_mode=ON

enforce-gtid-consistency=true #添加GTID
[root@server7 ~]# /etc/init.d/mysqld restart
[root@server7 ~]# mysql #添加数据
[root@server7 ~]# mysql -p
mysql GTID  半同步复制
[root@server8 ~]# vim /etc/my.cnf
server-id=2

gtid_mode=ON

enforce-gtid-consistency=true #添加GTID
[root@server8 ~]# /etc/init.d/mysqld restart
[root@server8 ~]# mysql -p
mysql> stop slave;
mysql> change master to master_host='172.25.135.7',master_user='repl',master_password='Caonimei@478',MASTER_AUTO_POSITION = 1;
mysql> start slave;
mysql> show slave status\G;
mysql> use mysql;
mysql> show tables;
mysql> select * from gtid_executed;
mysql GTID  半同步复制
mysql> show slave status\G;
半同步复制:
开启slave半同步
[root@server8 ~]# vim /etc/my.cnf
server-id=2

gtid_mode=ON

enforce-gtid-consistency=true
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=16
master_info_repository=TABLE
relay_log_info_repository=TABLE
relay_log_recovery=ON
[root@server8 ~]# /etc/init.d/mysqld restart
[root@server7 ~]# mysql -p
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.02 sec)

mysql> SET GLOBAL rpl_semi_sync_master_enabled=1;

Query OK, 0 rows affected (0.00 sec)

mysql> set global rpl_semi_sync_master_enabled=ON;

Query OK, 0 rows affected (0.00 sec)

mysql> show status like '%rpl%';

mysql GTID  半同步复制
mysql> show variables like '%rpl%';
[root@server8 ~]# mysql -p
mysql> show processlist;
mysql> use mysql;
mysql> select * from slave_master_info;
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled=1;
mysql> stop slave io_thread;
mysql> start slave io_thread;
mysql> show status like '%rpl%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)
master上server7插入数据
mysql> use westos;
mysql> insert into usertb values ('user4','333');
mysql> show variables like '%rpl%';
mysql GTID  半同步复制
mysql GTID  半同步复制
mysql> insert into usertb values ('user5','333');
mysql GTID  半同步复制
mysql GTID  半同步复制
slave server8关掉io同步
mysql> stop slave io_thread;
master server7掺入数据就有10秒延迟。
mysql> insert into usertb values ('user6','333');
mysql GTID  半同步复制

转载于:https://blog.51cto.com/13810716/2306950

你可能感兴趣的文章
C# 制作Java +Mysql+Tomcat 环境安装程序,一键式安装
查看>>
ceph install
查看>>
ehcache.xml的配置详解和示例
查看>>
推荐一个算法编程学习中文社区-51NOD【算法分级,支持多语言,可在线编译】...
查看>>
[MFC]选择目录对话框和选择文件对话框 [转]
查看>>
JavaScript权威设计--JavaScript语言核心(简要学习笔记一)
查看>>
Java面向对象的多态
查看>>
[saiku] 简介、下载、安装和教程
查看>>
python装饰实现线程同步
查看>>
【转】Android Studio 的小小配置
查看>>
MySQL字符集编码
查看>>
04python while循环语句
查看>>
文件上传 - iframe上传
查看>>
一个基于RSA算法的Java数字签名例子
查看>>
CentOS6系升级Python2.7版本
查看>>
虚拟机里面安装Openfiler 2.99
查看>>
Linux如何在虚拟机中挂载iso yum源
查看>>
录制视频
查看>>
eclipse maven新建springMVC项目(原创)
查看>>
CanvasRenderingContext2D.lineDashOffset
查看>>