MySQL主从复制是一种将数据从一个MySQL服务器(主服务器)复制到一个或多个MySQL服务器(从服务器)的机制。这种复制机制可以用于负载均衡、备份、故障恢复等场景。
主要概念
- 主服务器(Master):提供数据的原始写入和更新操作。主服务器将其数据变更操作记录到二进制日志(binlog)中。
- 从服务器(Slave):从主服务器接收并应用数据变更操作,从而保持与主服务器的数据同步。
复制流程
-
主服务器配置:
- 启用二进制日志(binlog)。
- 配置复制的相关参数,如服务器ID。
- 创建一个用于从服务器连接的复制用户。
-
从服务器配置:
- 配置复制用户及主服务器的信息。
- 启动复制进程,连接到主服务器,并从二进制日志中读取数据变更事件。
- 将读取到的数据变更事件应用到从服务器的数据库中。
主要步骤
-
在主服务器上配置复制:
- 编辑MySQL配置文件(通常是
my.cnf或my.ini),添加以下设置:[mysqld] server-id=1 log-bin=mysql-bin - 重新启动MySQL服务使配置生效。
- 创建用于复制的用户:
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%'; FLUSH PRIVILEGES; - 获取当前二进制日志位置:
记下SHOW MASTER STATUS;File和Position的值。
- 编辑MySQL配置文件(通常是
-
在从服务器上配置复制:
- 编辑MySQL配置文件,添加以下设置:
[mysqld] server-id=2 - 重新启动MySQL服务使配置生效。
- 配置从服务器连接到主服务器并开始复制:
CHANGE MASTER TO MASTER_HOST='master_host_ip', MASTER_USER='replica_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', -- 从主服务器SHOW MASTER STATUS中获取 MASTER_LOG_POS= 4; -- 从主服务器SHOW MASTER STATUS中获取 START SLAVE; - 查看复制状态:
确认SHOW SLAVE STATUS\G;Slave_IO_Running和Slave_SQL_Running都显示为Yes,表示复制正常运行。
- 编辑MySQL配置文件,添加以下设置:
复制类型
-
基于语句的复制(Statement-Based Replication, SBR):
- 复制每个SQL语句到从服务器。
- 适用于只读的操作,但某些语句可能在不同的环境中有不同的效果。
-
基于行的复制(Row-Based Replication, RBR):
- 复制实际的行数据变更到从服务器。
- 更加准确,但会增加二进制日志的大小。
-
混合复制(Mixed-Based Replication, MBR):
- 结合了基于语句和基于行的复制,自动选择适合的复制模式。
复制延迟
- 延迟:从服务器可能会有短暂的延迟,这取决于主服务器和从服务器之间的数据传输和应用速度。可以通过
SHOW SLAVE STATUS来监控复制延迟。
复制的故障恢复
- 主服务器故障:如果主服务器发生故障,可以将从服务器提升为新的主服务器,配置新的从服务器连接到新的主服务器。
- 从服务器故障:可以重新启动复制进程,重新连接到主服务器并从最新的日志位置继续复制。
其他注意事项
- 数据一致性:确保主服务器和从服务器的数据库结构一致,以避免复制错误。
- 网络稳定性:复制过程依赖于网络连接的稳定性,网络问题可能导致复制延迟或中断。
- 安全性:使用强密码和限制复制用户的访问权限,以确保数据安全。
主从复制在MySQL中是一个强大而灵活的功能,适用于提高数据的可用性和扩展性。