mysql—半同步模式

mysql的并行复制

在172.25.254.20(slave)主机上

默认情况下slave中使用的是sql单线程回放 在master中时多用户读写,如果使用sql单线程回放那么会造成组从延迟严重 开启MySQL的多线程回放可以解决上述问题

mysql> show processlist;

在配置文件中进行编辑

root@nginx \~# /etc/init.d/mysqld restart

Shutting down MySQL. SUCCESS!

Starting MySQL. SUCCESS!

root@nginx \~# mysql -uroot -p

mysql> show processlist;

此时sql线程转化为协调线程,16个worker负责处理sql协调线程发送过来的处理请求。

MySQL 组提交(Group commit)是一个性能优化特性,它允许在一个事务日志同步操作中将多个 事务的日志记录一起写入。这样做可以减少磁盘I/O的次数,从而提高数据库的整体性能。

mysql的gitd日志模式

当为启用gtid时我们要考虑的问题 在master端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端一定会延迟与master端

这种延迟在slave端的延迟可能会不一致,当master挂掉后slave接管,一般会挑选一个和master延迟日 志最接近的充当新的master

那么为接管master的主机继续充当slave角色并会指向到新的master上,作为其slave

这时候按照之前的配置我们需要知道新的master上的pos的id,但是我们无法确定新的master和slave之 间差多少

当激活GITD

当master出现问题后,slave2和master的数据最接近,会被作为新的master slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可

gitd日志模式模式部署如下:

172.25.254.10(maste)主机

root@nginx mysql# # mysqlbinlog -vv /data/mysql/nginx-relay-bin.000001

@@省略内容@@ SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/; DELIMITER ; # End of log file /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/; /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

编辑配置文件设置gtid

root@nginx \~# vim /etc/my.cnf

重启文件

root@nginx \~# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

172.25.254.20主机

编辑配置文件设置gtid

root@nginx \~# vim /etc/my.cnf

重启文件

root@nginx \~# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

停止salve

mysql> stop slave;

开启git日志模式同步

mysql>CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl',MASTER_PASSWORD='123', MASTER_AUTO_POSITION=1;

开启salve

mysql> start slave;

mysql> show slave status\G;

172.25.254.30主机

编辑配置文件设置gtid

root@nginx \~# vim /etc/my.cnf

重启文件

root@nginx \~# /etc/init.d/mysqld restart

Shutting down MySQL.. SUCCESS!

Starting MySQL. SUCCESS!

停止salve

mysql> stop slave;

开启git日志模式同步

mysql>CHANGE MASTER TO MASTER_HOST='172.25.254.10', MASTER_USER='repl',MASTER_PASSWORD='123', MASTER_AUTO_POSITION=1;

开启salve

mysql> start slave;

mysql> show slave status\G;

mysql的gitd日志模式的部署完成

mysql的半同步模式原理

1.用户线程写入完成后master中的dump会把日志推送到slave端

2.slave中的io线程接收后保存到relaylog中继日志

3.保存完成后slave向master端返回ack

4.在未接受到slave的ack时master端时不做提交的,一直处于等待当收到ack后提交到存储引擎

5.在5.6版本中用到的时after_commit模式,after_commit模式时先提交在等待ack返回后输出ok

启用用半同步模式,先做好git日志模式

172.25.254.10(master)

编辑配置文件配置启用半同步模式

root@nginx \~# vim /etc/my.cnf

配置文件不要重启,由于没有安装相应的模块 就没有该功能。

安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

查看插件是否安装成功

mysql> select * from information_schema.PLUGINS where PLUGIN_NAME LIKE '%semi%'\G;

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;

查看半同步功能状态是否开启(AFTER_SYNC)

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

查看状态是否开启

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

172.25.254.20

编辑配置文件配置启用半同步模式

root@nginx \~# vim /etc/my.cnf

安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;

重启io线程,半同步才能生效

mysql> STOP SLAVE IO_THREAD;

mysql> START SLAVE IO_THREAD;

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

172.25.254.20的半同步模式配置完成

172.25.254.30

编辑配置文件配置启用半同步模式

root@nginx \~# vim /etc/my.cnf

安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

打开半同步功能

mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;

重启io线程,半同步才能生效

mysql> STOP SLAVE IO_THREAD;

mysql> START SLAVE IO_THREAD;

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

172.25.254.30的半同步模式配置完成

测试

172.25.254.10(master)端

查看有多少数据

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

mysql> show databases;

mysql> create database MySchool_db;

mysql> show databases;

在172.25.254.20主机上会显示库名

mysql> show databases;

在172.25.254.30主机上也会显示库名

mysql> show databases;

相关推荐
梁辰兴1 小时前
软件工程:数据结构设计
数据库·软件工程·设计原则·设计方法·梁辰兴·数据库结构设计·数据库结构类型
AC赳赳老秦1 小时前
风控岗应用:OpenClaw 采集公开司法与经营异常数据,自动生成企业风险评估报告
大数据·c语言·数据库·人工智能·python·php·openclaw
灯澜忆梦2 小时前
【MySQL18】进阶篇 | MySQL管理
数据库·mysql
zcmodeltech2 小时前
智能制造教学实训沙盘模型多系统协同控制系统设计:基于STM32与Modbus RTU的工业机器人-智慧工厂-数字孪生全场景联动方案
数据库·stm32·嵌入式硬件·机器人·制造·多分类
AI多Agent协作实战派3 小时前
AI多Agent协作系统实战(四十):AI说“没有错误“,系统判了“测试失败“——一个正则的误判
数据库·人工智能
隔窗听雨眠3 小时前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase
lv__pf4 小时前
spring之整合mybatis【TL spring 12】
mysql·spring·mybatis
playboy1344 小时前
工作室 NAS 存储故障-办公室所有数据无法访问怎么办
数据库
byxdaz5 小时前
jeston平台交叉编译Poppler库与预览pdf文件
数据库
SilicoCode5 小时前
江科大STM32入门:FLASH闪存详解——从结构原理到读写保护
数据库·mongodb