文章目录前言一、环境准备二、核心配置步骤1.修改两台服务器的 MySQL 配置文件2.创建复制专用账号3.删除日志文件(从当前开始同步两边都删掉然后重启数据库)4.配置互为从库5.检查从库状态关键,两台服务器都需要查询6.验证数据库7.常见问题与注意事项总结前言MySQL 双机互备也常被称为主主复制 / Master-Master 复制是一种高可用架构两台 MySQL 服务器互为主从既能各自提供读写服务又能实时同步数据避免单节点故障导致服务中断。下面我会用通俗易懂的方式一步步教你实现 MySQL 双机互备。一、环境准备假设你有两台服务器基础信息如下请替换为你的实际信息表格服务器 IP 地址 角色服务器 A 192.168.1.100 Master1/ Slave2服务器 B 192.168.1.101 Master2/ Slave1前置条件两台服务器安装相同版本的 MySQL推荐 5.7 或 8.0。两台服务器网络互通能 ping 通且 3306 端口开放。关闭防火墙 / SELinux或放行 3306 端口。两台服务器的 server-id 必须不同核心二、核心配置步骤1.修改两台服务器的 MySQL 配置文件MySQL 配置文件通常在 /etc/my.cnfCentOS/RHEL或 /etc/mysql/my.cnfUbuntu/Debian编辑配置文件并添加以下内容服务器 A192.168.1.100配置server-id1 #server的唯一标识 auto_increment_offset1 #自增id起始值 auto_increment_increment2 #每次自增数字 log-bin mysql-bin #打开二进制功能,MASTER主服务器必须打开此项 max_binlog_size1024M #binlog单文件最大值 replicate-do-dbmcsxx replicate-do-dbmcsxx_config replicate-ignore-tablemcsxx.sys_num ##忽略不同步的表 replicate-ignore-tablemcsxx.sys_verify ##忽略不同步的表 slave-skip-errorsall # 启用GTID模式 gtid_mode ON # 强制GTID一致性检查 enforce_gtid_consistency ON # 可选禁用日志校验部分版本需添加 binlog_checksum NONE log_slave_updates ON # 必须开启确保互备时事务日志传递 binlog_format ROW # 推荐ROW模式服务器 B192.168.1.101配置server-id2 #server的唯一标识 auto_increment_offset2 #自增id起始值 auto_increment_increment2 #每次自增数字 log-bin mysql-bin #打开二进制功能,MASTER主服务器必须打开此项 max_binlog_size1024M #binlog单文件最大值 replicate-do-dbmcsxx replicate-do-dbmcsxx_config replicate-ignore-tablemcsxx.sys_num ##忽略不同步的表 replicate-ignore-tablemcsxx.sys_verify ##忽略不同步的表 slave-skip-errorsall # 启用GTID模式 gtid_mode ON # 强制GTID一致性检查 enforce_gtid_consistency ON # 可选禁用日志校验部分版本需添加 binlog_checksum NONE log_slave_updates ON # 必须开启确保互备时事务日志传递 binlog_format ROW # 推荐ROW模式修改完成后重启两台服务器的 MySQL 服务# CentOS/RHEL 7 systemctl restart mysqld # Ubuntu/Debian systemctl restart mysql2.创建复制专用账号在两台服务器上分别创建用于复制的账号权限最小化只授予复制权限服务器 A 上执行给服务器 B 授权CREATE USER repl192.168.1.101 IDENTIFIED BY abcmima; GRANT REPLICATION SLAVE ON *.* TO repl192.168.1.101; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 记录File和Position服务器 B上执行给服务器 A 授权CREATE USER repl192.168.1.100 IDENTIFIED BY abcmima; GRANT REPLICATION SLAVE ON *.* TO repl192.168.1.100; FLUSH PRIVILEGES; SHOW MASTER STATUS; # 记录File和Position3.删除日志文件(从当前开始同步两边都删掉然后重启数据库)rm -rf mysql-bin.* rm -rf localhost-relay-bin.*4.配置互为从库服务器 A 上配置将服务器 B 设为主库RESET MASTER; CHANGE MASTER TO MASTER_HOST192.168.1.101, MASTER_USERrepl, MASTER_PASSWORDabcmima, MASTER_AUTO_POSITION1; START SLAVE; show slave status\G服务器 B上配置将服务器 A 设为主库RESET MASTER; CHANGE MASTER TO MASTER_HOST192.168.1.100, MASTER_USERrepl, MASTER_PASSWORDabcmima, MASTER_AUTO_POSITION1; START SLAVE; show slave status\G5.检查从库状态关键,两台服务器都需要查询SHOW SLAVE STATUS\G;关键检查项确保 Slave_IO_Running 和 Slave_SQL_Running 都是 Yes如果是 No查看 Last_Error 排查问题。6.验证数据库分别在两台服务器上插入修改数据另外一台服务器上数据库查看有没有变化。7.常见问题与注意事项主键冲突主主复制的核心是 auto_increment_increment 和 auto_increment_offset 配置必须保证两台服务器的自增 ID 不重叠。复制状态异常如果 Slave_IO_Running 为 No检查网络 / 账号密码如果 Slave_SQL_Running 为 No检查数据不一致如主键重复。只读设置如果想让其中一台仅作为备库只读可将其 read_only 1注意root 用户不受只读限制。故障切换如果一台服务器宕机可将业务流量切到另一台恢复后重新配置复制即可。总结MySQL 双机互备的核心是主主复制通过开启二进制日志、配置不同的 server-id 和自增步长实现两台服务器数据双向同步。关键配置项log-bin开启二进制日志、log_slave_updates 1允许从库写入二进制日志、auto_increment_increment/offset避免主键冲突。验证时需双向测试数据同步核心检查项是 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes。