MySQL搭建主从复制和读写分离(数据库管理与高可用)

news2025/1/12 22:04:16

集群:

高可用;

负载均衡;

高性能

1、MySQL主库在事务提交时把数据变更(insert、delet、update)作为事件日志记录在二进制日志表(binlog)里面。

2、主库上有一个工作线程 binlog dump thread,把binlog的内容发送到从库的中继日志relay log中。

3、从库根据中继日志relay log重做数据变更操作,通过逻辑复制来达到主库和从库的数据一致性。

4、MySQL通过三个线程来完成主从库间的数据复制,其中binlog dump线程跑在主库上,I/O线程和SQL线程跑在从库上。拥有多个从库的主库会为每一个连接到主库的从库创建一个binlog dump线程。  

主从复制;采用三台机器;

101 102 103

首先第一步关闭防火墙;

这里采用脚本加二进制包的方式进行安装;

文件太大就不上传了,有需要的通过私信找我获得;

首先主服务器应该具备生成二进制事物记录日志的功能;

打开主配置文件进行添加相关的语句;

vim /etc/my.cnf

以及指定不需要复制的库不记录日志;

binlog-ignore-db=test

重启服务后生效;

语句翻译:这些MySQL配置文件(通常是my.cnf或my.ini,取决于操作系统)中的语句用于配置MySQL服务器的二进制日志(binlog)相关的行为,以及复制(replication)和日志缓存的大小等。下面是对每个语句的解释和翻译:

  1. server-id=11

    • 解释:设置MySQL服务器的唯一ID为11。在MySQL复制配置中,每个服务器(无论是主服务器还是从服务器)都需要有一个唯一的server-id,以区分它们。

    • 翻译:服务器ID设置为11。

  1. log-bin=master-bin

    • 解释:启用二进制日志,并将日志文件的前缀设置为master-bin。二进制日志记录了所有更改数据库内容的语句(如DML语句和DDL语句的某些部分),这对于数据复制和数据恢复至关重要。

    • 翻译:启用二进制日志,并将日志文件名前缀设置为master-bin。

  1. binlog-format=MIXED

    • 解释:设置二进制日志的格式为MIXED。MySQL有三种二进制日志格式:STATEMENT(基于SQL语句的复制)、ROW(基于行的复制)和MIXED(混合模式,默认情况下使用STATEMENT,但在某些情况下自动切换到ROW以确保数据一致性)。

    • 翻译:二进制日志格式设置为混合模式。

  1. replicate-ignore-db=test

    • 解释:在从服务器(slave)上配置时,此选项指定了不需要从主服务器(master)复制过来的数据库名称。在这个例子中,test数据库将被忽略,即它的更改不会被复制到从服务器上。

    • 翻译:在从服务器复制时忽略test数据库。

  1. binlog-cache-size=1M

    • 解释:设置每个会话的二进制日志缓存大小为1MB。这个缓存用于存储当前会话中即将写入二进制日志的语句。如果语句的大小超过了缓存大小,缓存将自动增长,但达到max_binlog_cache_size时停止。

    • 翻译:二进制日志缓存大小设置为1MB。

  1. expire-logs-days=3

    • 解释:设置二进制日志文件的过期天数。在这个例子中,MySQL将自动删除3天前的二进制日志文件。这有助于管理磁盘空间,因为随着时间的推移,这些日志文件可能会占用大量空间。

    • 翻译:二进制日志文件过期天数设置为3天。

  1. log-slave-updates=true

    • 解释:在从服务器上,这个选项设置为true时,从服务器上的更新(例如,由复制过程引起的更新)也会被记录到从服务器的二进制日志中。这对于链式复制(即一个从服务器可以作为另一个从服务器的主服务器)特别有用。

    • 翻译:在从服务器上启用更新日志记录。

然后登录到主服务器,进行从服务器的复制授权;

grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456';

然后更新配置;

flush privileges;

然后查看master状态;

show master status;

此时将master主机放置不动;打开102and103;

如果使用的是xshell可以打开同步会话功能;然后将101关闭同步功能;进行102and103之间的管理;

打开mysql的配置文件添加语句;

vim /etc/my.cnf

再把会话同步功能关闭掉;进到103修改server-id的值;

改成33

然后重启两个主机的服务;

然后再打开两个主机的同步会话功能;

登录到mysql里面开始建立连接;

change master to master_host='192.168.10.101',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;

然后启用slave功能;

start slave;

再查看slave的状态;

show slave status\G

其中I/O线程SQL线程必须要处于连接状态;

然后进行验证;

在master主机创建数据库;

然后在slave进行查看;

然后再创建表并添加输入进行实验;

master;

slave;

最后创建test库进行试验;因为master的配置文件中指定了不同步的库;

在master创建test库;

然后创建表;及添加数据进行实验;

此时会发现指定了不同步的库还是被同步了过去;

开始排错;

发现不想同步某些库的话,要在slave的配置文件中进行添加相应的语句;

然后重启服务

再在master主机的test库中的任意表进行添加内容测试;

此时发现slave的状态中也有不被同步的库了;

