MySQL 主从复制原理
MySQL 主从复制是一种数据同步技术,它通过将主服务器(Master)上的数据更改复制到一个或多个从服务器(Slave),来实现数据的冗余备份、读写分离等目的。主从复制的核心是二进制日志(Binary Log),主服务器将其上的数据更改记录到二进制日志中,从服务器则通过读取和执行这些日志中的操作来实现数据的同步。
工作过程:
-
主服务器记录数据更改:当主服务器上的数据发生更改时,这些更改会被记录到二进制日志中。
-
从服务器请求日志:从服务器上的 I/O 线程连接到主服务器,并请求二进制日志的内容。
-
主服务器发送日志:主服务器上的 binlog dump 线程读取二进制日志,并将这些日志发送给从服务器的 I/O 线程。
-
从服务器写入中继日志:从服务器的 I/O 线程将接收到的二进制日志内容写入到中继日志(Relay Log)中。
-
从服务器执行操作:从服务器上的 SQL 线程读取中继日志中的操作,并在从服务器上执行这些操作,从而实现数据的同步。
配置主服务器
修改主服务器的配置文件
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=your_database_name
重启 MySQL 服务
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=your_database_name
创建一个用于复制的用户,并授予必要的权限
CREATE USER 'replica'@'%' IDENTIFIED BY 'replica_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
FLUSH PRIVILEGES;
锁定数据库并获取二进制日志的位置
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
解锁数据库
UNLOCK TABLES;
配置从服务器
修改从服务器的配置文件
[mysqld]
server-id=2 # Slave1 的 ID,Slave2 应使用不同的 ID,如 3
relay-log=relay-bin
重启 MySQL 服务
导入主服务器的数据备份
配置从服务器以连接到主服务器
CHANGE MASTER TO
MASTER_HOST='master_host_ip',
MASTER_USER='replica',
MASTER_PASSWORD='replica_password',
MASTER_LOG_FILE='mysql-bin.xxxxxx', # 使用之前从主服务器获取的 File 值
MASTER_LOG_POS=xxxxxx; # 使用之前从主服务器获取的 Position 值
启动从服务器的复制进程
START SLAVE;
检查复制状态
SHOW SLAVE STATUS \G;