MySQL 的主从复制详解

目录

1. 什么是 MySQL 主从复制?

2. 主从复制的工作原理

2.1 主从复制的基本流程

2.2 主从复制的组件

3. 主从复制的配置步骤

3.1 主服务器配置

3.2 从服务器配置

4. 主从复制的常见问题与解决方案

4.1 主从复制延迟

4.2 主从复制中断

4.3 主从数据不一致

5. 主从复制的优势与适用场景

5.1 优势

5.2 适用场景

6. 总结


1. 什么是 MySQL 主从复制?

MySQL 主从复制(Master-Slave Replication)是一种数据复制技术,允许将一个 MySQL 数据库服务器(主服务器)的数据复制到一个或多个 MySQL 数据库服务器(从服务器)。主从复制的主要目的是实现数据的冗余备份、读写分离、负载均衡以及高可用性。

2. 主从复制的工作原理

MySQL 主从复制的核心原理是基于二进制日志(Binary Log)和 relay log(中继日志)。主服务器将所有写操作记录到二进制日志中,从服务器通过读取主服务器的二进制日志,将这些操作应用到自己的数据库中,从而实现数据的同步。

2.1 主从复制的基本流程

  1. 主服务器记录二进制日志:主服务器将所有对数据库的写操作(如 INSERT、UPDATE、DELETE)记录到二进制日志(Binary Log)中。

  2. 从服务器连接主服务器:从服务器通过 I/O 线程连接到主服务器,并请求获取二进制日志的内容。

  3. 主服务器发送二进制日志:主服务器将二进制日志中的内容发送给从服务器。

  4. 从服务器写入中继日志:从服务器的 I/O 线程将接收到的二进制日志内容写入到本地的中继日志(Relay Log)中。

  5. 从服务器应用日志:从服务器的 SQL 线程读取中继日志中的内容,并将其中的 SQL 语句应用到从服务器的数据库中,从而实现数据的同步。

2.2 主从复制的组件

  • 主服务器(Master):负责处理客户端的写操作,并将这些操作记录到二进制日志中。

  • 从服务器(Slave):从主服务器获取二进制日志,并将其应用到自己的数据库中。

  • 二进制日志(Binary Log):记录主服务器上所有对数据库的写操作。

  • 中继日志(Relay Log):从服务器从主服务器获取的二进制日志会先写入中继日志,然后再由 SQL 线程应用到从服务器的数据库中。

  • I/O 线程:从服务器上的线程,负责从主服务器获取二进制日志并写入中继日志。

  • SQL 线程:从服务器上的线程,负责读取中继日志并应用其中的 SQL 语句。

3. 主从复制的配置步骤

3.1 主服务器配置

  • 修改主服务器的配置文件(通常是 my.cnf 或 my.ini):
[mysqld]
server-id=1  # 主服务器的唯一标识
log-bin=mysql-bin  # 启用二进制日志
binlog-format=ROW  # 设置二进制日志格式为 ROW
  • 重启 MySQL 服务
sudo systemctl restart mysql
  • 创建用于复制的用户

在主服务器上创建一个专门用于复制的用户,并授予复制权限。

CREATE USER 'repl'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
  • 获取主服务器的二进制日志位置

在主服务器上执行以下命令,记录当前的二进制日志文件名和位置。

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      107 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

 记下 File 和 Position 的值,后续在从服务器配置时会用到。

3.2 从服务器配置

  • 修改从服务器的配置文件

[mysqld]
server-id=2  # 从服务器的唯一标识,必须与主服务器不同
relay-log=mysql-relay-bin  # 启用中继日志
read-only=1  # 设置从服务器为只读模式
  • 重启 MySQL 服务
sudo systemctl restart mysql
  • 配置从服务器连接主服务器

在从服务器上执行以下命令,配置从服务器连接主服务器的信息。

CHANGE MASTER TO
MASTER_HOST='master_ip_address',  # 主服务器的 IP 地址
MASTER_USER='repl',  # 主服务器上创建的复制用户
MASTER_PASSWORD='password',  # 复制用户的密码
MASTER_LOG_FILE='mysql-bin.000001',  # 主服务器上的二进制日志文件名
MASTER_LOG_POS=107;  # 主服务器上的二进制日志位置
  • 启动从服务器的复制进程
START SLAVE;
  • 检查从服务器的复制状态
SHOW SLAVE STATUS\G;

在输出中,检查 Slave_IO_Running 和 Slave_SQL_Running 的值是否为 Yes,如果都为 Yes,则表示主从复制已成功启动。

4. 主从复制的常见问题与解决方案

4.1 主从复制延迟

问题描述:从服务器的数据同步速度跟不上主服务器,导致数据延迟。

解决方案

  • 优化主服务器的写操作,减少写入压力。

  • 增加从服务器的硬件资源,如 CPU、内存、磁盘 I/O 等。

  • 使用并行复制(Parallel Replication)功能,加快从服务器的数据同步速度。

4.2 主从复制中断

问题描述:主从复制过程中出现错误,导致复制中断。

解决方案

  • 检查从服务器的错误日志,找到具体的错误信息。

  • 根据错误信息进行修复,如跳过错误的 SQL 语句、重新同步数据等。

  • 如果问题无法解决,可以重新配置主从复制。

4.3 主从数据不一致

问题描述:主服务器和从服务器的数据不一致,导致查询结果不一致。

解决方案

  • 定期检查主从数据的一致性,可以使用工具如 pt-table-checksum

  • 如果发现数据不一致,可以使用 pt-table-sync 工具进行数据同步。

5. 主从复制的优势与适用场景

5.1 优势

  • 数据冗余备份:从服务器可以作为主服务器的备份,防止数据丢失。

  • 读写分离:可以将读操作分发到从服务器,减轻主服务器的压力。

  • 负载均衡:通过多个从服务器分担读操作,提高系统的整体性能。

  • 高可用性:当主服务器出现故障时,可以快速切换到从服务器,保证系统的可用性。

5.2 适用场景

  • 读写分离:适用于读多写少的应用场景,如电商网站、新闻网站等。

  • 数据备份:适用于需要定期备份数据的场景,如金融系统、医疗系统等。

  • 高可用性:适用于对系统可用性要求较高的场景,如在线交易系统、实时数据分析系统等。

6. 总结

MySQL 主从复制是一种非常实用的数据复制技术,能够有效提高系统的可用性、扩展性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值