我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

.0主从模式配置流程

1.MySQL 集群配置

这里以20.04.2 + MySQL 8.0.23 进行主从模式的配置演示,并开启半同步复制,通过apt进行基础安装,安装完成并完成所有配置后进行虚拟机克隆(这里通过克隆的方式,在后面配置MySQL主从模式的时候需要修改数据目录下f文件中的UUID值,否则会导致从机同步失败,UUID相当于MySQL节点的身份证,不能重复,所以在文章开头特别强调)

1.1. 主从模式配置

这里我们使用1主2从,共3台机器,具体信息如下:

【-23】

PS:为了安全起见,可以将同步的账号改为自定义账号及权限,缩小权限范围。为了减少演示步骤,我们就不做账号创建、授权这些无关的步骤了,直接用root账号进行同步。

1.1.1. 启用账户访问权限

如果使用自建账号及授权,可以忽略此步,这里是开启root账号的内网访问权限。

步骤1:首先开启root账号的内网访问权限。

首先通过MySQL CLI登录数据库,并切换到MySQL数据库。

然后更新root账户的访问权限范围,并刷新权限信息。

user set host='你的内网IP' where user = 'root';

冲洗;

在这里插入图片描述

分别开启、slave三个MySQL账号的权限。

如果你是虚拟机镜像的从节点,请按照如下步骤在从库所在机器上修改f文件中的uuid,具体步骤如下:

vim /var/lib/mysql/f

(若当前账户不是root账户,无法访问该文件,请先su root,稍后再修改。)

然后或者百度生成一个uuid替换掉,然后保存就可以了。

然后重启mysql服务

mysql

1.1.2. 配置库

打开主库的f配置文件,写入如下配置;

打开配置文件:sudo vim /etc/mysql/f

写入配置:

[client]
# 配置远程端口(可选,不改就是3306)
port=15588
[mysqld]
# MySQL8.0的默认时区
default-time_zone='+8:00'
# 配置远程端口(可选,不改就是3306)
port=15588
# 默认binlog文件的名称(可自定义)
log_bin=mysql-bin
# 当前服务器的ID,不能重复,推荐用服务器IP D段
server-id=158
# 数据刷盘参数=1时,只要有1个事务提交就会触发写盘的操作,安全性最高,并发性最差
# 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大,这里根据实际需求配置,不建议乱配。
sync_binlog=0
# 排除掉不需要同步的数据库列表
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys

配置完成后,重启服务。

1.1.3. 配置从库

接下来开始配置从库数据,具体配置信息如下,不再赘述:

[client]
port=15588
[mysqld]
default-time_zone='+8:00'
port=15588
# 没台机器的ID都不同,根据自己实际情况修改
server-id=160
relay_log=mysql-relay-bin
read_only=1

至此,从库的基本配置已经准备好,现在我们要开始配置从节点信息。

1.1.4.启动主从库

首先进入库的cli控制台,输入以下信息:

展示 ;

请参阅以下信息:

记住前两栏的信息,下面配置从库时会用到它们。

然后进入Slave的cli控制台,输入以下信息:

mysql> 到 ='10.20.1.158',=15588,='root',='root',='mysql-bin.',=13404;

mysql>启动从属;

我们来检查一下从站的状态:

mysql>显示从属\G;

看到上面的信息就证明同步成功了,最重要的是看到and。其他节点配置成功之后也可以用同样的方法,如果此时主库的数据已经非常大,用POS来定位日志数据进行同步会非常慢。建议使用,直接把主库的数据sql脚本导出来,扔到从库里执行,速度会快很多。如果担心有数据的话,那么导出之前先检查一下当前的POS位置。等从库导入完主库的备份之后,再用上面的方法从最近的POS位置开始同步,防止你在同步的时候有新的数据产生,没有导入到从库。

1.2. 双活模式配置

什么是双主模式?简单来说就是有两台服务器,但是它们如何同步数据呢?那就是互相做从机。双主模式又分为多主多写模式、双主双写模式、双主单写模式。

1.2.1. 多主多写模式

意味着由两个以上的节点负责写入数据,这样可以大大提高数据库并发写入的性能。但是一旦数据库出现问题,处理问题数据就会很头疼。另外,多写数据库的ID值的起始位置和增量需要对多写主机总数取模得到增量间隔,否则它们之间生成的ID会发生冲突,所以一般不推荐使用这种方式。

1.2.2. 双主多写模式

它和多主多写类似,只是节点数限制为2个,并且互相之间的ID值起始位置为1和2,增量为2,这样两台机器生成的ID就是一个偶数,一个奇数。问题和多主多写一样,但是出现问题之后相对比多主多写更容易处理。在并发写入量要求不是那么极端的情况下使用,这里就不赘述了。

1.2.3. 双主机单写入器模式

该模式可以理解为对主库进行冗余备份,避免主库崩溃后服务直接不可用,这种方式可以提高MySQL集群的高可用性。而对于另外两种方式提供的并发写性能提升,可以利用Reids等技术手段变相提高写性能,达到类似的效果。这种方式在出现问题时数据处理相对简单,工作量相比另外两种方式要小很多,所以如果企业环境到了主从模式都不能满足需求的地步,可以优先考虑这种方式。

