自学内容网 自学内容网

sql主从同步

今天给大家介绍两种mysql的主从同步方式:第一种是基于binlogzhu主从同步;第二种就是基于gtid的主从同步方式。

首先给大家介绍一下什么是sql的主从复制。

主从复制:

通过将MySQL的某一台主机(master)的数据复制到其他主机(slaves)上,并重新执行一遍来执行 复制过程中一台服务器充当主服务器,而其他一个或多个其他服务器充当从服务器

MySQL支持的复制类型:

基于语句(statement)的复制

在主服务器上执行SQL语句,在从服务器上执行同样的语句。MySQL默认采用基于语句的复制,效率比较高。

基于行(row)的复制

把改变的内容复制过去,而不是把命令在从服务器上执行一遍。从MySQL 5.0开始支持。

混合型(mixed)的复制

默认采用基于语句的复制,一旦发现基于语句的无法精确复制时,就会采用基于行的复制。

为什么要做主从复制(用途):

灾备

数据分布

负载平衡

读写分离

提高并发能力

主从复制原理:

主要基于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

MySQL复制常用的拓扑结构:

主从类型(Master-Slave)

主主类型(Master-Master)

级联类型(Master-Slave-Slave)

如何实现主从复制

在主服务器(master)上
    启用二进制日志
    选择一个唯一的server-id
    创建具有复制权限的用户
在从服务器(slave)上
    启用中继日志
    (二进制日志可开启,也可不开启)
    选择一个唯一的server-id
    连接至主服务器,并开始复制

给大家介绍一下第一种基于binlog的主从同步方式:

首先是准备工作,创建三台机器。

在这里我将172.25.254.100作为主服务器,另外两台作为(101和135)从服务器。然后都安装并且开启mysql服务.

由于三台虚拟机都是一样的操作,这里就不重复展示。

接下来就是对主服务器进行配置:

首先是设置唯一的server_id(建议用ip地址的最后三位):

图中圈出来的文件即为咱要进行设置的文件。

然后在主机上创建授权用户:

然后查看binlog:

这样主机就完成后了配置:

接下来我们对从库进行配置:

172.25.254.101:

172.25.254.135:

至此,我们对两台从库的配置已经完成。接下来看看是否可以进行主从复制。

图中圈出的地方需要有两个yes才可以正常运行,但slave_IO_running这一项显示NO.

推测原因:在对主机进行克隆的时候,已经提前创建了mysql,导致克隆过去之后几台机器的uuid相同,所以我们要进入 /var/lib/mysql/auto.cnf/这个文件对从机的uuid进行修改,修改完之后重启数据库:

查看修改之后的结果:

另一台:

我们可以发现修改uuid之后,之前显示NO的一项现在已经变为yes,说明之前的推测正确。

现在我们在主库创建一个表,看它们能否做得到主从同步:

从库的一个表是修改之前的表,圈主的为第二个表:

至此,基于binlog建立主从同步的实验结束!

接下来介绍第二种,基于gtid的主从同步:

我们首先要停掉上一种模式的主从:

然后开启gtid(三台机器都是同样的操作):

开启之后需要重启服务器:

然后开启从库配置:

由于前面主库发生了改变,保险起见,我们再停止一次slave;

做完这些之后呢,我们开启slave,然后查看一下状态:

显示两个“yes”,表示建立成功。

接下来用另一种方式对另一台主机进行配置:

图中红色的框表示的是新的配置代码(主要就是将之前的“master”改为了“source”),然后也可以开启主从同步。

之后在主库中新建一个库,对这个主从同步进行测试:

然后查看从库是否同步:

这里看到,两个从库都实现了同步试验成功。

总结:相比于binlog方式,gtid方式更加简单,因为它不用查看binlog_file以及binlog_position.


原文地址:https://blog.csdn.net/2403_87547058/article/details/145281851

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