MySQL 主从复制是一种经典的数据库复制技术,用于在多个数据库服务器之间同步数据,确保数据的高可用性和可靠性。主从复制的基本原理如下
1. 主库写操作
在主从复制架构中,有一个主数据库(Master)和一个或多个从数据库(Slave)。所有的数据写操作(如 INSERT
、UPDATE
、DELETE
)都在主数据库上执行。主库会将这些操作记录到其二进制日志(Binary Log)中
2. 二进制日志(Binary Log)
二进制日志是主库用于记录所有更改数据的操作日志。每当有数据变更时,MySQL 会将这次操作(包括语句、时间戳、事务相关信息等)记录到二进制日志中
3. 从库复制线程(I/O Thread 和 SQL Thread)
从库通过两个线程来执行复制过程:
- I/O Thread(I/O 线程):这个线程从主库获取二进制日志,并将其保存到从库的中继日志(Relay Log)中。
- SQL Thread(SQL 线程):这个线程读取中继日志中的内容,并在从库中执行这些SQL操作,从而使从库的数据与主库保持一致。
4. 数据同步
从库的SQL线程会按照主库的操作顺序执行中继日志中的SQL语句,确保从库的数据与主库的数据一致。这种复制过程通常是异步的,但也可以配置为半同步(Semi-Synchronous)模式。
5. 延迟与故障恢复
由于复制通常是异步进行的,主库的数据变更会有一个传播到从库的延迟时间。这种延迟通常很小,但在高负载或网络问题下可能会变长。主从复制还可以用于故障恢复,如果主库出现故障,可以将从库提升为新的主库。
优势与应用场景
- 读写分离:主库处理写操作,从库处理读操作,分散数据库负载。
- 高可用性:通过多个从库确保数据的冗余性,即使主库故障也能快速恢复。
- 备份与恢复:从库可以用于备份,避免主库负载过重。
注意事项
- 一致性:由于复制是异步的,存在从库短时间内数据不一致的可能性。
- 性能:主库上的写操作过多或从库复制延迟过大会影响性能。
- 配置复杂性:主从复制的配置与维护需要一定的经验和技术。
原理图: