跳到主要内容

MySQL 主从复制

介绍

MySQL主从复制是一种数据库复制技术,允许将一个MySQL服务器(主服务器)的数据复制到一个或多个MySQL服务器(从服务器)。这种技术常用于数据备份、负载均衡、故障恢复以及数据分析等场景。

主从复制的核心思想是:主服务器负责处理写操作(如INSERT、UPDATE、DELETE),并将这些操作的日志(称为二进制日志,Binary Log)发送给从服务器。从服务器接收到日志后,重放这些操作,从而保持与主服务器的数据一致性。

主从复制的工作原理

MySQL主从复制的工作流程可以分为以下几个步骤:

  1. 主服务器记录二进制日志:主服务器将所有写操作记录到二进制日志中。
  2. 从服务器连接主服务器:从服务器通过I/O线程连接到主服务器,并请求获取二进制日志。
  3. 主服务器发送二进制日志:主服务器将二进制日志发送给从服务器。
  4. 从服务器重放日志:从服务器的SQL线程读取接收到的二进制日志,并重放这些操作,从而更新从服务器的数据。

配置MySQL主从复制

1. 配置主服务器

首先,在主服务器上启用二进制日志,并配置一个唯一的服务器ID。

ini
# 主服务器配置文件 my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin

重启MySQL服务以使配置生效。

bash
sudo systemctl restart mysql

2. 创建复制用户

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

sql
CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;

3. 配置从服务器

在从服务器上配置一个唯一的服务器ID,并指定主服务器的信息。

ini
# 从服务器配置文件 my.cnf
[mysqld]
server-id=2

重启MySQL服务以使配置生效。

bash
sudo systemctl restart mysql

4. 启动复制

在从服务器上,使用以下命令启动复制过程。

sql
CHANGE MASTER TO
MASTER_HOST='主服务器IP',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=4;

START SLAVE;

5. 检查复制状态

在从服务器上,使用以下命令检查复制状态。

sql
SHOW SLAVE STATUS\G;

如果 Slave_IO_RunningSlave_SQL_Running 都为 Yes,则表示复制已成功启动。

实际应用场景

1. 数据备份

通过主从复制,可以将从服务器用作主服务器的实时备份。如果主服务器发生故障,可以快速切换到从服务器,减少数据丢失的风险。

2. 负载均衡

在高流量的应用中,可以将读操作分散到多个从服务器上,从而减轻主服务器的负载,提高系统的整体性能。

3. 数据分析

从服务器可以用于运行数据分析任务,而不会影响主服务器的性能。例如,可以在从服务器上运行复杂的查询或生成报表。

总结

MySQL主从复制是一种强大的数据库复制技术,适用于多种场景,如数据备份、负载均衡和数据分析。通过本文的学习,你应该已经掌握了主从复制的基本概念、工作原理以及配置步骤。

附加资源

练习

  1. 在你的本地环境中配置一个MySQL主从复制环境。
  2. 尝试在主服务器上插入一条数据,并检查从服务器是否同步了该数据。
  3. 模拟主服务器故障,尝试将从服务器提升为新的主服务器。
提示

如果你在配置过程中遇到问题,可以参考MySQL官方文档或社区论坛获取帮助。