MySQL 的 主从同步机制(Replication)是一种数据复制技术,用于将一个 MySQL 数据库(主库,Master)的数据实时复制到一个或多个 MySQL 数据库(从库,Slave)。主从同步机制常用于实现读写分离、数据备份、高可用性和负载均衡。
一、主从同步的核心概念
- 主库(Master):
- 负责处理写操作(如 INSERT、UPDATE、DELETE)。
- 将写操作的日志(Binary Log)发送给从库。
- 从库(Slave):
- 负责接收主库的日志并重放(Replay),以保持与主库的数据一致。
- 可以处理读操作,分担主库的压力。
- 二进制日志(Binary Log):
- 主库将所有写操作记录到二进制日志中。
- 二进制日志是主从同步的基础。
- 中继日志(Relay Log):
- 从库将主库的二进制日志保存为中继日志,然后从中读取并重放。
- 同步线程:
- 主库的 Binlog Dump 线程:
- 负责将二进制日志发送给从库。
- 从库的 I/O 线程:
- 负责从主库读取二进制日志并写入中继日志。
- 从库的 SQL 线程:
- 负责读取中继日志并重放其中的 SQL 语句。
- 主库的 Binlog Dump 线程:
二、主从同步的实现原理
1. 主库的工作流程
- 写操作:
- 主库接收到写操作(如 INSERT、UPDATE、DELETE)。
- 记录二进制日志:
- 主库将写操作记录到二进制日志(Binary Log)中。
- 发送日志:
- 主库的 Binlog Dump 线程将二进制日志发送给从库。
2. 从库的工作流程
- 接收日志:
- 从库的 I/O 线程从主库读取二进制日志,并将其写入中继日志(Relay Log)。
- 重放日志:
- 从库的 SQL 线程读取中继日志,并重放其中的 SQL 语句,更新从库的数据。
- 数据一致性:
- 从库通过不断重放主库的日志,保持与主库的数据一致。
三、主从同步的配置步骤
1. 主库配置
- 启用二进制日志:
- 在 MySQL 配置文件(如
my.cnf
)中启用二进制日志:[mysqld] log-bin=mysql-bin server-id=1
- 在 MySQL 配置文件(如
- 创建同步用户:
- 在主库上创建一个用于同步的用户:
CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; FLUSH PRIVILEGES;
- 在主库上创建一个用于同步的用户:
- 查看主库状态:
- 查看主库的二进制日志状态,记录
File
和Position
:SHOW MASTER STATUS;
- 查看主库的二进制日志状态,记录
2. 从库配置
- 设置从库 ID:
- 在 MySQL 配置文件中设置从库的
server-id
(必须与主库不同):[mysqld] server-id=2
- 在 MySQL 配置文件中设置从库的
- 配置主库信息:
- 在从库上配置主库的连接信息:
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=12345;
- 在从库上配置主库的连接信息:
- 启动同步:
- 启动从库的同步线程:
START SLAVE;
- 启动从库的同步线程:
- 查看从库状态:
- 查看从库的同步状态:
SHOW SLAVE STATUS\G;
- 关注
Slave_IO_Running
和Slave_SQL_Running
,确保两者均为Yes
。
- 关注
- 查看从库的同步状态:
四、主从同步的模式
- 异步复制(默认模式):
- 主库提交事务后,不需要等待从库的确认。
- 性能较高,但可能存在数据丢失的风险。
- 半同步复制:
- 主库提交事务后,至少等待一个从库确认接收到日志。
- 在性能和一致性之间取得平衡。
- 全同步复制:
- 主库提交事务后,等待所有从库确认接收到日志。
- 数据一致性最高,但性能较低。
五、主从同步的应用场景
- 读写分离:
- 主库处理写操作,从库处理读操作,分担主库压力。
- 数据备份:
- 从库可以作为主库的实时备份。
- 高可用性:
- 主库故障时,可以快速切换到从库。
- 数据分析:
- 在从库上执行数据分析任务,避免影响主库性能。
六、总结
组件 | 说明 |
---|---|
主库 | 处理写操作,记录二进制日志,发送日志给从库。 |
从库 | 接收主库日志,重放日志,保持数据一致。 |
二进制日志 | 主库记录写操作的日志。 |
中继日志 | 从库保存主库日志的中间文件。 |
同步线程 | 主库的 Binlog Dump 线程,从库的 I/O 线程和 SQL 线程。 |
MySQL 的主从同步机制通过二进制日志和中继日志实现数据的实时复制,支持读写分离、数据备份和高可用性等场景。通过合理配置和优化,可以提升系统的性能和可靠性。
THE END
暂无评论内容