一、原理
MySQL主从复制是基于事件的复制机制,核心是将主服务器上的数据更改(如插入、更新、删除等)复制到从服务器上。这一过程主要依赖于二进制日志(Binary Log)。
- 二进制日志(Binary Log):主服务器记录所有对数据库的更改(如INSERT、UPDATE、DELETE操作)到二进制日志中。该日志是基于事件的,记录了对数据库的所有修改操作。
二、工作过程
主从复制是一个异步的过程,其中涉及三个关键的线程:主服务器的IO线程、从服务器的IO线程和从服务器的SQL线程。具体的工作流程如下:
- 主服务器记录日志:所有对数据库的数据更改都会记录到主服务器的二进制日志中。
- 从服务器请求日志:从服务器的IO线程定期向主服务器请求二进制日志的更新。
- 主服务器发送日志:主服务器收到从服务器IO线程的日志请求后,其IO线程会将二进制日志内容以及位置(position)返回给从服务器IO线程。
- 从服务器写入中继日志:从服务器收到二进制日志内容后,将其写入本地的中继日志(Relay Log)中,并创建一个文件记录主服务器的信息,包括IP地址、用户名、密码、二进制日志名称和位置。
- 从服务器执行日志:从服务器的SQL线程实时监控中继日志的内容是否有更新,解析文件内容生成SQL语句,并在从服务器的数据库中执行这些操作,从而实现数据同步。
在这个过程中,主服务器负责处理所有的写操作和事务,而从服务器则通过读取主服务器的二进制日志来获取数据更改信息,并将这些更改应用到自身的数据库中。
前置条件:mysql服务存在并且建议版本相同
在这里我准备了三台设备,IP分别为192.168.75.141/142/143
其中将141作为主,142和143作为从
三、基于binlog的主从同步
主库配置:
1、配置server_id
vim /etc/my.cnf
2、启动mysql服务
systemctl enable --now mysqld
3、创建一个授权用户
create user rep@'192.168.75.%' identified with mysql_native_password by '123456';
用户授权
grant replication slave on *.* to rep@'192.168.75.%';
4、查看当前 binlog日志名和 position
由于当前环境下没有自主创建的数据库,则不需要备份。以上就是主库的配置
从库配置:
1、前两步与从库相同,在/etc/my.cnf 下写入server_id 注意id不能相同
2、在从库上配置
3、开启主从
4、查看状态,有两个yes则为成功
至此主从配置完成
验证方法 :在主库中创建一个数据库,查看从库中是否存在
主库:
从库:
由此可见主从同步创建成功
四、基于gtid的主从同步配置
1、与binlog相似,在/etc/my.cnf 下写入:
gtid_mode=ON
enforce-gtid-consistency=ON
重启数据库
systemctl restart mysqld
2、从库操作与主库相同 写入并重启mysql服务
3、检查gtid是否生效
4、在主库中查看binlog日志名和position
5、从库配置:(两个从库配置相同,如果是在第一个方法的基础上做此方法,需要事先停止主从服务)
stop slave;
检查配置是否成功
验证:主库创建名为gt1的数据库
检查从库是否存在
从库存在则证明配置成功。