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

MySQL 运维知识点(十四)---- 主从复制

一、 概述

1. 什么是主从复制?

主从复制是指将一台 MySQL 数据库服务器(主库 Master)的数据,复制到一台或多台 MySQL 数据库服务器(从库 Slave)的过程。

2. 主从复制的用途
用途说明
数据备份从库作为主库的热备份,是一种有效的备份方式
读写分离主库负责写操作,从库负责读操作,提升系统并发处理能力
高可用基础是构建高可用架构(如 MHA、MGR)的基础
数据分发将数据复制到不同的地理位置,供本地访问
升级测试在从库测试新版本 MySQL,不影响主库服务
3. 复制模式
  • 异步复制:主库执行完事务后立即返回,不等待从库接收确认(默认模式

  • 半同步复制:主库等待至少一个从库接收并写入 relay log 后才返回成功

  • 组复制:基于 Paxos 协议,实现多主复制(MySQL InnoDB Cluster)

二、 原理

1. 核心三线程架构
线程位置职责
Binlog Dump Thread主库读取主库的 binlog,发送给从库的 I/O Thread
I/O Thread从库连接主库,接收 binlog 数据,写入本地的 relay log
SQL Thread从库读取 relay log 中的事件,在从库上重放执行
2. 详细复制流程
主库 Master                            从库 Slave
┌─────────────────┐              ┌─────────────────┐
│                 │              │                 │
│ 1.事务提交       │              │                 │
│ 2.写入Binlog    │              │                 │
│                 │              │                 │
│ 3. Binlog Dump  │ ←──────────→ │ 4. I/O Thread   │
│    Thread       │   binlog事件 |                 │
│                 │              │                 │
│                 │              │ 5. 写入Relay Log│
│                 │              │                 │
│                 │              │ 6. SQL Thread   │
│                 │              │   读取Relay Log │
│                 │              │   并执行        │
└─────────────────┘              └─────────────────┘

步骤分解:

  1. 主库数据变更:主库上的事务提交后,会将数据变更记录到 Binary Log 中

  2. 从库请求数据:从库的 I/O Thread 向主库的 Binlog Dump Thread 发起请求

  3. 主库发送日志:主库的 Binlog Dump Thread 读取 binlog 事件发送给从库

  4. 从库接收日志:从库的 I/O Thread 接收 binlog 事件,写入本地的 Relay Log

  5. 从库重放日志:从库的 SQL Thread 读取 relay log 中的事件并重放执行

  6. 数据保持一致:从库数据与主库逐步保持一致

3. 重要文件说明
  • Binary Log:主库产生的包含所有数据变更的日志文件

  • Relay Log:从库接收主库 binlog 后写入的中转日志文件

  • master.info:从库保存的连接主库的配置信息

  • relay-log.info:从库记录的 relay log 应用位置信息

三、 搭建步骤

以下是基于传统异步复制的手动搭建流程。

1. 环境准备
  • 至少两台 MySQL 服务器(主库、从库)

  • 网络互通,防火墙开放 3306 端口

  • MySQL 版本建议一致或从库版本高于主库

2. 主库配置

① 修改主库配置文件 my.cnf

[mysqld]
# 服务器唯一ID
server-id = 1# 启用二进制日志,设置日志文件前缀
log-bin = mysql-bin# 需要复制的数据库(可选,不配置则复制所有库)
# binlog-do-db = mydb# 不需要复制的数据库(可选)
# binlog-ignore-db = mysql
# binlog-ignore-db = information_schema
# binlog-ignore-db = performance_schema# 设置binlog格式(推荐ROW)
binlog_format = ROW# 自动清理过期binlog(可选)
expire_logs_days = 7

② 重启主库 MySQL 服务

systemctl restart mysql

③ 创建复制专用用户

-- 在主库执行
CREATE USER 'repl'@'从库IP' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'从库IP';
FLUSH PRIVILEGES;

④ 查看主库状态并记录位置点

-- 在主库执行,记录 File 和 Position
SHOW MASTER STATUS;

重要:记录返回结果中的 File (mysql-bin.000001) 和 Position (154),从库配置时需要。

3. 从库配置

① 修改从库配置文件 my.cnf

[mysqld]
# 服务器唯一ID,必须与主库不同
server-id = 2# 启用中继日志
relay-log = mysql-relay-bin# 可选的从库配置
# read_only = ON        -- 设置从库为只读模式
# super_read_only = ON  -- 超级用户也只读

② 重启从库 MySQL 服务

systemctl restart mysql

③ 配置主从复制连接

-- 在从库执行
CHANGE MASTER TO
MASTER_HOST = '主库IP',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'repl_password',
MASTER_PORT = 3306,
MASTER_LOG_FILE = 'mysql-bin.000001',  -- 主库SHOW MASTER STATUS查到的File
MASTER_LOG_POS = 154,                  -- 主库SHOW MASTER STATUS查到的Position
MASTER_CONNECT_RETRY = 60;

④ 启动从库复制进程

-- 在从库执行
START SLAVE;  -- 在MySQL 8.0+中推荐使用 START REPLICA;

⑤ 检查从库复制状态

-- 在从库执行
SHOW SLAVE STATUS\G  -- 在MySQL 8.0+中推荐使用 SHOW REPLICA STATUS\G
4. 验证复制状态

检查以下关键字段:

  • Slave_IO_RunningYes (I/O Thread 运行状态)

  • Slave_SQL_RunningYes (SQL Thread 运行状态)

  • Seconds_Behind_Master0 (复制延迟秒数,0表示无延迟)

  • Last_IO_Error: 空 (无I/O错误)

  • Last_SQL_Error: 空 (无SQL执行错误)

四、 常用管理命令

-- 在从库执行的管理命令
STOP SLAVE;              -- 停止复制
START SLAVE;             -- 启动复制
RESET SLAVE ALL;         -- 重置复制配置(清除连接信息)-- 查看复制线程状态
SHOW PROCESSLIST;-- 跳过指定数量的错误(谨慎使用)
SET GLOBAL sql_slave_skip_counter = 1;

五、 常见问题与排查

  1. IO Thread 连接失败

    • 检查网络连通性

    • 验证复制用户权限

    • 确认主库防火墙设置

  2. SQL Thread 执行错误

    • 检查主从数据是否已存在不一致

    • 确认是否在从库手动写入了数据

    • 查看 Last_SQL_Error 字段获取具体错误信息

  3. 复制延迟

    • 检查从库服务器负载

    • 优化慢查询SQL

    • 考虑使用并行复制

http://www.dtcms.com/a/443224.html

相关文章:

  • Linux常用通配符大全含运行示例
  • 相城seo网站优化软件django企业级问答网站开发
  • (autode计算化学—atoms)AtomCollection原子集类
  • 主键索引和唯一性索引的区别与联系
  • 免备案域名是危险网站荣耀手机商城官方网
  • 电磁兼容试验标准:电快速脉冲EFT
  • 建立一个平台网站需要多少钱大学软件开发需要学什么
  • wordpress安装好了怎么登陆网站电影网站如何做长尾关键词
  • 苏州h5模板建站效果图
  • yy直播官网怀化网站优化多少钱
  • 浅聊一下TCP协议
  • 怎么建设微网站智能建造师证书
  • 网站询盘量制作网站需要什么语言
  • AI大事记8:深蓝与卡斯帕罗夫——符号主义 AI 的巅峰与局限(中)
  • 数据结构—双链表
  • 长沙公司网站建设上海专业网站制作公司
  • 黄冈网站免费投放平台免费下载计算机网站建设及管理
  • Tailwind CSS介绍(现代CSS框架,与传统CSS框架Bootstrap对比)Tailwind介绍
  • 网群企业网站管理系统哈尔滨快速建站专业定制
  • 做农家乐农产品旅游的网站黄南北京网站建设
  • wdcp网站打不开wordpress文章固定链接
  • C语言模拟面向对象编程方法之this指针
  • SAP杂记
  • 建设网站的意义作用是什么在哪个网站订酒店做申根签证
  • 微信商城网站建设视频宁波哪家建网站好
  • IMX6ULL学习笔记_Boot和裸机篇(2)--- SEGGER Embedded Studio基本相关配置
  • Linux--文件IO
  • wip: 正则regex
  • 一个网站建设花了10万元永久免费网站
  • 139、【OS】【Nuttx】【周边】效果呈现方案解析:strace 日志解析(五)