原理:
MySQL主从复制是基于事件的复制机制。主服务器负责处理所有的写操作和事务,并将这些更改(如INSERT、UPDATE和DELETE)以事件的形式记录到二进制日志(binlog)中。从服务器则通过读取主服务器的二进制日志来获取数据更改信息,并将这些更改应用到自身的数据库中,从而保持与主服务器数据的一致性。
工作过程
主库记录日志:主库将数据变更写入 binlog。
从库连接主库:从库的 I/O 线程连接主库,请求 binlog。
传输日志:主库的 binlog dump 线程将 binlog 发送给从库。
从库应用中继日志:从库的 I/O 线程将收到的 binlog 写入 relay log,SQL 线程重放 relay log 中的操作。
基于binlog的主从同步
1.主库配置
[root@Master ~]# yum install -y mysql-server
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=1
[root@Master ~]# systemctl restart mysqld
#授权用户
mysql> create user rep@'192.168.1.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.1.%';
mysql> show master status; //查看主服务器状态
从库配置
#配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=2
[root@Slave1 ~]# systemctl restart mysqld
[root@Slave3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=3
[root@Slave3 ~]# systemctl restart mysqld
#设置参数,两个从库一样的配置
mysql> change master to
-> master_host='192.168.1.11',
-> master_user='rep',
-> master_password='123456',
-> master_log_file='binlog.000001',
-> master_log_pos=1640,
-> get_master_public_key=1;
#启动复制进程,两个都启动
mysql> start slave;
验证
#在主库创建一个数据库,看从库是否同步生成
mysql> create database test;
mysql> use test;
mysql> create table td1(id int(10),name varchar(20));
mysql> insert into td1 values (1,'张三'),(2,'李遂');
从库中
![](https://i-blog.csdnimg.cn/direct/f8b3ef7e590544d795b298b74b395690.png)