自学内容网 自学内容网

MySQL主从同步

1、MySQL主从同步简介

MySQL内建的复制功能是构建大型,高性能应用程序的基础 
通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍

复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

1.1、MySQL支持的复制类型

基于语句(statement)的复制 在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。 基于行(row)的复制 把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。 混合型(mixed)的复制 默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

1.2、为什么要做主从复制

容灾备份 数据分布 负载平衡 读写分离 提高并发能力

1.3、主从复制原理

主要基于MySQL二进制日志 主要包括三个线程(2个I/O线程,1个SQL线程)

1、MySQL将数据变化记录到二进制日志中;
2、Slave将MySQL的二进制日志拷贝到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

1.4、MySQL复制常用的拓扑结构

主从类型(Master-Slave) 主主类型(Master-Master) 级联类型(Master-Slave-Slave)

2、MySQL的主从同步操作

2.1、基于binlog的主从同步

环境准备:

我这里准备了三台open-Euler系统的虚拟机,一台master,两台slave,用最原始环境的MySQL进行试验(刚安装,里面没有任何库,如果有得对master进行锁表全备然后将全备还原到slave)

首先三台虚拟机都安装mysql(得先配置好仓库)

yum install mysql-server -y

设置服务器 ID :

master:echo server_id=150 >> /etc/my.cnf.d/mysql-server.cnf 

slave1:echo server_id=151 >> /etc/my.cnf.d/mysql-server.cnf 

slave2:echo server_id=152 >> /etc/my.cnf.d/mysql-server.cnf 

三台服务器id不同即可

开启服务(主从服务器):

systemctl start mysqld

创建复制用户: 在主服务器上创建一个用于复制的用户,并授予它必要的权限:

mysql #启动mysql
create user rep@'% identified with mysql_native_password by '123'; #创建用户
grant replication slave on *.* to rep@'%'; #授权用户

查看主服务器状态:

需要记录主服务器的二进制日志坐标:

记住这里你的File字段(二进制日志文件)和Postion字段(它告诉从库应该从主库的哪个位置开始复制数据)

从服务器连接主服务器并启动从服务器复制线程(从服务器都执行一样的操作):

查看从服务器状态:

红色箭头指向的部分为yes则同步成功

测试:

直接对主库进行各种数据库操作,如果从库也变化则成功

2.2、基于gtid的主从同步配置

开启gtid:

在主从服务器/etc/my.cnf或者它的子配置文件中加入:

gtid_mode=ON
enforce-gtid-consistency=ON

重启服务:

systemctl restart mysqld

然后进入MySQL查看gtid是否开启:(gtid_mode==>ON)

然后在从服务器上关闭复制(mysql中)

stop slave

线程,因为之前配置了 MySQL 主从同步(replication),并且在重启 MySQL 服务时没有明确禁用复制,那么服务重启后通常会自动启动复制线程。

从服务器连接主服务器,然后启动从服务器(slave)的复制线程,从而开始从主服务器(master)同步数据。

查看从服务器状态:

最后对主服务器进行操作,主从服务器数据库能进行同步就成功了.


原文地址:https://blog.csdn.net/2302_77791905/article/details/145244602

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!