一、主从复制的基本概念
-
主服务器(Master): 主服务器是数据写入的源头,处理应用程序的写入请求,同时生成二进制日志(Binary Log),记录所有数据更改操作。
-
从服务器(Slave): 从服务器通过读取主服务器的二进制日志,将其应用到自身,实现数据的同步。通常用于分担读操作的压力。
-
复制模式:
- 异步复制: 默认模式,从服务器异步读取主服务器的日志。
- 半同步复制: 主服务器等待至少一个从服务器确认收到日志后,才进行下一步操作。
- 全同步复制: 主从完全同步,性能开销较大,较少使用。
二、主从复制的配置步骤
以下以一个主服务器和一个从服务器为例,详细介绍配置流程。
1. 环境准备
- 主服务器IP:192.168.1.100
- 从服务器IP:192.168.1.101
- MySQL版本:8.0
确保两台服务器已安装MySQL,并能通过网络互相访问。
2. 主服务器配置
-
编辑主服务器的配置文件 在
my.cnf
(或my.ini
)中添加以下内容:[mysqld] server-id=1 # 唯一ID,必须不重复 log-bin=mysql-bin # 启用二进制日志 binlog-format=row # 推荐使用ROW模式
-
创建复制用户 在MySQL中执行以下命令:
CREATE USER 'repl'@'192.168.1.%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.%'; FLUSH PRIVILEGES;
-
获取二进制日志信息 使用以下命令查看当前二进制日志文件名和位置:
SHOW MASTER STATUS;
输出示例:
+------------------+----------+ | File | Position | +------------------+----------+ | mysql-bin.000001 | 120 | +------------------+----------+
记录
File
和Position
的值。
3. 从服务器配置
-
编辑从服务器的配置文件 在
my.cnf
(或my.ini
)中添加以下内容:[mysqld] server-id=2 # 唯一ID,与主服务器不同 relay-log=relay-bin # 中继日志
-
配置复制连接 登录从服务器的MySQL,并执行以下命令:
CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.1.100', SOURCE_USER='repl', SOURCE_PASSWORD='password', SOURCE_LOG_FILE='mysql-bin.000001', SOURCE_LOG_POS=120;
-
启动复制
START REPLICA;
-
检查复制状态 使用以下命令查看复制状态:
SHOW REPLICA STATUS\G;
关键字段解释:
Replica_IO_Running
: 应为Yes
。Replica_SQL_Running
: 应为Yes
。
4. 测试复制
在主服务器上创建一个测试数据库和表,并插入数据,观察从服务器是否同步成功。
-- 主服务器
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE test_table (id INT PRIMARY KEY, value VARCHAR(50));
INSERT INTO test_table VALUES (1, 'Hello World');
-- 从服务器
USE test_db;
SELECT * FROM test_table;
三、常见问题与解决
-
从服务器无法连接主服务器
- 检查网络连通性。
- 确保主服务器的复制用户授权正确。
-
复制延迟
- 检查从服务器的负载情况。
- 优化主服务器和从服务器的硬件或查询。
-
二进制日志已删除
- 设置合理的
expire_logs_days
参数,避免过早删除。 - 使用从服务器的
RESET REPLICA
重新初始化。
- 设置合理的
四、总结
MySQL主从复制是一种高效的架构设计,广泛应用于读写分离、数据备份和高可用性场景。通过合理的配置和维护,可以显著提高数据库系统的性能和可靠性。希望本文对您理解和实践MySQL主从复制有所帮助。