也不会把test库中的数据同步了;

这种主从复制的架构弊端就是只有在master主机添加内容才会被同步,而在slave中添加数据不会被同步;slave添加数据,另外slave也不会同步过来;

以及主节点重启mysqld服务也不会造成影响;重启后从节点的状接中I/O线程的状态可能会处于连接状态,但是不会保持很长时间就会变成正常状态;

这是依托于从节点上的I/O线程会寻找主节点的二进制日志然后回立即获取到;(其中主要信息包括,主节点的日志文件,和位置;)

如果从节点的I/O线程一直处于连接状态;首先检查防火墙;关闭或者添加相应的允许策略;

或者连接参数有问题;先关闭从的I/O节点;stop slave;然后查看master的状态中的位置及文件;再书写连接的语句;然后启动该服务;start slave;

然后再去查看从节点的状态就可以了;

如果是运行了一段时间的服务器想做主从服务;那么以前的数据是能够被同步过来的;需要将以前的二进制事件日志文件导出再导入即可;

接着以上的主从复制然后开始部署读写分离;

实验环境紧接着以上的环境再打开两个主机;

一个作为客户机,一个作为代理服务器;

然后进入到104;即代理服务器安装amoeba;以及java的二进制环境包;

文件太大,上传不上去,需要私信;

给JDK文件一个执行权;因为这个文件是二进制的;

chmod +x jdk-6u14-linux-x64.bin

然后执行该文件;

./jdk-6u14-linux-x64.bin 回车至末尾;输入yes;回车结束;

然后默认就会把文件放到家目录;移动到方便管理的地方;

mv jdk1.6.0_14/ /usr/local/jdk1.6

然后对jdk命令进行优化;这里推荐使用变量的方法;

vim /etc/profile

写完后重载该文件;

source /etc/profile

然后测试一下;

然后开始安装amoeba;

先解压该tar包;

tar zxvf amoeba-mysql-binary-2.2.0.tar.gz

先创建解压后放置的目录;

然后在解压的过程中指定放置的目录;

然后登录到主服务器上给代理服务;amoeba授权;

grant all on *.* to 'test'@'192.168.10.%' identified by '123.com';

然后进入代理服务器的配置文件目录下对配置文件进行修改;

先修改前端的配置文件;

先指定终端用户连接amoeba时用到的账号与密码;

再往下翻;

指定默认连接的主机是谁;以及读写池的信息;

注释去掉;注意注释符是成对出现的;

再修改连接后端数据库的配置文件;

此时先进入到主服务器创建一个库;(因为代理服务器的配置中要指定一个默认连接的库)

然后再回到代理服务器的配置文件中指定默认访问的库;

注意去掉注释;

再往下翻;

然后指定上个配置文件中的值;master;slave;slaves;

注意:slave2的语句直接复制粘贴slave1的语句,修改即可;

然后保存退出;退回到上一级目录在/bin下启动该程序;

bin/amoeba start& (在后台运行)

然后去查询该进程;java是以容器的方式运行的;

netstat -anpt | grep java

开始测试;进入到105客户机;

需要使用mysql进行验证;这里使用yum的方式进行安装;

此时先把把代理服务器的防火墙关闭掉;

尝试连接;

mysql -uamoeba -p123456 -h 192.168.10.104 -P 8066

在客户机创建库及表;去其他主从服务器查看应该能看到库及表的存在;

弊端就是;如果slave服务器发生故障导致宕机,那么在客户端能写入数据,但是查询不到;

因为写入的时候是写到了master主机上,但是slave以及宕机,不能同步master上的数据;

代理服务器会以轮询的方式进行查询;如果两个从服务器的数据不一样,那么每次查询的数据也会不一样。

补充:如果主从复制架构已经运行了一段时间,突然出现故障的话,是不影响数据的正常同步的,但是如果是运行了一段时间的数据库,想搭建主从复制架构的话,那么之前的数据是不会被同步过来的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968673.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

蓝桥杯 DNA序列修正

今天再刷蓝桥的题目时,发现这道题目的第二种更为简洁的做法; 首先题目描述如下: 样例输入 5 ACGTG ACGTC 样例输出 2 对于这道题目,我们想的是用两个数组将其分别存储下来,然后再根据A-T、G-C的配对关系将数组二&a…

【C语言】堆排序

堆排序即利用堆的思想来进行排序,总共分为两个步骤: 1. 建堆 升序:建大堆 降序:建小堆 原因分析: 若升序建小堆时间复杂度是O(N^2) 升序建大堆,时间复杂度O(N*logN) 所以升序建大堆…

记一次对HTB:Carpediem的渗透测试

信息收集 端口扫描 通过nmap对靶机端口进行探测,发现存在22和80端口。 访问web页面。发现是一个静态页面,没有可利用的部分。 目录扫描 子域枚举 通过对域名进行fuzz子域名,发现存在portal一级域名。 将它加入/etc/hosts,访问之…

vue3+gsap实现圆形路径动画

