您好,登录后才能下订单哦!
# 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]
-- 示例语句
UPDATE users SET status=1 WHERE create_time>'2023-01-01';
特点: - 记录SQL语句原文 - 日志量小 - 不确定性函数可能导致数据不一致
# 二进制日志示例
BINLOG '
hA0yShMCAAAAMQAAUBAAAAAHoAAAAAAAEABnRlc3RpbmcABXVzZXJzADAw8CQwQA
hA0yShcCAAAALAAAAK4BAAAAAHoAAAAAAAEAAgAD//gEAAAABWJpbGz4BAAAAAV0
b20=
'/*!*/;
特点: - 记录行数据变更 - 日志量大但精确 - 5.7版本后默认模式
# 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
-- 半同步配置示例
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. 扩展方案对比
可根据需要增加具体版本的注意事项或云数据库的特殊配置说明。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。