GTID模式:GTID是事务的ID,唯一识别号,全局唯一。对于主从复制简单来说就是不需要管binlog日志和复制点,简化复制操作和降低复制集群维护的难度,但是只支持带事务的引擎和语句
半同步复制:5.7版本之后推出,介于同步复制和异步复制之间,既能保证数据一致,也能提高性能
我的运行环境:
centos7.4
mysql5.7.22
推荐一键安装脚本:https://oneinstack.com/
新装mysql初始化完成待操作
旧mysql数据库先把数据导入主、从服务,保证数据一致,等待操作
修改配置文件,/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
修改配置文件,/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
去主库操作下数据,看是否自动同步到了从库,如果同步了就主从复制成功
由于某些原因导致了复制失败、异常、或者需要重置从库复制功能
重置从库
登录从库的mysql控制台执行
# 先关闭从库复制
stop slave;
# 重置主库
reset master;
# 重置从库
reset slave;
# 开启从库复制
start slave;
重置主库
登录主库的mysql控制台执行
# 重置主库
reset master;
注意:所以操作需要在mysql不对外提供服务的前提下执行。