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

MySQL 主备(Master-Slave)复制 的搭建

一、主备架构简介

  • Master(主库):负责处理所有写操作(INSERT/UPDATE/DELETE),并记录二进制日志(binlog)。
  • Slave(备库):从主库拉取 binlog,重放 SQL,保持数据同步。
  • 用途
    • 数据备份
    • 读写分离(读请求走备库)
    • 高可用基础

二、环境准备

节点ip地址角色
Node1192.168.1.10Master
Node2192.168.1.11Slave

确保两台机器网络互通,时间同步(可使用 ntp 或阿里云 NTP)。

三、配置主库(Master)

1. 修改配置文件 my.cnf

Ubuntu 路径:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
CentOS 路径:sudo nano /etc/my.cnf

[mysqld] 段添加以下内容:

[mysqld]
# 唯一服务器ID
server-id = 1# 开启二进制日志(核心)
log-bin = mysql-bin# 数据库名称(可选,多个用逗号分隔)
# binlog-do-db = mydb# 不同步的数据库(可选)
# binlog-ignore-db = mysql
# binlog-ignore-db = information_schema# 可选:设置 binlog 格式(推荐 ROW)
binlog-format = ROW# 可选:设置过期时间
expire-logs-days = 7
bind-address = 0.0.0.0

2. 重启 MySQL

sudo systemctl restart mysql

3. 创建用于复制的账号

登录 MySQL:mysql -u root -p

-- 创建复制用户(允许从 Slave 连接)
CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'repl_password';-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11';-- 刷新权限
FLUSH PRIVILEGES;

4. 查看主库状态(记录位置)

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |     154  |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

记下 File 和 Position,稍后在 Slave 上使用。

四、配置备库(Slave)

1. 修改配置文件 my.cnf

同样编辑 Slave 的 MySQL 配置文件,在 [mysqld] 中添加:

[mysqld]
# 唯一服务器ID(不能和 Master 相同)
server-id = 2# 开启中继日志
relay-log = mysql-relay-bin# 可选:只读模式(防止误写)
read_only = 1# 如果是多级复制,开启
# log-slave-updates = 1

2. 重启 MySQL

sudo systemctl restart mysql

3. 配置主从关系

进入Slave MySQL:

-- 停止可能存在的旧复制
STOP SLAVE;-- 配置主库信息
CHANGE MASTER TOMASTER_HOST='192.168.1.10',MASTER_USER='repl',MASTER_PASSWORD='repl_password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;-- 启动复制
START SLAVE;

MASTER_LOG_FILE 和 MASTER_LOG_POS 是在 Master 上 SHOW MASTER STATUS 得到的值

五、验证主从同步

1. 查看 Slave 状态

SHOW SLAVE STATUS\G

关键字段说明:

  • Slave_IO_Running: Yes → 成功拉取 binlog
  • Slave_SQL_Running: Yes → 成功执行 SQL
  • Seconds_Behind_Master:延迟时间(0 表示同步完成)

如果两个都是 Yes,说明主从同步正常。

六、测试数据同步

Master 上执行:

CREATE DATABASE IF NOT EXISTS testdb;
USE testdb;
CREATE TABLE t1 (id INT, name VARCHAR(20));
INSERT INTO t1 VALUES (1, 'zhangsan');

Slave 上执行:

SHOW DATABASES LIKE 'testdb';
USE testdb;
SELECT * FROM t1;

如果能看到数据,说明同步成功

七、主备切换(手动故障转移)

当 Master 宕机时,可手动将 Slave 提升为新 Master:

1. 在原 Slave 上执行:

-- 1. 停止复制
STOP SLAVE;-- 2. 查看当前状态(可选)
SHOW SLAVE STATUS\G
-- 确保已停止,且数据已同步完-- 3. 清除复制信息(非常重要)
RESET SLAVE ALL;-- 4. 设置为可写(取消只读)
SET GLOBAL read_only = OFF;-- 5. (可选)创建新复制用户,供未来 Slave 使用
CREATE USER 'repl'@'%' IDENTIFIED BY 'YourReplPassword123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

2.将原 Master 变为 Slave

-- 1. 重置自身状态
RESET MASTER;  -- 清除旧的 binlog(谨慎使用)
RESET SLAVE ALL;-- 2. 配置连接到新 Master
CHANGE MASTER TOMASTER_HOST='192.168.50.134',MASTER_USER='repl',MASTER_PASSWORD='YourReplPassword123!',MASTER_AUTO_POSITION=1;-- 3. 启动复制
START SLAVE;-- 4. 查看状态
SHOW SLAVE STATUS\G

确保 Slave_IO_Running: Yes, Slave_SQL_Running: Yes

http://www.xdnf.cn/news/17568.html

相关文章:

  • 使用 Vuepress + GitHub Pages 搭建项目文档(2)- 使用 GitHub Actions 工作流自动部署
  • Linux 信号处理标志sa_flags详解
  • visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE
  • [IOMMU]面向芯片/SoC验证工程的IOMMU全景速览
  • GoEnhance AI-AI视频风格转换工具
  • 【LLM实战|langgraph】langgrpah基础
  • Zabbix API自动化运维实战
  • dnSpy:设置断点
  • 【Python 工具人快餐 · 第 1 份】
  • 小米MiMo-VL技术报告解读
  • Docker容器
  • 【网络与爬虫 51】Scrapy-Cluster分布式爬虫集群:企业级大规模数据采集解决方案
  • 浅谈 VM 桥接模式:让虚拟机像真实电脑一样接入网络
  • openvela之STM32开发板部署
  • BMS三大领域:电池、楼宇与业务管理系统解析
  • VisionMoE本地部署的创新设计:从架构演进到高效实现
  • 102-基于Spark的招聘数据预测分析推荐系统
  • Android中RecyclerView基本使用
  • SpringBoot配置生效优先级
  • CPU缓存(CPU Cache)和TLB(Translation Lookaside Buffer)缓存现代计算机体系结构中用于提高性能的关键技术
  • Irix HDR Pro:专业级 HDR 图像处理软件
  • ubuntu 端口占用 但是找不到进程 与docker 容器镜像相关
  • rem:CSS中的相对长度单位
  • B.10.01.3-性能优化实战:从JVM到数据库的全链路优化
  • 莫比乌斯反演学习笔记
  • .htaccess 文件上传漏洞绕过总结
  • Delphi:TList/TObjectList 设计中的 Notify 设计范式
  • 供应链需求预测项目如何设定合理的KPI、准确率指标(十四)
  • Spring Boot 集成 Quartz 实现定时任务(Cron 表达式示例)
  • Spark02 - SparkContext介绍