MySQL 主从复制原理及其工作过程
MySQL 主从复制(Master-Slave Replication)是一种数据同步技术,其中一个 MySQL 实例(主库)将其数据变更(插入、更新、删除)通过二进制日志(Binary Log)记录下来,然后将这些变更传递给一个或多个 MySQL 实例(从库),从库应用这些变更,确保从库的数据与主库一致。
原理:
- 主库(Master):主库将所有的数据库更改操作(如INSERT、UPDATE、DELETE等)记录到二进制日志文件(binary log)中,并将事务ID(GTID)与事件一起写入日志。主库上不会直接执行同步操作,而是将操作记录下来,供从库读取。
- 从库(Slave):从库通过从主库读取二进制日志,获取主库的变更,并将这些变更执行到自身的数据库上。复制过程中从库会有一个线程(I/O 线程)负责连接主库并读取二进制日志文件,另一个线程(SQL 线程)负责执行主库的变更。
工作过程:
- 主库操作:用户在主库上进行数据库操作,这些操作通过二进制日志记录下来。
- I/O 线程:从库上的 I/O 线程连接到主库,发送请求获取主库的二进制日志。
- 日志传输:I/O 线程从主库获取二进制日志事件并将其保存在从库的中继日志(relay log)中。
- SQL 线程:从库的 SQL 线程会从中继日志中读取事务,然后执行这些事务,将主库的数据更改同步到从库。
- 数据同步:从库通过不断地读取主库的二进制日志和执行相关的 SQL 语句,使得从库的数据与主库保持一致.
准备三台虚拟机192.168.1.11(Mater),192.168.1.12(slave-1)和192.168.1.13(slave-2)
创建复制用户 repl
: 在主库上创建复制用户 repl
,并授予 REPLICATION SLAVE
权限:
CREATE USER 'repl'@'%' IDENTIFIED BY 'Mysql123@';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;
从库1和从库2配置:
CHANGE MASTER TO
MASTER_HOST = '192.168.0.1',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'Mysql123@',
MASTER_AUTO_POSITION = 1;
START SLAVE;
配置完之后输入:SHOW SLAVE STATUS\G
说明表示复制进程正常运行。
验证主从同步
在主库执行操作: 在主库中插入一些数据:
CREATE DATABASE testdb; USE testdb; CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(100)); INSERT INTO users (id, name) VALUES (1, 'Alice'), (2, 'Bob');
在从库查询数据: 然后在从库中执行查询操作,确保数据已经同步:
USE testdb;
SELECT * FROM users;