您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# MySQL主从复制重点知识整理
## 一、主从复制概述
### 1.1 基本概念
MySQL主从复制(Replication)是指将一个MySQL数据库服务器(主库Master)的数据复制到另一个或多个MySQL服务器(从库Slave)的过程。主要特点包括:
- **异步复制**:默认工作模式,主库不等待从库确认
- **单向复制**:数据只能从主库流向从库
- **级联复制**:Slave可以作为其他Slave的Master
### 1.2 核心应用场景
- **读写分离**:主库写,从库读
- **数据备份**:实时热备份方案
- **高可用基础**:故障转移的基础架构
- **负载均衡**:分散读请求压力
- **数据分析**:在从库执行不影响业务的统计查询
## 二、复制原理与架构
### 2.1 三线程模型
| 线程类型 | 所属服务器 | 职责描述 |
|---------|-----------|---------|
| Binlog Dump | Master | 读取主库binlog并发送给Slave |
| I/O Thread | Slave | 接收Master的binlog并写入relay log |
| SQL Thread | Slave | 读取relay log并重放事件 |
### 2.2 数据流转过程
1. 主库将变更记录到二进制日志(binlog)
2. 从库I/O线程请求主库的binlog
3. 主库Binlog Dump线程推送日志到从库
4. 从库将日志写入中继日志(relay log)
5. 从库SQL线程重放relay log中的事件
### 2.3 重要日志文件
- **binlog**:主库的二进制日志,三种格式可选
- STATEMENT:记录SQL语句(5.7默认)
- ROW:记录行数据变化(8.0默认)
- MIXED:混合模式
- **relay log**:从库的中继日志,格式与binlog相同
- **master.info**:从库保存的主库连接信息(8.0后存入表)
- **relay-log.info**:从库执行的relay log位置信息
## 三、配置实践指南
### 3.1 主库配置(my.cnf)
```ini
[mysqld]
server-id = 1 # 必须唯一
log_bin = mysql-bin # 开启binlog
binlog_format = ROW # 推荐使用ROW格式
binlog_row_image = FULL # 记录完整的行信息
sync_binlog = 1 # 每次事务提交都刷盘
expire_logs_days = 7 # 自动清理旧日志
[mysqld]
server-id = 2 # 区别于主库
relay_log = mysql-relay # 中继日志位置
read_only = ON # 设为只读(超级用户除外)
log_slave_updates = ON # 级联复制时需要
-- 主库创建复制账号
CREATE USER 'repl'@'%' IDENTIFIED BY 'SecurePass123!';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
-- 从库配置主库信息(8.0+)
CHANGE MASTER TO
MASTER_HOST = 'master_host',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'SecurePass123!',
MASTER_PORT = 3306,
MASTER_AUTO_POSITION = 1; # GTID模式
-- 启动复制
START SLAVE;
全局事务标识(Global Transaction Identifier):
- 格式:source_id:transaction_id
- 优点:
- 简化故障恢复
- 自动定位复制位置
- 避免重复执行事务
- 启用方式:
gtid_mode = ON
enforce_gtid_consistency = ON
确保至少一个从库接收binlog后主库才提交:
-- 主库安装插件
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
-- 从库安装插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
-- 配置参数
SET GLOBAL rpl_semi_sync_master_enabled = 1;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
人为设置从库延迟(用于误操作恢复):
CHANGE MASTER TO MASTER_DELAY = 3600; # 延迟1小时
-- 基于库的并行复制(5.6)
slave_parallel_workers = 4
-- 基于逻辑时钟的并行复制(5.7+)
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8
SHOW MASTER STATUS; # 查看主库binlog位置
SHOW SLAVE STATUS\G # 查看从库复制状态
SHOW PROCESSLIST; # 查看复制线程
-- 复制延迟监控(Seconds_Behind_Master不完全准确)
SELECT
NOW() - MAX(ts) AS replica_lag
FROM
mysql.replica_status;
主键冲突:
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;
网络中断:
Last_IO_Error
字段数据不一致:
Seconds_Behind_Master
和复制错误设置监控注:本文基于MySQL 8.0版本整理,部分参数在早期版本可能不同。生产环境建议结合官方文档进行配置。 “`
(全文约1350字,涵盖MySQL主从复制核心知识点)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。