网站安装源码,网页设计国外设计欣赏网站,红酒网站建设,营口大石桥网站建设一、MySQL主从复制原理
MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器#xff08;主服务器#xff0c;Master#xff09;复制到一个或多个 MySQL 数据库服务器#xff08;从服务器#xff0c;Slave#xff09;的技术。以下简述其原理#xff0c;主要包含三个核…一、MySQL主从复制原理
MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器主服务器Master复制到一个或多个 MySQL 数据库服务器从服务器Slave的技术。以下简述其原理主要包含三个核心组件和三个主要步骤
核心组件 二进制日志Binary Log位于主服务器上主服务器会将所有对数据库进行更改的操作如 INSERT、UPDATE、DELETE 等以二进制的形式记录到二进制日志文件中。这些日志记录了数据修改的具体内容和执行顺序是主从复制的基础数据来源。 中继日志Relay Log存在于从服务器上从服务器通过 I/O 线程从主服务器的二进制日志中读取更新事件并将这些事件写入到本地的中继日志文件中。中继日志起到了缓存和中转的作用确保从服务器能够按顺序处理主服务器的更新。 SQL 线程从服务器上的 SQL 线程负责读取中继日志中的事件并将这些事件在从服务器上重新执行一遍从而实现主从数据的同步。
工作步骤
1. 主服务器记录二进制日志
当主服务器上发生数据更改操作如插入、更新、删除数据时MySQL 会将这些更改操作记录到二进制日志中。二进制日志以事件Event的形式存储每个事件对应一个具体的数据库更改操作。例如当执行一条 INSERT 语句向表中插入数据时主服务器会将该 INSERT 操作作为一个事件记录到二进制日志中。
2. 从服务器读取主服务器二进制日志
从服务器上有一个 I/O 线程它会与主服务器建立连接并请求主服务器发送其二进制日志。主服务器接收到请求后会将二进制日志中的更新事件发送给从服务器的 I/O 线程。从服务器的 I/O 线程将接收到的更新事件写入到本地的中继日志中。
3. 从服务器执行中继日志中的事件
从服务器上的 SQL 线程会不断地监控中继日志当发现中继日志中有新的事件时会按照事件的顺序依次读取并执行这些事件。例如如果中继日志中记录了一个 INSERT 事件SQL 线程会在从服务器的相应表中执行相同的 INSERT 操作从而保证从服务器的数据与主服务器的数据一致。
二、MySQL主从复制步骤
注意firewall-cmd和getenforce处于关闭状态
1、基于binlog的主从同步
Master配置
[rootopenEuler-1 ~]# yum install -y mysql-server#配置文件主机克隆注意//三台主从库的id必须不同
#查看命令 vim /var/lib/mysql/auto.cnf[rootopenEuler-1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id1
[rootopenEuler-1 ~]# systemctl restart mysqld#授权用户
mysql create user rep192.168.159.% identified with mysql_native_password by MySQL123;
mysql grant replication slave on *.* to rep192.168.159.%;
mysql show master status; //查看主服务器状态,日志用于从服务器同步position是当前定位
Slave配置
#配置文件
[rootopenEuler-2 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[rootopenEuler-2 ~]# systemctl restart mysqld[rootopenEuler-3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[rootopenEuler-3 ~]# systemctl restart mysqld
[rootopenEuler-3 ~]##设置复制参数两个Slave一样的配置
mysql change master to- master_host192.168.159.133,- master_userrep,- master_passwordMySQL123,- master_log_filebinlog.000004,- master_log_pos1565;
Query OK, 0 rows affected, 9 warnings (0.03 sec)#启动复制进程两个Slave都启动
mysql start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)检查从库状态
mysql show slave status \G2、 基于gtid的主从同步配置
准备工作停止从库的复制
stop slave Master配置
#修改配置文件
[rootMaster ~]# vim /etc/my.cnf.d/mysql-server.cnf
#在最后添加
gtid_modeON
enforce-gtid-consistencyON#重启MySQL服务
[rootMaster ~]# systemctl restart mysqld.service#重置二进制日志和GTID
mysql reset master;#创建用户授予权限
mysql create user rep192.168.159.% identified with mysql_native_password by MySQL123;
mysql grant replication slave on *.* to rep192.168.159.%;#重新加载授权表
mysql flush privileges;
Slave配置
#修改配置文件
[rootSlave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
gtid_modeON
enforce-gtid-consistencyON#重启服务
[rootSlave1 ~]# systemctl restart mysqld.service#配置连接到主库
mysql change replication source to- source_host192.168.159.133,- source_port3306,- source_userrep,- source_passwordMySQL123,- source_auto_position1;mysql start replica; 检查从库状态
mysql show slave status \G