数据库:mysql的半同步复制

目录

一、半同步复制

1、半同步复制应用场景

2、半同步复制原理

3、半同步复制实战实现


一、半同步复制

1、半同步复制应用场景

默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能,主库把binlog日志发送给从库即结束,并不验证从库是否接收完毕。这意味着当主服务器或从服务器端发生故障时,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失。

2、半同步复制原理

①用户执行写操作时由负载均衡转到主数据库

②主数据库更新完毕生成binlog日志发送给从数据库同步,正常运行时从数据库只要有一个同步完成则立马返回给主数据库,主数据库返回给用户写操作执行成功。

③若所有从数据库在设置的规定时间内例如是3秒,3秒之内没有返回结果给主数据库,则主数据库先将结果返回给用户写操作执行成功,从数据库慢慢复制。

④用户执行读操作时由负载均衡转到从数据1或者2提供查询结果给用户。 

3、半同步复制实战实现

①环境准备:2台安装了相同版本mysql数据库的服务器

主服务器(pc1):192.168.30.11

从服务器(pc2):192.168.30.12

②首先关闭2台服务器的firewalld以及selinux,重置mysql密码为Admin@123

pc1、pc2执行:
systemctl  stop  firewalld.service 
setenforce 0
systemctl start mysqld
#开启数据库
grep password /var/log/mysqld.log
#在错误日志中找到mysql初始密码,如下图
mysql -uroot  -p'初始密码' 
#登录数据库
alter user root@'localhost'  identified by 'Admin@123';
quit;
#修改root默认密码并退出

③ 主节点:

rpm -ql mysql-community-server |grep semisync
#检查是否有semisnc
mysql -uroot -pAdmin@123 
#登录数据库
NSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
#永久安装semisync_master.so插件
quit
#退出数据库
vim  /etc/my.cnf
[mysqld]
server_id=100
log-bin=/data/mysql/mysql-bin
rpl_semi_sync_master_enabled=ON
rpl_semi_sync_master_timeout=3000
#修改此行,需要先安装semisync_master.so插件后,再重启,否则无法启动 开启半同步
#设置3s内无法同步,也将返回成功信息给客户端
mkdir /data/mysql/   -p
#建立binlog存放文件夹
chown mysql.mysql /data/ -R
#修改权限
systemctl restart mysqld
#重启服务
mysql -uroot -pAdmin@123 
#登录数据库
SET GLOBAL rpl_semi_sync_master_enabled=1; 
#临时修改变量
SET GLOBAL rpl_semi_sync_master_timeout = 3000;  
#超时长1s,默认值为10s
SHOW GLOBAL VARIABLES LIKE '%semi%';
grant replication slave on *.* to test@'192.168.30.%' identified by 'Admin@123';
#建立主从复制用户

④从节点: 

mysql -uroot -pAdmin@123
#登录数据库
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
#安装半同步复制插件
quit;
#退出数据库
vim /etc/my.cnf
#修改配置文件开启二进制日志
[mysqld]
server-id=101
log-bin=/data/mysql/mysql-bin
rpl_semi_sync_slave_enabled=ON 
#修改此行,需要先安装semisync_slave.so插件后,再重启,否则无法启动
mkdir /data/mysql/   -p
chown mysql.mysql /data/ -R
systemctl restart mysqld
#创建binlog存放文件夹并修改权限重启服务
mysql -uroot -pAdmin@123
#登录数据库
CHANGE MASTER TO
  MASTER_HOST='192.168.91.100',
  MASTER_USER='test',
  MASTER_PASSWORD='Admin@123',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='mysql-bin.000002',
  MASTER_LOG_POS=154;
#添加主服务器信息(ip用户名密码端口)以及开始主从复制位置(主服务器show master status查看)
start  slave;
#开启主从复制
show global status like '%semi%';
#查看主从复制状态

⑤验证结果:由于没有大数据演示结果,可以在未开始配从节点是创建一个库,创建时间会是3秒,原因是找从服务器同步没找到所以按超时时间返回结果给用户。 

猜你喜欢

转载自blog.csdn.net/weixin_67287151/article/details/129663433