简述mysql 主从同步原理及其工作过程,配置一主两从并验证。
一、主从同步的原理:
1. Slave数据库会开启两个线程(I/O线程和SQL线程)。
I/O线程用于接收Master端的二进制日志(binlog),并将这些日志写入本地的relay log(中继日志)中。
SQL线程则读取本地的relay log,并执行其中的SQL语句,从而在Slave数据库上重放这些操作。
2. 当Master数据库进行了数据更改后,这些更改首先会被记录在binlog日志中。然后,Master数据库的Dump线程(也称为Binlog Dump线程)会将这些binlog日志推送给Slave数据库。
3. 在Slave数据库内,接收到的binlog日志会被写入relay log(中继日志)中。
4. Slave数据库中的SQL线程会读取relay log中的日志,并执行其中的SQL语句,从而在Slave数据库上重放这些操作,实现数据的同步。
二、基于binlog的主从同步
配置之前cat /var/lib/mysql/auto.cnf (两个机的内容不一样)
(1)主库操作
1.vim /etc/my.cnf.d /mysql-server.cnf:配置主配置文件,添加一个server_id
可以添加一条:log-bin=mysql-bin:用于手动添加mysql的日志存放信息
2.在数据库中创建用户,以及授权,修改master库的密码加密方式
3.查看主配置状态:show master status;
4.systemctl stip firewalld:关闭防火墙
5.setenforce 0:关闭selinux
(2)从库操作:show slave status \G;
1.vim /etc/my.cnf.d /mysql-server.cnf:配置主配置文件,添加一个server_id
2.在从mysql上进行部署,连接主库
注释:从库指向主库创建的host,用户名,密码,二进制文件,以及节点
3.start slave:开启主从
4.systemctl stop firewalld
5.setenforce 0
6.show slave status \G:检测是否成功
(3)测试:
主库创建数据库:create database master;
从库:
三、基于gtid的主从同步
前提:若是使用了binlog,则需要先暂停slave:stop slave
(1)主库操作
1.vi /etc/my.cnf.d/mysql-server.cnf
2.systemctl restart mysqld
(2)从库操作
1.vi /etc/my.cnf.d/mysql-server.cnf
测试是否开启
3.在数据库上进行跟主部署(关闭slave,配置内容,开启slave)
这里master_auto_position为 1 表示使用 GTID 自动定位。
四。如果仅想让主库进行操作数据,而从库仅读取操作:
vi /etc/my.cnf.d/mysql-server.cnf 进行添加内容
五。mysql的并行复制:
查看slave线程信息:show processlist;
默认情况下slave中使用的是sql单线程回放
在master中多用户读写,如果使用sql单线程回放那么会造成组从延迟严重
开启mysql的多线程回放可以解决以上问题
vi /etc/my.cnf.d/mysql-server.cnf 进行添加内容
效果展示: