简述mysql主从复制原理及工作过程,配置一主两从并验证
MySQL内建的复制功能是构建大型,高性能应用程序的基础,通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行,复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器。
主从复制原理
主要基于MySQL二进制日志,主要包括三个线程(2个I/O线程,1个SQL线程)
1、Master将数据变化记录到二进制日志中;
2、Slave将Master的二进制日志拷贝到Slave的中继日志中;
3、Slave将中继日志中的事件在做一次,将数据变化,反应到自身(Slave)的数据库
详细步骤:
1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave
2、从库的IO线程和主库的dump线程建立连接。
3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求。
4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。
5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info中
6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge
配置一主两从验证
环境准备
准备三台Linux机器,ip地址分别为192.168.106.11,192.168.106.12,192.168.106.13
其中192.168.106.11设置为master,另外两台设置为slave
三台主机均需安装mysql。
注意:如果是其中一台主机安装了mysql进行克隆,那么三台主机mysql的uuid会重复,会导致后续配置不成功
方式一:基于binlog的主从同步
主库配置:
在配置文件里添加server_id
[root@openEuler-1 ~]# vim /etc/my.cnf
[root@openEuler-1 ~]# systemctl restart mysqld创建并授权用户访问
mysql> create user rep@'192.168.106.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.106.%';
查看
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000002 | 682 | | | |
+---------------+----------+--------------+------------------+-------------------+
从库配置:
在配置文件里添加server_id
[root@openEuler-2 ~]# vim /etc/my.cnf
[root@openEuler-2 ~]# systemctl restart mysqld.service
[root@openEuler-3 ~]# vim /etc/my.cnf
[root@openEuler-3 ~]# systemctl restart mysqld.service
分别在两台主机配置
mysql> change master to
-> master_host='192.168.106.11',
-> master_user='rep',
-> master_password='123456',
-> master_log_file='binlog.000002',
-> master_log_pos=682;
Query OK, 0 rows affected, 8 warnings (0.01 sec)
启动
mysql> start slave;
查看从库是否配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes两项均为Yes表示配置成功
方式二:基于gtid的主从同步配置
开启gtid
对三台主机分别进入配置文件添加
server_id=主机号
gtid_mode=ON
enforce-gtid-consistency=ON
[root@openEuler-1 ~]# systemctl restart mysqld #重启服务
主库配置:
创建并授权用户访问
mysql> create user rep@'192.168.106.%' identified with mysql_native_password by '123456';
mysql> grant replication slave on *.* to rep@'192.168.106.%';
#重新加载授权表
mysql> flush privileges;
从库配置:
分别在两台主机配置
mysql> change master to
-> master_host='192.168.106.11',
-> master_user='rep',
-> master_password='123456';
启动并查看从库状态
均为yes表示成功
验证
在主库创建数据库,在从库上查看是否同步创建成功。
从库同步创建db1成功,主从同步配置完成。