mysql半同步主从复制
一、服务器版本
master: 5.7.42-log
slave:5.7.44
二、主机操作
1、安装半同步插件
# master
mysql > install plugin rpl_semi_sync_master soname 'semisync_master.so';
2、配置
[mysqld]
log-bin=mysql-bin
server-id=1
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 1000 # 1 second
rpl_semi_sync_master_wait_for_slave_count=1
binlog_format=ROW #复制模式
## 下面可选
max_binlog_size=100M #超过max_binlog_size或超过6小时会切换到下一序号文件
log_bin=/var/lib/mysql/mysql-bin.log #默认路径可修改
expire_logs_days= 7 #日志过期时间,设置为0则永不过期
binlog_cache_size=16M #二进制日志缓冲大小,通过show status like 'binlog_%';查看调整写入磁盘的次数,写入磁盘为0最好max_binlog_cache_size = 256M
relay_log_recovery = 1 #当slave从库宕机后,假如relay-log损坏了,
#导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,
#并且重新从master上获取日志,这样就保证了relay-log的完整性。
sync_binlog= 1 #二进制日志(binary log)同步到磁盘的频率
innodb_flush_log_at_trx_commit = 1 #每次事务提交将日志缓冲区写入log file,并同时flush到磁盘。
3、重启服务
systemctl restart mysqld
4、创建用户
CREATE USER `rep_user`@`从机ip` IDENTIFIED BY 'password';
GRANT Replication Slave ON *.* TO `rep_user`@`从机ip`;
5、数据备份
为保证数据一致,建议锁表后,查询主机状态,备份完成后再解锁
# 锁表
mysql > flush tables with read lock;
# 查询状态
mysql > show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 127| | | |
+------------------+----------+--------------+------------------+-------------------+
# 解锁
mysql > unlock tables;
三、从机操作
1、安装半同步插件
# slave
mysql >install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
2、配置
[mysqld]
server-id=2
rpl_semi_sync_slave_enabled = 1
## 忽略表(可选)
replicate-wild-ignore-table=mysql.*
replicate-wild-ignore-table=sys.*
3、重启服务
systemctl restart mysqld
4、恢复数据
5、配置同步参数
mysql > CHANGE MASTER TO MASTER_HOST='主机ip',MASTER_PORT=3306, MASTER_USER='rep_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=127;
6、启动同步线程
mysql > start slave;