MySQL5.7主从复制+GTID模式+半同步复制AFTER_SYNC模式

2018-05-19
509
0
0

温馨提示:本文最后更新于 2023-07-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

> MySQL5.7主从复制+GTID模式+半同步复制AFTER_SYNC模式

HollowRock_EN-AU10983730949_1920x1080.jpg

GTID模式:GTID是事务的ID,唯一识别号,全局唯一。对于主从复制简单来说就是不需要管binlog日志和复制点,简化复制操作和降低复制集群维护的难度,但是只支持带事务的引擎和语句

半同步复制:5.7版本之后推出,介于同步复制和异步复制之间,既能保证数据一致,也能提高性能

我的运行环境:
centos7.4
mysql5.7.22

推荐一键安装脚本:https://oneinstack.com/

1.环境准备

新装mysql初始化完成待操作
旧mysql数据库先把数据导入主、从服务,保证数据一致,等待操作

2.操作主库

修改配置文件,/etc/my.cnf在[mysqld]之后添加配置

# 每个节点保证server-id不同
server-id = 1

# 主库同步配置
# GTID模式
gtid_mode=on
enforce_gtid_consistency=on
# 半同步模式,无数据丢失AFTER_SYNC模式
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000
rpl_semi_sync_master_wait_point=AFTER_SYNC
# binlog
# log_slave_updates允许下端接入slave
log_slave_updates=1
log_bin = mysql-bin
binlog_format = row
expire_logs_days = 7

登录mysql控制台mysql -uroot -p执行

# 安装主库半同步复制插件
install plugin rpl_semi_sync_master soname 'semisync_master.so';

# 检查安装
show global variables like 'rpl%';

# 创建备份账号,`@'%'`指ip白名单,%通配符。`密码`设置链接密码
grant replication slave on *.* to 'backup'@'%' identified by '密码';
# 刷新配置
flush privileges;

重启mysql服务 service mysql restart

3.操作从库

修改配置文件,/etc/my.cnf在[mysqld]之后添加配置

# 从库同步配置
# GTID模式
gtid_mode=on
enforce_gtid_consistency=on
# 半同步模式,无数据丢失AFTER_SYNC模式,从库
read_only=1
skip_slave_start=1
relay_log_recovery=1
rpl_semi_sync_slave_enabled=1
# binlog
# log_slave_updates允许下端接入slave
log_slave_updates=1
log_bin = mysql-bin
binlog_format = row
expire_logs_days = 7

登录mysql控制台mysql -uroot -p执行

# 安装从库半同步复制插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

重启mysql服务 service mysql restart 使配置生效

再次登录mysql控制台

# 设置要链接的主库信息
CHANGE MASTER TO MASTER_HOST='ip',MASTER_USER='用户名',MASTER_PASSWORD='密码',MASTER_AUTO_POSITION=1;

# 开启从库复制
start slave;

# 检查是否成功,2个YES即开启成功
show slave status \G

QQ截图20180519133810.png

去主库操作下数据,看是否自动同步到了从库,如果同步了就主从复制成功

异常问题解决

由于某些原因导致了复制失败、异常、或者需要重置从库复制功能

重置从库
登录从库的mysql控制台执行

# 先关闭从库复制
stop slave;
# 重置主库
reset master;
# 重置从库
reset slave;
# 开启从库复制
start slave;

重置主库
登录主库的mysql控制台执行

# 重置主库
reset master;

注意:所以操作需要在mysql不对外提供服务的前提下执行。


评论