1.2.4. 推荐的使用模式

本文介绍的方法主要是双主单写模式,其他方法都是在此模式的基础上增加一个ID自增区间和ID起始位置的配置,然后加入到后面会提到的MySQL中的路由列表中即可实现。

1.2.5. 配置示例

接下来我们在主从模式的基础上增加双主单写模式的配置,与主从模式完全不冲突。

这里添加一个新的服务器节点为-2,将之前的(10.20.1.158)作为-1(以下简称-1),下面会通过-4和-1进行互相同步。

【-4】

IP:10.20.1.157(以下简称-2)

MySQL -2

使用同步的账号root

首先我们打开-1和-2的f配置文件,添加如下配置,两个节点的内容完全一样:

之后在两台机器上重启MySQL,登录MySQL控制台,先查看-1的状态。

-1 的状态:

-2 的状态:

在这里插入图片描述

记录一下以上信息,后面会用到。然后把-1的数据库完整导出,在新建立的-2上恢复数据,保证要同步的数据库数据完全一致。(这个步骤前面已经提到过)这里就不截图了,到此为止,我假设你已经把-2上的数据同步到-1上了。

接下来,我们开始将 -1 和 -2 互相设置为节点。

在-1上执行以下语句:

mysql> 到 ='10.20.1.157',=15588,='root',='root',='mysql-bin.',=5655;

mysql>启动从属;

在-2上执行以下语句:

mysql> 到 ='10.20.1.158',=15588,='root',='root',='mysql-bin.',=4475;

mysql>启动从属;

至此配置完成,接下来检查两台设备的从机状态。

-1 从属状态:

-2 从属状态:

看到两个Yess就证明已经成功了。然后通过MMM架构方案,就可以实现自动切换,自动将从节点更换为新的。这一点内容太多,这里就不细说了,后面会单独开一篇文章详细讲解。

2. 启用半同步复制

半同步复制需要配置两个地方,分别是主库和从库,现在我们开始配置主库。

2.1. 配置主数据库

首先,我们需要为 MySQL 数据库安装 semi 插件。

mysql>'.so';

mysql> 显示类似'%semi%';

mysql> 设置 = 1;

mysql> 设置 = 1000;

检查安装结果,上面第三步是启用半插件,第四步是设置同步超时时间为1秒。

在这里插入图片描述

到此,主数据库的配置基本完成,下面我们开始配置从数据库。

2.2.配置从库

同样,安装从库的semi插件并启用,注意主库和从库的插件不一样,请仔细阅读。

mysql>'.so';

mysql> 设置 = 1;

查看安装结果。

在这里插入图片描述

同理,按照同样的方式配置其他Slave节点。

配置完成后,重启从节点。

mysql>停止从属;

mysql>启动从属;

至此配置过程结束,现在可以测试同步效果了。

2.3. 如何处理主从不同步

当 MySQL 集群数据不同步时,MySQL 将停止同步。检查 Slave 状态将显示以下内容:

这种情况一般意味着从库发生了事务回滚,比如从库宕机或者在从节点上进行了写操作,导致主从不一致,对应节点会终止同步。这种情况下我们需要重新配置并同步节点,方法有很多,根据不同的情况使用不同的方法,具体如下:

2.3.1. 数据量小

记录主库最新的POS位置,然后从主库导出需要同步的数据库备份,并通过各种手段将备份从服务器A转移到服务器B,然后重新导入到Slave节点数据库中,重新指定新的位置,并从这个位置开始同步。

接下来我们来演示一下数据量较小的方案的运行流程。

首先检查状态

mysql>显示;

记录File的值然后:

这是一个shell命令,而不是mysql命令。

--all- > ~/.sql -uroot -p

这里导出的是所有的库,如果想指定某个库,可以通过–help查看帮助命令。

将导出的备份通过SFTP或者其他方式传输到有问题的节点,然后执行以下命令导入。

mysql> /home//.sql;

等待导入完成后,使用上面记录的文件重新指定同步信息,首先进入mysql cli,执行以下命令:

mysql>停止从属;

mysql>重置从属;

mysql> 到 ='10.20.1.158',=15588,='root',='root',='mysql-bin.',=16856;

mysql>启动从属;

执行完之后我们可以检查同步状态。

现在你可以看到这是OK的。

2.3.2. 大量数据

如果数据量很大,导入数据库的方法耗时太长,我们可以在导出的时候使用从出现问题到最新时间的SQL语句,然后将导出的SQL信息传输到从节点执行,同步到当前时间节点,恢复未同步的数据,然后重新指定新的位置,从这个位置开始同步。

所有步骤和数据量小的方案类似,唯一不同的是导出数据库的时候不是导出整个数据库,而是导出指定时间段的SQL语句,然后扔到有问题的slave上去恢复,导出命令如下:

二维码
扫一扫在手机端查看

本文链接:https://by928.com/3273.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线