MySQL 主从复制原理及工作过程
MySQL 主从复制(Master-Slave Replication)是指通过复制数据使得一个主数据库的更改自动同步到一个或多个从数据库的机制。在主从复制架构中,主库负责处理所有的写操作和事务,从库则从主库获取更新,并应用这些更改。
主从复制原理:
主库负责处理所有写操作(INSERT、UPDATE、DELETE等),并将这些操作记录到 二进制日志(binlog)中。
从库通过 I/O 线程连接到主库,向主库请求二进制日志。
主库的 I/O 线程将日志发送给从库的 I/O 线程,从库将日志写入到自己的 中继日志(relay log)。
从库的 SQL 线程从中继日志中读取并执行日志中的 SQL 语句,以此更新自己的数据。
主从复制工作过程:
主库的变更操作被写入到 binlog。
从库通过 IO 线程将主库的 binlog 拉取下来并写入到本地的 relay log。
从库的 SQL 线程读取并执行这些日志中的 SQL 操作,以保持数据的一致性。
配置一主两从并验证
假设我们有三台机器:
主库:IP 192.168.234.136
从库1:IP 192.168.234.140
从库2:IP 192.168.234.141
主库
yum install -y mysql-server
vim /etc/my.cnf
server_id=1
systemctl enable --now mysqld
systemctl restart mysqld
mysql
create user rep@'192.168.234.%' identified with mysql_native_password by '123456';
grant replication slave on *.* to rep@'192.168.234.%';
show master status;
从库1
yum install -y mysql-server
vim /etc/my.cnf
server_id=2
systemctl enable --now mysqld
systemctl restart mysqld
mysql
change master to
master_user='rep',
master_host='192.168.234.136',
master_password='123456',
master_log_file='binlog.000001',
master_log_pos=978;
start slave
show slave status \G
从库2
yum install -y mysql-server
vim /etc/my.cnf
server_id=3
systemctl enable --now mysqld
systemctl restart mysqld
mysql
change master to
master_user='rep',
master_host='192.168.234.136',
master_password='123456',
master_log_file='binlog.000001',
master_log_pos=978;
start slave
show slave status \G
注意先关闭防火墙