当前位置: 首页 > news >正文

MySQL 双机互备

文章目录

  • 前言
  • 一、环境准备
  • 二、核心配置步骤
    • 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.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。

http://www.jsqmd.com/news/449627/

相关文章:

  • 在线学籍管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • CDN安全防护体系的完整构建指南
  • OpenClaw前世今生与未来展望
  • 循环链表初识
  • 【CTFshow-pwn系列】03_栈溢出【pwn 056-057】详解:32位 与64位Shellcode 与 Linux 系统调用底层原理剖析
  • 2026徐汇宠物耳道内窥镜检查专家推荐,别错过!猫咪乳糜胸手术/狗狗绝育/宠物绝育,宠物耳道内窥镜检查专家选哪个 - 品牌推荐师
  • Qwen3-4B实战:手把手教你用纯文本模型解决日常办公问题
  • MiniCPM-o-4.5-nvidia-FlagOS快速上手:Ollama本地部署与模型管理对比
  • 【2025最新】基于SpringBoot+Vue的智慧党建系统管理系统源码+MyBatis+MySQL
  • 【ThreadLocal忘记清理把堆吃爆了:一次线上OOM救火到半夜】
  • 备课一半全耗在找素材上?老师用什么 AI 工具做课件素材,我对比后才知道差距
  • 中文语义检索新范式:GTE-Chinese-Large在无监督关键词扩展与主题建模中的创新应用
  • RexUniNLU零样本机器阅读理解教程:中文问答式信息抽取详细步骤
  • 企业级智慧学生校舍系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • DT7遥控器与DR16接收器
  • 小白努力学习技术,从1级升级开始 目前等级:13级(5/10)
  • 拒绝魔法值:用枚举/常量替代,Java代码更易维护
  • 基于瑞萨的血压测量仪电路实现
  • 《创业之路》-891- 法律的本质是利用国家的群体的力量,强制性约束自私的人性、打击残酷的兽性,维持社会的稳定。
  • HC04-Arduino UNO-LED开关
  • Qwen3-VL:30B模型应用:智能文档处理系统开发
  • 《创业之路》-892- 法律的本质是秩序,正义只是它的副产品
  • 【2026最新携程酒店爬虫分享】用Python批量爬取酒店评论,含回复内容一键保存Excel!
  • 企业级智能菜谱推荐系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • vsg 编译
  • 模拟化妆品保质期,输入开封时间,环境温度,预测有效成分衰减,提醒及时更换。
  • TS/JS多智能体开发实战:从单Agent到OpenClaw
  • 文昌美食推荐:南山萝卜煨牛排、脆皮烧鸡与蒜蓉开边虾的高性价比对比攻略
  • 万象熔炉·丹青幻境与ComfyUI工作流整合:可视化节点式创作
  • DeepSeek-OCR部署教程:HTTPS反向代理配置(Nginx)保障Web访问安全