- 概述
- 概念
- MySQL 主从复制是一种数据库架构技术,用于将一个 MySQL 数据库服务器(主服务器)的数据复制到一个或多个其他 MySQL 数据库服务器(从服务器)。主服务器处理所有的写入(INSERT、UPDATE、DELETE)操作,这些操作产生的变更会通过复制机制传递到从服务器,从服务器主要用于读取操作,从而实现读写分离,提高数据库系统的整体性能和可用性。
- 工作原理
- 二进制日志(Binlog):主服务器将所有更改数据的 SQL 语句(如 INSERT、UPDATE、DELETE)记录到二进制日志中。这个日志是复制的基础,它包含了数据库变更的事件序列。例如,当主服务器上执行了一个 INSERT 语句插入一条新记录时,这个操作会被记录在二进制日志中。
- 从服务器 I/O 线程:从服务器有一个 I/O 线程,它会连接到主服务器,请求获取主服务器二进制日志中的事件。然后将这些事件读取并存储到从服务器本地的中继日志(Relay Log)中。
- 从服务器 SQL 线程:从服务器的 SQL 线程会读取中继日志中的事件,并将这些事件对应的 SQL 语句在从服务器上执行,从而使从服务器的数据与主服务器保持同步。例如,如果主服务器的二进制日志中有一个 UPDATE 语句,从服务器的 SQL 线程会从中继日志中读取这个 UPDATE 语句并在从服务器上执行,更新相应的数据。
- 应用场景
- 读写分离:在高并发的 Web 应用中,读操作通常远远多于写操作。通过主从复制,可以将读请求分配到从服务器上,减轻主服务器的负载,提高系统的整体性能。例如,一个电商网站,商品详情页的浏览(读操作)可以由从服务器处理,而用户下单(写操作)则由主服务器处理。
- 数据备份和恢复:从服务器可以作为主服务器数据的备份。如果主服务器出现故障,在一定条件下,可以将从服务器提升为新的主服务器,快速恢复业务。同时,备份从服务器的数据也更加方便,不会影响主服务器的正常运行。
- 数据分析和报表:可以在从服务器上进行数据分析和报表生成等操作,这些操作通常是复杂的只读操作,不会对主服务器的实时业务产生影响。例如,企业可以在从服务器上运行复杂的统计查询来生成销售报表。
- 配置步骤
- 准备工作
- 确保有至少两台 MySQL 服务器,分别作为主服务器和从服务器。它们需要能够相互通信,通常在网络配置上要允许从服务器访问主服务器的 MySQL 服务端口(默认是 3306)。
- 安装好 MySQL 数据库软件,并启动 MySQL 服务。在配置主从复制之前,最好对两台服务器的 MySQL 进行基本的配置,如设置字符集、存储引擎等,确保它们能够正常运行。
- 主服务器配置
- 修改配置文件(my.cnf 或 my.ini):在主服务器上,打开 MySQL 的配置文件,找到并修改以下配置选项。
server - id
:为每个服务器设置一个唯一的标识号,主服务器的server - id
应该是一个较小的整数,例如1
。这个选项用于在复制架构中区分不同的服务器。log - bin
:启用二进制日志,指定二进制日志文件的路径和名称前缀。例如,log - bin = /var/log/mysql/mysql - bin
。这使得主服务器能够记录数据变更的事件。- 配置完成后,重启主服务器的 MySQL 服务,使配置生效。
- 创建复制用户:在主服务器的 MySQL 客户端中,创建一个用于从服务器连接并进行复制操作的用户。例如,使用以下 SQL 语句:
CREATE USER'repl_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO'repl_user'@'%'; FLUSH PRIVILEGES;
这里创建了一个名为repl_user
,密码为password
的用户,并且授予该用户REPLICATION SLAVE
权限,允许它从任何主机(%
表示所有主机,在实际生产环境中应该指定从服务器的 IP 地址)连接到主服务器进行复制操作。最后,刷新权限使设置生效。
- 获取主服务器状态信息:在主服务器的 MySQL 客户端中,执行以下 SQL 语句来获取主服务器的状态信息:
SHOW MASTER STATUS;
这个命令会显示主服务器二进制日志文件的名称(例如mysql - bin.000001
)和当前日志文件中的位置(Position
),从服务器在连接时需要这些信息来确定从哪里开始复制。
- 从服务器配置
- 修改配置文件(my.cnf 或 my.ini):在从服务器上,打开 MySQL 的配置文件,设置
server - id
为一个不同于主服务器的整数,例如2
。这个标识号用于区分从服务器与主服务器以及其他可能存在的从服务器。 - 配置从服务器连接主服务器:在从服务器的 MySQL 客户端中,执行以下 SQL 语句来配置从服务器连接主服务器:
CHANGE MASTER TO MASTER_HOST = '主服务器IP地址', MASTER_USER = 'repl_user', MASTER_PASSWORD = 'password', MASTER_LOG_FILE = '主服务器二进制日志文件名', MASTER_LOG_POS = 主服务器二进制日志位置;
需要将主服务器IP地址
、repl_user
、password
、主服务器二进制日志文件名
和主服务器二进制日志位置
替换为实际的值。这些值是从主服务器获取的相关信息。
- 启动从服务器复制进程:在从服务器的 MySQL 客户端中,执行以下 SQL 语句来启动复制进程:
START SLAVE;
- 检查从服务器状态:执行以下 SQL 语句来检查从服务器的复制状态:
SHOW SLAVE STATUS\G;
这个命令会显示从服务器复制的详细状态信息。重点关注Slave_IO_Running
和Slave_SQL_Running
这两个字段,它们的值应该都为Yes
,表示从服务器的 I/O 线程和 SQL 线程都在正常运行,主从复制正在顺利进行。如果出现问题,可以查看Last_Error
字段来获取错误信息,以便进行故障排除。