MySQL主从复制重点知识整理

发布时间:2021-08-27 15:56:15 作者:chen
来源:亿速云 阅读:106
# 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         # 自动清理旧日志

3.2 从库配置(my.cnf)

[mysqld]
server-id = 2                # 区别于主库
relay_log = mysql-relay      # 中继日志位置
read_only = ON               # 设为只读(超级用户除外)
log_slave_updates = ON       # 级联复制时需要

3.3 建立复制链路

-- 主库创建复制账号
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;

四、高级特性与优化

4.1 GTID复制(MySQL 5.6+)

全局事务标识(Global Transaction Identifier): - 格式:source_id:transaction_id - 优点: - 简化故障恢复 - 自动定位复制位置 - 避免重复执行事务 - 启用方式:

  gtid_mode = ON
  enforce_gtid_consistency = ON

4.2 半同步复制

确保至少一个从库接收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;

4.3 延迟复制

人为设置从库延迟(用于误操作恢复):

CHANGE MASTER TO MASTER_DELAY = 3600;  # 延迟1小时

4.4 多线程复制

-- 基于库的并行复制(5.6)
slave_parallel_workers = 4

-- 基于逻辑时钟的并行复制(5.7+)
slave_parallel_type = LOGICAL_CLOCK
slave_parallel_workers = 8

五、监控与故障处理

5.1 关键监控命令

SHOW MASTER STATUS;          # 查看主库binlog位置
SHOW SLAVE STATUS\G          # 查看从库复制状态
SHOW PROCESSLIST;            # 查看复制线程

-- 复制延迟监控(Seconds_Behind_Master不完全准确)
SELECT 
  NOW() - MAX(ts) AS replica_lag 
FROM 
  mysql.replica_status;

5.2 常见故障处理

  1. 主键冲突

    • 检查表结构是否一致
    • 临时跳过错误:
      
      SET GLOBAL sql_slave_skip_counter = 1;
      START SLAVE;
      
  2. 网络中断

    • 检查Last_IO_Error字段
    • 重新配置CHANGE MASTER
  3. 数据不一致

    • 使用pt-table-checksum检测
    • 通过pt-table-sync修复

六、最佳实践建议

  1. 版本一致性:主从建议使用相同大版本MySQL
  2. 监控告警:对Seconds_Behind_Master和复制错误设置监控
  3. 定期校验:使用工具定期检查数据一致性
  4. 备份策略:即使有从库也需定期物理备份
  5. 故障演练:定期模拟主库故障测试切换流程

注:本文基于MySQL 8.0版本整理,部分参数在早期版本可能不同。生产环境建议结合官方文档进行配置。 “`

(全文约1350字,涵盖MySQL主从复制核心知识点)

推荐阅读:
  1. 整理C知识点--函数(重点)
  2. Java基础知识整理

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

mysql

上一篇:css3中background-size的用法

下一篇:JAVA的国际化机制是什么

相关阅读

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

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