同学们可以私信我加入学习群! 正文开始 前言一、引入并使用gsap二、详解gsap.to的各参数三、路径svg四、其他路径文字路径动画总结 前言 我开发的桌面端软件最近增加了在线更新功能,其中更新动画部分是由gsap实现的,整体实现思路已经在elect…

用Python打造精彩动画与视频,3.2 基本的剪辑和合并操作

3.2 基本的剪辑和合并操作 在这一节中,我们将学习如何使用 MoviePy 库对视频进行基本的剪辑和合并操作。MoviePy 是一个用于视频编辑的 Python 库,可以轻松地实现视频的剪辑、合并、添加音频等操作。 准备工作 首先,确保你已经安装了 Movi…

花几千上万学习Java,真没必要!(三十九)

1、BufferedReader的使用: 测试代码: package test.com; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class FileReadToList { pu…

OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI基本开发步骤(三)

引言 前面文章OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI(一) 和 OpenHarmony 入门——初识JS/ArkTS 侧的“JNI” NAPI 常见的函数详解(二)介绍了NAPI的基础理论知识,今天重点介绍下如何去开发一个自己的NAP…

maven插件2(spring-api-auth-valid-plugin)

https://maven.apache.org/guides/mini/guide-configuring-plugins.htmlhttps://maven.apache.org/plugin-testing/maven-plugin-testing-harness/getting-started/index.html plugin-desc 业务功能 所有的endpoint,必须带有指定的安全校验标签,如spring-security的PreAuthori…

RabbitMQ 集群安装

在 linux 下手动安装 RabbitMQ 集群。 准备 安装之前的准备工作。 准备内容说明其他3 台服务器centos、redhat 等ErlangRabbitMQ 运行需要的基础环境socatRabbitMQ 运行需要的基础环境logrotateRabbitMQ 运行需要的基础环境这个服务器一般自带了 下面的安装示例中使用的版本…

一键测量仪,能否彻底解决燃气灶配件缺陷问题?

燃气灶配件是指用于燃气灶的附件或零部件,用于安装、维护或改进燃气灶的功能和性能。这些配件通常包括各种零部件、附件和替换件,以确保燃气灶的正常运行和安全使用。燃气灶的火焰头是产生火焰的部件,通常根据不同的燃气类型和火力需求选择合…

python-求四位数(赛氪OJ)

[题目描述] 3025 这个数具有一种独特的性质:将它平分为二段,即 30 和 25,使之相加后求平方,即 (3025)^2,恰好等于 3025 本身。请求出具有这样性质的全部四位数。输入格式: 此题没有输入。输出格式&#xff…

详解并掌握AXI4总线协议(一)、AXI4-FULL接口介绍

系列文章目录 文章目录 系列文章目录一、AXI介绍二、AXI4、AXI-Lite、AXI4-Stream区别三、AXI4读写架构3.1 通道定义3.2 读突发时序3.3 写突发时序 四、AXI4-FULL 总线信号介绍4.1全局信号4.2 写地址通道信号4.3 写数据通道信号4.4 写响应通道信号4.5 读地址通道信号4.6 读数据…

Animate软件基础:在时间轴中添加或插入帧

FlashASer:AdobeAnimate2021软件零基础入门教程https://zhuanlan.zhihu.com/p/633230084 FlashASer:实用的各种Adobe Animate软件教程https://zhuanlan.zhihu.com/p/675680471 FlashASer:Animate教程及作品源文件https://zhuanlan.zhihu.co…

抖音爆火的“拆盲盒”直播,是如何将昂贵的废品卖给消费者的?

抖音直播间掀起了一股“拆盲盒”热潮。 最初,这股热潮主要集中在拆卡直播间。一盒10包起卖的卡牌,价格在100~200不等。拆卡主播拿起剪刀行云流水的开盒、拆卡、过牌,一晚上能轻松跑出数万元的营业额。数据显示,头部卡牌公司卡游仅…

Redis+Unity 数据库搭建

游戏中需要存放排行榜等数据,而且是实时存放,所以就涉及到数据库的问题。这里找服务器大神了解到可以用Redis来做存储,免费的效率极高。 Redis的搭建参考上文的文章,同时也感谢这位网友。 搭建Redis 并测试数据 搭建Redis 1.下…

玩转云服务:Google Cloud谷歌云永久免费云服务器「白嫖」 指南

前几天,和大家分享了: 玩转云服务:Oracle Cloud甲骨文永久免费云服务器注册及配置指南 相信很多同学都卡在了这一步: 可用性域 AD-1 中配置 VM.Standard.E2.1.Micro 的容量不足。请在其他可用性域中创建实例,或稍后…

Kafka设计与原理详解

RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。同时,广泛应用于多个领域,包括异步通信解耦、企业解决方案、金融支付、电信、电子商务、快递物流、广告营销、社交、即…

使用kettle开源工具进行跨库数据同步

数据库同步可以用: 1、Navicat 2、Kettle 3、自己写代码 调用码神工具跨库数据同步 -连接 4、其它 实现 这里使用Kettle来同步,主要是开源的,通过配置就可以实现了 Kettle的图形化界面(Spoon)安装参考方法 ht…