目录
一、半同步复制
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秒,原因是找从服务器同步没找到所以按超时时间返回结果给用户。