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

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.lryc.cn/news/615405.html

相关文章:

  • 每日五个pyecharts可视化图表-line:从入门到精通
  • 基于springboot+vue开发的校园食堂评价系统【源码+sql+可运行】【50809】
  • 计算机系统设计中都有什么任务~计算密集~IO密集~逻辑密集等
  • 通过 Docker 运行 Prometheus 入门
  • 如何在 Excel 中快速求和?【图文详解】Excel求和技巧,Excel求和公式大全,多种方式求和
  • 轻松Linux-5.进程控制
  • drippingblues靶机
  • Easysearch 冷热架构实战
  • 从 AI 到实时视频通道:基于模块化架构的低延迟直播全链路实践
  • Docker容器lnmp平台部署discuz论坛
  • 配送算法10 Batching and Matching for Food Delivery in Dynamic Road Networks
  • 算法篇----分治(快排)
  • Java 大视界 -- Java 大数据在智能医疗手术机器人操作数据记录与性能评估中的应用(390)
  • 【能碳建设1】用AI+开源打造物联网+能碳管理+交易SaaS系统的最短路径实施指南
  • Mac屏幕取色不准?探究原理和换算规则
  • C++四种类型转换
  • 97-基于Python的大众点评数据分析预测系统
  • react之React.cloneElement()
  • flex布局初体验
  • 低速CAN 高速CAN是否兼容?
  • react 常用组件库
  • 基于遗传优化的稀疏线阵最优排布算法matlab仿真
  • EPI2ME分析软件测试
  • day16 - CSS3新增属性
  • 一周学会Matplotlib3 Python 数据可视化-标注 (Annotations)
  • [IOMMU]基于 AMD IOMMU(AMD‑Vi/IOMMUv2)的系统化总结与落地方案
  • 【33】C#实战篇——点击按钮弹出指定路径对话框,选择指定类型文件;;;文件过滤器显示指定的一种文件,几种类型文件 同时显示
  • 云渲染的未来已来:渲酷云如何重新定义数字内容生产效率
  • 卫星遥感与AI大模型
  • 疏老师-python训练营-Day40训练和测试的规范写法