MySQL的主从复制(Master-Slave replication)是一种数据库复制方式,主要用途是将一台MySQL服务器(主服务器,Master)上的数据实时地复制到其他一个或多个MySQL服务器(从服务器,Slave)上,实现数据分布和负载均衡。
MySQL主从复制的基本原理可以分为以下几个步骤:
-
二进制日志(Binary Log)记录:
- 主服务器上的所有数据变更(包括INSERT、UPDATE、DELETE等SQL语句或事务的提交)都会被记录到二进制日志中。每个变更都会记录一个事件(event),这些事件按发生的顺序排列。
-
日志索引文件更新:
- 主服务器上还维护一个二进制日志索引文件,它记录了所有二进制日志文件的名字。每次创建新的二进制日志文件时,索引文件都会更新。
-
从服务器连接并请求日志:
- 从服务器上的IO线程(I/O Thread)会连接到主服务器,并请求从上次复制停止的位置开始的二进制日志内容。
-
主服务器发送日志内容:
- 主服务器上的二进制日志转储线程(Binlog Dump Thread)会响应从服务器的请求,从二进制日志文件中读取指定位置之后的事件,然后发送给从服务器。
-
从服务器接收日志并写入中继日志:
- 从服务器的IO线程接收到主服务器发送的二进制日志事件后,将这些事件写入本地的中继日志(Relay Log)。
-
从服务器重放日志事件:
- 从服务器上的SQL线程(SQL Thread)会读取中继日志文件,将其中的事件按原来的顺序在本地重放(执行),从而使从服务器上的数据与主服务器上的数据保持一致。
-
错误处理与重试:
- 如果在复制过程中发生错误(如网络故障、数据库错误等),从服务器会尝试自动恢复并重试复制操作。如果错误无法自动恢复,复制过程可能会停止,并需要人工介入解决问题。