前置条件: 相同网段下的两台win server 2019标准版, 网络与端口3306皆通, 都已解压免安装版的 MySql5.7.20, 且部署绝对路径完全相同, my.ini 文件完全相同
设第一台ip: 192.168.0.47, 设第二台ip: 192.168.0.49
一、配置步骤:
1. 修改增加47的my.ini文件如下, 保存并重启mysql服务
[mysqld]
# 配置主主互备,开启日志
log_bin = mysql-bin
# 配置唯一机器识别码
server-id = 1
2. 修改增加49的my.ini文件如下, 保存并重启mysql服务
[mysqld]
# 配置主主互备,开启日志
log_bin = mysql-bin
# 配置唯一机器识别码
server-id = 2
3. 给47和49分别加上一个专用于备份的账户, 并授予相应的权限
CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
4. 在47和49上分别查看当前的二进制日志文件名和位置, 记下来一会儿用
SHOW MASTER STATUS;
5. 先后操作配置slave
47配置如下, 以49为主库执行变更
CHANGE MASTER TO
MASTER_HOST='192.168.0.49',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='49记录的二进制日志文件名',
MASTER_LOG_POS=49记录的位置;
49配置如下, 以47为主库执行变更
CHANGE MASTER TO
MASTER_HOST='192.168.0.47',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='47记录的二进制日志文件名',
MASTER_LOG_POS=47记录的位置;
6. 配置过滤条件和日志过期时间
配置只同步某个库, 过滤该库某个表, 编辑my.ini, 添加修改如下, 修改完保存并重启mysql服务
如果需要多个库或过滤多个表, 换行重写即可
# 仅同步的数据库
replicate-do-db = dbtest
# 需要过滤的,不需要同步的数据表
replicate-ignore-table = dbtest.sys_config
# 日志过期时间,不想存储爆炸的话,一定要配,我这边是只留30天
expire_logs_days = 30
7. 各自启动从库slave
# 按照刚刚做好的配置启动从库
START SLAVE;
# 查看从库运行情况
SHOW SLAVE STATUS\G
8. 检查主主互备是否成功, 使用相关数据库管理客户端修改未被过滤或被过滤的表, 发现另一个库已同步修改
二、当发生同步错误时,主主互备会产生失败,此时需要重新配置一次
因为之前已经完成过ip和账密的配置,重新配置只需要配置master_log_file和master_log_pos两个参
1. 先把两个主主互备的mysql暂停同步
# 暂停备份
STOP SLAVE;
2. 先后操作配置slave
47配置如下, 以49为主库执行变更
CHANGE MASTER TO
MASTER_LOG_FILE='49记录的二进制日志文件名',
MASTER_LOG_POS=49记录的位置;
49配置如下, 以47为主库执行变更
CHANGE MASTER TO
MASTER_LOG_FILE='47记录的二进制日志文件名',
MASTER_LOG_POS=47记录的位置;
3. 各自启动从库slave
# 按照刚刚做好的配置启动从库
START SLAVE;
# 查看从库运行情况
SHOW SLAVE STATUS\G