CentOS8 在MySQL8.0 实现半同步复制

#原理

MySQL默认是异步的,不要求 必须全部同步到从节点才返回成功结果;

同步复制: 用户发请求到代理, 代理收到请求后写/更新数据库写入到二进制日志bin_log, 然后必须等数据发到所有的从节点, 从节点全部收到数据后, 主节点才返回给客户端的成功结果。

弊端: 客户端必须等到所有的从节点接收全部数据才收到成功结果,耗时长,效率低。

所以用半同步的方法解决,只要有一个从节点同步成功就返回成功结果。

#安装插件

安装主节点插件

bash 复制代码
mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; #永久安装插件

查看插件

bash 复制代码
mysql>SHOW PLUGINS; #查看插件

安装从节点插件(两个)

bash 复制代码
mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
bash 复制代码
mysql>SHOW PLUGINS; #查看插件

#主服务器Master配置

bash 复制代码
[root@master ~]#vim /etc/my.cnf.d/mysql-server.cnf
bash 复制代码
[mysqld]
server-id=8
log-bin

rpl_semi_sync_master_enabled=ON #修改此行,需要先安装semisync_master.so插件后,再重启,否则无法启动
rpl_semi_sync_master_timeout=3000 #设置3s内无法同步,也将返回成功信息给客户端

重启数据库

bash 复制代码
systemctl restart mysqld

插件开启状态

#从服务器Slave配置

打开配置文件

bash 复制代码
vim /etc/my.cnf.d/mysql-server.cnf

第一个从节点

bash 复制代码
[root@slave1 ~]#vim /etc/my.cnf.d/mysql-server.cnf
[mysqld]
server-id=18

rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动

第二个从节点

bash 复制代码
[mysqld]
server-id=28
rpl_semi_sync_slave_enabled=ON #修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动

验证查看

sql 复制代码
mysql>SHOW GLOBAL VARIABLES LIKE '%semi%';

#搭建主从关系

主节点查看

sql 复制代码
mysql> show master logs;

记录下来

sql 复制代码
CHANGE MASTER TO 
  MASTER_HOST='10.0.0.8',
  MASTER_USER='repluser',
  MASTER_PASSWORD='magedu',
  MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=156;

创建账号并授权

sql 复制代码
#创建用户
mysql>create user repluser@"10.0.0.%" identified by "123456";

#授权
mysql>grant replication slave on *.* to repluser@"10.0.0.%";

从节点数据库执行

sql 复制代码
CHANGE MASTER TO 
  MASTER_HOST='10.0.0.8',
  MASTER_USER='repluser',
  MASTER_PASSWORD='magedu',
  MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=156;

状态查看(成功)

sql 复制代码
mysql> start slave;

#验证

现在返回主节点查看

sql 复制代码
mysql> SHOW GLOBAL STATUS LIKE '%semi%';

#注意:如果已经实现主从复制,需要stop slave;start slave;

sql 复制代码
mysql> stop slave;
mysql> start slave;

mysql> SHOW GLOBAL STATUS LIKE '%semi%';
+----------------------------+-------+
| Variable_name | Value |
+----------------------------+-------+
| Rpl_semi_sync_slave_status | ON |
+----------------------------+-------+
1 row in set (0.00 sec)
相关推荐
kejiashao1 小时前
Android View的绘制流程及事件分发机制
android
小蜜蜂嗡嗡1 小时前
flutter实现付费解锁内容的遮挡
android·flutter
进击的cc1 小时前
拒绝背诵!一文带你打穿 Android ANR 发生的底层全链路
android·面试
进击的cc2 小时前
App 启动优化全家桶:别再只盯着 Application 了,热启动优化你真的做对了吗?
android·面试
彭波3962 小时前
安卓手机端安装xapk、apkm软件!怎样安装xapk软件?安卓的apk和XAPK的区别?附教程
android·智能手机
Yang-Never3 小时前
ADB ->adb shell perfetto 抓取 trace 指令
android·开发语言·adb·android studio
2501_937189236 小时前
莫凡电视:地方台专属聚合 稳定直播播放工具
android·源码·源代码管理
耶叶7 小时前
Android 新权限申请模型(Activity Result API)
android
阿拉斯攀登7 小时前
【RK3576 安卓 JNI/NDK 系列 04】JNI 核心语法(下):字符串、数组与对象操作
android·驱动开发·rk3568·瑞芯微·rk安卓驱动·jni字符串操作
2501_915909067 小时前
不用越狱就看不到 iOS App 内部文件?使用 Keymob 查看和导出应用数据目录
android·ios·小程序·https·uni-app·iphone·webview