MySQL 双机互备的项目实践

 更新时间:2026年03月11日 08:27:51   作者:我已疯魔成性  
MySQL双机互备实现主主复制的高可用架构,通过配置两台服务器互为主从,实现数据实时同步和服务冗余,下面就来详细的介绍一下,感兴趣的可以了解一下

前言

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.cnf(CentOS/RHEL)或 /etc/mysql/my.cnf(Ubuntu/Debian),编辑配置文件并添加以下内容:

服务器 A(192.168.1.100)配置

server-id=1                                   #server的唯一标识
auto_increment_offset=1                       #自增id起始值
auto_increment_increment=2                    #每次自增数字
log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                         #binlog单文件最大值
replicate-do-db=mcsxx
replicate-do-db=mcsxx_config
replicate-ignore-table=mcsxx.sys_num         ##忽略不同步的表
replicate-ignore-table=mcsxx.sys_verify         ##忽略不同步的表
slave-skip-errors=all
# 启用GTID模式  
gtid_mode = ON  
# 强制GTID一致性检查  
enforce_gtid_consistency = ON  
# 可选:禁用日志校验(部分版本需添加)  
binlog_checksum = NONE 
log_slave_updates = ON # 必须开启,确保互备时事务日志传递
binlog_format = ROW # 推荐ROW模式

服务器 B(192.168.1.101)配置

server-id=2                                 #server的唯一标识
auto_increment_offset=2                       #自增id起始值
auto_increment_increment=2                    #每次自增数字
log-bin = mysql-bin                           #打开二进制功能,MASTER主服务器必须打开此项
max_binlog_size=1024M                         #binlog单文件最大值
replicate-do-db=mcsxx
replicate-do-db=mcsxx_config
replicate-ignore-table=mcsxx.sys_num         ##忽略不同步的表
replicate-ignore-table=mcsxx.sys_verify         ##忽略不同步的表
slave-skip-errors=all
# 启用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 mysql

2.创建复制专用账号

在两台服务器上分别创建用于复制的账号(权限最小化,只授予复制权限):

服务器 A 上执行(给服务器 B 授权):

CREATE USER 'repl'@'192.168.1.101' IDENTIFIED BY 'abcmima';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.101';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;  # 记录File和Position 

服务器 B上执行(给服务器 A 授权):

CREATE USER 'repl'@'192.168.1.100' IDENTIFIED BY 'abcmima';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.100';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;  # 记录File和Position 

3.删除日志文件(从当前开始同步,两边都删掉,然后重启数据库)

rm -rf mysql-bin.*
rm -rf localhost-relay-bin.*

4.配置互为从库

服务器 A 上配置(将服务器 B 设为主库)

RESET MASTER;
CHANGE MASTER TO MASTER_HOST='192.168.1.101', MASTER_USER='repl', MASTER_PASSWORD='abcmima', MASTER_AUTO_POSITION=1; 
START SLAVE;
show slave status\G

服务器 B上配置(将服务器 A 设为主库)

RESET MASTER;
CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl', MASTER_PASSWORD='abcmima', MASTER_AUTO_POSITION=1; 
START SLAVE;
show slave status\G

5.检查从库状态(关键,两台服务器都需要查询)

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。

到此这篇关于MySQL 双机互备的文章就介绍到这了,更多相关MySQL 双机互备内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql允许外网访问设置步骤

    Mysql允许外网访问设置步骤

    本文给大家分享Mysql允许外网访问设置步骤,通过简单的五步操作就可以实现mysql允许外围访问功能,非常不错,需要的朋友参考下吧
    2016-10-10
  • MySQL使用集合函数进行查询操作实例详解

    MySQL使用集合函数进行查询操作实例详解

    这篇文章主要介绍了MySQL使用集合函数进行查询操作,结合实例形式详细分析了MySQL使用集合函数进行的运算与查询操作使用技巧,需要的朋友可以参考下
    2018-06-06
  • MySQL库表名大小写的选择

    MySQL库表名大小写的选择

    一般在数据库使用规范中,我们都会看到这么一条:库名及表名一律使用小写英文。你有没有思考过,为什么推荐使用小写呢?库表名是否应该区分大小写呢?带着这些疑问,我们一起来看下本篇文章。
    2021-06-06
  • mysql 8.0.12 winx64解压版安装图文教程

    mysql 8.0.12 winx64解压版安装图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.12 winx64解压版安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • linux Xtrabackup安装及使用方法

    linux Xtrabackup安装及使用方法

    Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品
    2013-04-04
  • mysql 8.0.15 winx64解压版图文安装教程

    mysql 8.0.15 winx64解压版图文安装教程

    这篇文章主要为大家详细介绍了mysql 8.0.15 winx64解压版图文安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • MySQL中JSON字段数据类型详解

    MySQL中JSON字段数据类型详解

    JSON我相信大家都已经很熟悉了,但在 MySQL中,直至 5.7 版本中,才正式引入 JSON数据类型,下面这篇文章主要给大家介绍了关于MySQL中JSON字段数据类型的相关资料,需要的朋友可以参考下
    2022-06-06
  • MySQL数据库索引与事务从基础到实践指南

    MySQL数据库索引与事务从基础到实践指南

    本文全面介绍了MySQL索引与事务的关键知识,索引通过提升查询效率,降低写操作开销,确保数据一致性,合理创建和维护索引,选择合适的隔离级别,是优化数据库性能和保障数据一致性的关键,感兴趣的朋友跟随小编一起看看吧
    2025-12-12
  • 完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题

    完美转换MySQL的字符集 解决查看utf8源文件中的乱码问题

    本人转换过好多数据了,也用过了好多的办法,个人感觉最好用的就是使用MySQL命令导出导入中将字符集转换过去
    2011-11-11
  • mysql8连接不上问题及解决

    mysql8连接不上问题及解决

    这篇文章主要介绍了mysql8连接不上问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论