当前位置: 首页 > 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.dtcms.com/a/323574.html

相关文章:

  • SOLIDWORKS 2025对工具栏等进行了重新布局和优化
  • GoEnhance AI-AI视频风格转换工具
  • gRPC 全面解析与实战 —— 从原理到同步/异步开发全攻略
  • Linux系统编程——进程地址空间
  • GM3568JHF:FPGA+ARM异构开发板环境搭建教程
  • 嵌入式学习day23-shell命令
  • Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)
  • 【Python 高频 API 速学 ②】
  • 【线程池】压测确定线程池合适的参数
  • 【js】判断异步函数的返回值要加await
  • 使用LangGraph从零构建多智能体AI系统:实现智能协作的完整指南
  • 计算机系统设计中都有什么任务~计算密集~IO密集~逻辑密集等
  • 提示条贴合右侧边栏
  • java web项目入门了解
  • 天地图,cesium,leaflet
  • java练习题:数字位数
  • Windows下使用PyInstaller打包PyQt项目
  • 第15届蓝桥杯Scratch图形化省赛中级组2024年8月24日真题
  • 4深度学习Pytorch-神经网络--损失函数(sigmoid、Tanh、ReLU、LReLu、softmax)
  • Linux-JSON Schema
  • Java类和对象课上练习题目设计
  • LLM 的向量的方向表示语义,向量长度表示什么
  • Docker容器lnmp平台部署discuz论坛
  • 工具类-高效集合差异计算工具DiffWrapper
  • visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE
  • C++入门自学Day7-- String类的自实现
  • Adapting Vision-Language Models Without Labels A Comprehensive Survey
  • RWKV与VRWKV
  • Filter,Interceptor拦截器-登录校验
  • visual studio 字体设置