欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mysql主从复制(基于GTID)

程序员文章站 2024-03-20 19:12:16
...

 

一、Mysql主从复制的几种模式

二、半同步模式

1.实验环境

2.安装mysql

3.master服务器配置

4.slave服务器配置

一、Mysql主从复制的几种模式

       传统的基于binlog position复制的方式有个严重的缺点:如果slave连接master时指定的binlog文件错误或者position错误,会造成遗漏或者重复,很多时候前后数据是有依赖性的,这样就会出错而导致数据不一致。从MYSQL5.6开始,mysql开始支持GTID复制。GTID的全称是global transaction id,表示的是全局事务ID。

1.异步模式

       异步模式指的是MySQL 主服务器上I/O thread 线程将二进制日志写入binlog文件之后就返回客户端结果,不会考虑二进制日志是否完整传输到从服务器以及是否完整存放到从服务器上的relay日志中,这种模式一旦主服务(器)宕机,数据就可能会发生丢失。

2.全局模式

       当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

3.半同步模式

      介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

事实上,半同步复制并不是严格意义上的半同步复制,当半同步复制发生超时时(由rpl_semi_sync_master_timeout参数控制,单位是毫秒,默认为10000,即10s),会暂时关闭半同步复制,转而使用异步复制。当master dump线程发送完一个事务的所有事件之后,如果在rpl_semi_sync_master_timeout内,收到了从库的响应,则主从又重新恢复为半同步复制。

二、半同步模式

Mysql主从复制(基于GTID)
半同步复制流程图

1.实验环境

角色 IP地址 server_id 数据状态 操作系统
mysql-master 192.168.0.170 1 Mysql8.0.18  Centos7.6.1810
mysql-slave 192.168.0.171 2 Mysql8.0.18  Centos7.6.1810

 

 

 

2.

2.安装mysql

mysql的安装详见https://blog.csdn.net/doupengzp/article/details/103801062

3.master服务器配置

vi /etc/my.cfg  加入以下代码

# 主从复制
server-id=1
log-bin=mysql-bin
gtid_mode=ON    #使用gtid模式
enforce-gtid-consistency=true  #强制使用gtid
rpl_semi_sync_master_enabled=1  #永久开启半同步模式
#这个参数控制着日志在刷盘前日志提交要等待的时间,默认是0也就是说提交后立即刷盘,但是并不代表是关闭了组提交,当设置为0以上的时候,就允许多个事物的日志同时间一起提交刷盘,也就是我们说的组提交。组提交是并行复制的基础,我们设置这个值的大于0就代表打开了组提交的延迟功能,而组提交是默认开启的。最大值只能设置为1000000微妙。
binlog_group_commit_sync_delay = 100    
#这个参数表示我们在binlog_group_commit_sync_delay等待时间内,如果事物数达到这个参数的设定值,就会触动一次组提交,如果这个值设为0的话就不会有任何的影响。如果到达时间但是事物数并没有达到的话,也是会进行一次组提交操作的          
binlog_group_commit_sync_no_delay_count = 10

安装插件

mysql>  install plugin rpl_semi_sync_master soname 'semisync_master.so';
Query OK, 0 rows affected (0.50 sec)

mysql> show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |
| rpl_semi_sync_master_timeout              | 10000      |
| rpl_semi_sync_master_trace_level          | 32         |
| rpl_semi_sync_master_wait_for_slave_count | 1          |
| rpl_semi_sync_master_wait_no_slave        | ON         |
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.01 sec)

重启mysql服务

4.slave服务器配置

vi /etc/my.cnf  添加以下代码

#主从复制
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
rpl_semi_sync_slave_enabled=1 #永久开启半同步模式
#MTS
slave-parallel-type=LOGICAL_CLOCK   # 并行的类型
slave-parallel-workers=5  # 开启多少个线程
master_info_repository=TABLE  # maste.info和relay.info是以表的形式存储的
relay_log_info_repository=TABLE   # 存储日志以表的形式
relay_log_recovery=ON  # 支持恢复

安装插件

mysql>  install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.14 sec)

mysql> show global variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.00 sec)
相关标签: mysql 主从同步