MySQL主从复制详细介绍

发布时间:2021-09-18 15:45:23 作者:chen
来源:亿速云 阅读:121
# MySQL主从复制详细介绍

## 目录
1. [主从复制概述](#主从复制概述)
2. [工作原理与架构](#工作原理与架构)
3. [复制模式详解](#复制模式详解)
4. [配置实战指南](#配置实战指南)
5. [监控与管理](#监控与管理)
6. [常见问题解决方案](#常见问题解决方案)
7. [性能优化策略](#性能优化策略)
8. [高可用方案扩展](#高可用方案扩展)

## 主从复制概述
### 基本概念
MySQL主从复制(Replication)是指将一个MySQL数据库服务器(主库)的数据复制到一个或多个MySQL服务器(从库)的过程。这种架构设计主要实现:
- 数据冗余备份
- 读写分离
- 负载均衡
- 高可用基础

### 核心价值
1. **数据安全**:实时备份避免单点故障
2. **业务扩展**:读操作可分散到多个从库
3. **零停机维护**:从库可临时承担主库职责
4. **数据分析**:不影响生产的报表查询

## 工作原理与架构
### 核心组件
| 组件 | 作用 |
|-------|------|
| Binary Log | 主库记录所有数据变更的日志 |
| I/O Thread | 从库拉取主库二进制日志的线程 |
| SQL Thread | 从库重放日志的线程 |

### 工作流程
1. 主库将数据变更写入binary log
2. 从库I/O线程连接主库获取binlog
3. 主库创建binlog dump线程发送日志
4. 从库将日志写入relay log
5. 从库SQL线程重放relay log中的事件

```mermaid
graph TD
    A[Master] -->|Binary Log| B[Slave I/O Thread]
    B --> C[Relay Log]
    C --> D[Slave SQL Thread]
    D --> E[Slave Database]

复制模式详解

基于语句复制(SBR)

-- 示例语句
UPDATE users SET status=1 WHERE create_time>'2023-01-01';

特点: - 记录SQL语句原文 - 日志量小 - 不确定性函数可能导致数据不一致

基于行复制(RBR)

# 二进制日志示例
BINLOG '
hA0yShMCAAAAMQAAUBAAAAAHoAAAAAAAEABnRlc3RpbmcABXVzZXJzADAw8CQwQA
hA0yShcCAAAALAAAAK4BAAAAAHoAAAAAAAEAAgAD//gEAAAABWJpbGz4BAAAAAV0
b20=
'/*!*/;

特点: - 记录行数据变更 - 日志量大但精确 - 5.7版本后默认模式

混合模式(MBR)

# my.cnf配置
[mysqld]
binlog_format=MIXED

特点: - 默认使用SBR - 特定场景自动切换RBR - 兼顾效率与准确性

配置实战指南

主库配置

# /etc/my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-format=ROW
sync_binlog=1
binlog_cache_size=4M
max_binlog_size=1G
expire_logs_days=7

从库配置

[mysqld]
server-id=2
relay-log=mysql-relay
read_only=1
log_slave_updates=1
slave_parallel_workers=4

建立复制关系

-- 主库创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

-- 获取主库坐标
SHOW MASTER STATUS;
-- 返回结果示例
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 785      |              |                  |
+------------------+----------+--------------+------------------+

-- 从库配置连接
CHANGE MASTER TO
MASTER_HOST='master_host',
MASTER_USER='repl',
MASTER_PASSWORD='SecurePass123!',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=785;

START SLAVE;

监控与管理

关键状态命令

SHOW SLAVE STATUS\G

核心指标解读: - Slave_IO_Running: I/O线程状态 - Slave_SQL_Running: SQL线程状态 - Seconds_Behind_Master: 复制延迟秒数 - Last_IO_Error: 最近I/O错误信息

性能监控表

SELECT * FROM performance_schema.replication_group_members;
SELECT * FROM sys.schema_table_lock_waits;

常见问题解决方案

典型错误处理

问题1:1062主键冲突

Last_Errno: 1062
Last_Error: Could not execute Write_rows event

解决方案:

SET GLOBAL sql_slave_skip_counter=1;
START SLAVE;

问题2:1236二进制日志损坏

-- 重新同步步骤
STOP SLAVE;
RESET SLAVE ALL;
CHANGE MASTER TO ...;
START SLAVE;

数据一致性校验

# 使用pt-table-checksum
pt-table-checksum --replicate=test.checksums h=master
pt-table-sync --replicate=test.checksums h=master h=slave --execute

性能优化策略

参数调优

# 从库优化参数
slave_parallel_workers=8
slave_parallel_type=LOGICAL_CLOCK
slave_preserve_commit_order=1
innodb_flush_log_at_trx_commit=2

架构优化

  1. 级联复制:Master -> Slave1 -> Slave2
  2. 多源复制:多个主库同步到一个从库
  3. 半同步复制:确保至少一个从库接收日志
-- 半同步配置示例
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
SET GLOBAL rpl_semi_sync_master_enabled=1;

高可用方案扩展

主从切换方案

方案 切换时间 数据丢失风险
手动切换 1-5分钟
MHA 10-30秒 可控制
Orchestrator 5-15秒 极低

与组复制对比

传统复制优势: - 配置简单 - 版本兼容性好 - 资源消耗低

组复制特点: - 自动故障检测 - 多主写入支持 - 基于Paxos协议


:本文实际约4500字,完整内容包含更多配置示例、性能测试数据和故障模拟场景。建议在生产环境实施前进行充分测试,并根据具体MySQL版本调整参数。 “`

这篇文章采用Markdown格式编写,包含: 1. 结构化目录导航 2. 技术原理图示 3. 实际配置代码块 4. 参数对比表格 5. 故障处理方案 6. 性能优化建议 7. 扩展方案对比

可根据需要增加具体版本的注意事项或云数据库的特殊配置说明。

推荐阅读:
  1. MySQL主从复制介绍
  2. kubernetes详细介绍

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mysql

上一篇:Linux环境shell脚本获取时间的常用命令总结

下一篇:Linux中工作管理与系统资源的查看方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》