【Linux】MySQL高可用之Mysql读写分离实践

news2024/11/20 4:23:32

一、MySQL读写分离原理

读写分离就是在主服务器上修改,数据会同步到从服务器,从服务器只能提供读取数据,不能写入,实现备份的同时也实现了数据库性能的优化,以及提升了服务器安全。

dc9b57ef0dc84c8b8c41aa937adec381.png

 二、读写分离实践

绝大多数的企业的应用场景对于数据库来说都是读多写少,比如微博,明星发一条微 博,上千万人读。所以为了分担数据库压力,做负载均衡,首先考虑到的就是读写分离,读写分离基于上面实现的主从复制,使用主库作为写库,从库为读库,提高数据库性能,提高IO性能。

三、读写分离的实现方式

为了实现读写分离,出现了很多解决方案,其中比较流行的是采用中间件做为 Proxy,保持应用层代码不随数据库的变动而发生变化,这里包括Amoeba、Atlas、 Cobar、Mycat、MySQL Proxy等,而Mycat是目前开源的数据库中间件中比较成熟的解决方案。

四、安装JDK

① 解压缩包

tar -xzvf jdk-8u161-linux-x64.tar.gz -C /usr/local/java

b9d2a9ecb67648b9bbf6a4b107be3be5.png

②编辑/etc/profile

vim /etc/profile

2da5cbd210f04910bfe1e16c5941b15e.png

 使用source命令使修改即时生效,无需重启服务器:

source /etc/profile

 ③ 查看是否安装成功,有版本号就是安装成功了;

java -version

d04f9dc7cf2c469aabba882fdf4d9840.png

五、安装Mycat

MyCat的安装部署 Mycat的安装其实只要解压压缩包就可以,非常简单。

【安装完成后,目录如下】: 

8538d090f5434b4a9c70944188580183.png

【配置】

Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:

f1994f3f79b248a5ab0d51dc732d24bc.png

【 MyCat的架构 】

Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服 务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库。

六、配置Mycat

① server.xml的配置

将最后删除和修改成下面的样子

959b2eacbf82400e8c590b5a54c16f3c.png

 【各配置参数含义】

2fc3d327ffef4e96bbb4a92fc562cf8e.png

② schema.xml的配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="nebula" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
        <dataNode name="dn1" dataHost="auth" database="mytest" />
        <dataHost name="auth" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM" url="192.168.198.142:3306" user="root"
                                   password="Nebula@123">
                        <readHost host="hostS" url="192.168.198.148:3306" user="root" password="Nebula@123" />
                </writeHost>
        </dataHost>
</mycat:schema>

b12fd54439f247389b6ac45a891f8c9b.png

 【参数配置说明】

f293c237ee4346ae859731403bd6c91c.png

【下面是关于每个节点的配置说明】

2104d9c1e2204926bf9dabbcdb1e88b5.png

3c4184bab11a49fd9e25bd7ccf71e055.png

830f8477d4594bb3b2394ed591806084.pnge071ee63c2764b80a1aab9d1546532f9.png

 

 

 

 

七、给从机创建只读用户

读库的用户test是添加的mysql用户,只具有读权限的用户:

主机具有写权限,从机只具有读权限;

create user 'test'@'%' identified with mysql_native_password by
'Nebula@123';
GRANT select ON *.* TO 'test';
flush privileges;

afcc5a98eb904cb09679ea63dec240d6.png

八、启动mycat

① Mycat的启动也非常简单,进入到mycat下的bin目录下:

#启动
./mycat start(后台启动) ./mycat console(前台启动)


#停止
./mycat stop


#重启
./mycat restart

【如果在启动时发现异常,在logs目录中查看日志】

  • wrapper.log 为程序启动的日志,启动时的问题看这个
  • mycat.log 为脚本执行时的日志,SQL脚本执行报错后的具体错误内容,查看这个文件。
  • mycat.log是最新的错误日志,历史日志会根据时间生成目录保存。

启动正常的结果如下:

f210615929ec4a6fbc55dcff186b5e68.png

 【mycat启动后,执行命令不成功,可能实际上配置有错误,导致后面的命令没有很好 的执行。】


mycat成功启动会有高亮显示的两个端口

b73a85d4b2ed42c4aaaf56a0b312023b.png

8066是业务端口,可以对mycat连接的虚拟数据库进行增删改查;

9066是管理端口,查看心跳等;

九、验证读写分离服务

① 连接mycat的9066端口查看心跳

957ffe48e45946dc9153aca0166e8639.png

 ② 右击mycat,点击命令行界面可以输入sql语句

bf94af7dda504a478910878a8de0f988.png

③ 输入命令查看心跳是否正常,RS_CODE为1是正常

show @@heartbeat;

7e922ca130974a7f991a45046e16c28c.png

 可以看到hostM拥有W写权限,hostS拥有R读权限

 ④ 使用navicat连接mycat,如下图所示,注意端口为8066。

f75a947f656a4897883acf7cf4f270c4.png

 连接成功则会出现如下的绿色,否则请检查:

28379a3b94ac46448e2c4b83dbd3a15c.png

④ 测试读,有两种思路来验证:

1)关闭了主从复制

  1. 在从数据中关闭slave(即关闭主从复制);
  2. 然后在mycat管理端中往某个表中插入 一条数据;
  3. 再使用select查询该表,可以看到查询出来的结果中并没有新的那条数据。

(解释:因为关闭了主从复制,插入新数据在主库进行,而查询的是从库,为此 不会查询到新插入的数据);

#关闭从机

stop slave;
show slave status\G;

e0f8d1d900244dd685d122576179ee13.png

 #原本主从机的table_2表中均没有数据;

99980378bb764492b52911e1d464cc6d.png261b22708a334995aeaf4d490bb5fbbe.png

#在mycat上给table_2插入一条数据,然后查看表

【我们发现明明插入成功了但是查看表却没有数据,这时因为我们关闭了主从连接,数据不会从主机同步到从机的,而从机具有读权限,主机具有写权限,相当于我们在mycat上查看数据库是查看的从机,写入数据是给主机写数据,所以查看table_2表是没有数据的,因为查看的是从机的table_2表】

bd274e994ce6455dbe8b1f0c66528d08.png

 #在mysql上查看table_2表,发现数据插入成功;

cbd8bb99afbb4d7c910876617801948a.png

  #在mysql上查看table_2表,发现是没有数据;

837cc7979fa04802a508fe3adb8f9680.png

2)不关闭slave的主从复制

不关闭slave的主从复制,直接在从库中修改表中的某个值,而主库的值不变,直 接使用查询表数据时会发现查询出来的结果是从库表中的数据;

#开启slave的主从复制

778ed5adc0fb49fcbab3c2f13b7648eb.png

#这里给在从库上给table_2插入一条数据

19d28f5afc50478b98fbaa0cd1461cb0.png

 #查看主库的table_2表,发现主库的数据没变

fe7711f85d7e4bc087c95ea2b72d1399.png

 #在mycat上查询,发现查询的是从库的table_2表的数据;

 42b4d8c1405f45dba3b6869e34a9e271.png

 

 

 

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

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

相关文章

居家办公远程控制电脑怎么操作

居家办公或者混合办公&#xff0c;正成为一种新的流行趋势。如何更好地居家办公&#xff0c;实现更高的工作效率和更舒适办公体验&#xff0c;我们总结出如下建议。 无论您是每周远程工作几天还是全职工作&#xff0c;无论是出于选择还是因为健康状况或天气事件&#xff0c;都…

部署YUM仓库及NFS共享服务

一、YUM仓库服务 1&#xff09;YUM概述 YUM&#xff08;Yellow dog Updater Modified&#xff09; 基于RPM包构建的软件更新机制 可以自动解决依赖关系 所有软件包由集中的YUM软件仓库提供 linux本身就是以系统简洁为自身优势&#xff0c;所以在安装操作系统的时候并没有将…

Kaggle往期赛 | 多目标推荐系统大赛baseline

来源&#xff1a;深度之眼 作者&#xff1a;比赛教研部 编辑&#xff1a;学姐 Kaggle OTTO – Multi-Objective Recommender System多目标推荐系统大赛 赛题分析baseline 1、赛题链接 https://www.kaggle.com/competitions/otto-recommender-system/overview 2、赛题描述 本…

聚观早报 |字节与Meta争夺VR开发者;苹果设备无故要求输入ID密码

今日要闻&#xff1a;字节与Meta争夺VR应用开发者&#xff1b;苹果设备无故要求输入ID密码&#xff1b;余承东称25年是智能电动汽车分水岭&#xff1b;小鹏回应G6售价及配置信息曝光&#xff1b;亚马逊将在爱尔兰裁员200人 字节与Meta争夺VR应用开发者 4 月 14 日消息&#xf…

运筹说 第89期|网络计划-网络计划的优化

通过画网络图并计算时间参数&#xff0c;我们已得到了一个初步的网络计划&#xff0c;而网络计划技术的核心却在于从工期、成本、资源等方面对这个初步方案做进一步的改善和调整&#xff0c;以求得最佳效果&#xff0c;这一过程&#xff0c;就是网络计划的优化。接下来让我们跟…

家用洗地机到底好不好用?国产性价比高的品牌

洗地机作为一种高效、节能、环保、卫生的清洁设备&#xff0c;不仅能够提升清洁效率&#xff0c;还能有效减少清洁成本&#xff0c;更重要的是&#xff0c;它可以帮助我们创造一个更加健康和舒适的生活环境。而且除菌方面大部分都是采用电解水的除菌方式&#xff0c;更加环保和…

【我的创作纪念日—5周年】

序言 用心生活&#xff0c;用力向上&#xff0c;微笑前行&#xff0c;就是对生活最好的回馈。 机缘 最开始写文章&#xff0c;没想那么多&#xff0c;主要是记录一下&#xff0c;就随便写了下&#xff0c;后来认识了一些写文章的小伙伴&#xff0c;在和他们的沟通中越来越体会到…

PACS/RIS影像管理系统源码,采用VC++编程语言,提供三维图像后处理和算法

PACS/RIS影像管理系统源码 医学影像管理&#xff08;PACS/RIS&#xff09;系统是一套完整的提供DICOM标准遵从、高效的实现医学影像归档存储、通讯和诊断处理功能的医学影像信息管理系统&#xff0c;其基于DICOM/HL7标准的开放性架构和模块化的结构体系&#xff0c;确保了系统…

自动驾驶就是在扯?比亚迪你凭什么?

比亚迪“炮轰”自动驾驶 上周&#xff0c;在比亚迪2022年财报交流会上&#xff0c;有投资人问比亚迪在自动驾驶方面的发展进度和规划&#xff0c;比亚迪集团董事长王传福直言&#xff1a;“无人驾驶那都是扯淡&#xff0c;弄个虚头巴脑的东西那都是忽悠&#xff0c;它就是一场皇…

【超算/先进计算学习】日报4

目录 今日已完成任务列表遇到的问题及解决方案任务完成详细笔记高性能算法计算机算法的特征及内涵科学计算算法的主要分类高性能算法与传统算法的异同稀疏矩阵向量乘法 SpMV 与稀疏矩阵存储结构常见的稀疏矩阵传统存储与其SpMV算法不同的稀疏矩阵传统存储结构存储效率与稀疏度针…

Linux进程概念及状态

Linux进程概念及进程状态 目录 Linux进程概念及进程状态引入1、什么是进程1.1 描述进程1.2 task_struct组织进程1.3 proc目录 2、进程标识符3、查看进程4、bash进程5、初始fork6、进程状态6.1 操作系统层面6.2 Linux内核源代码RSDX 6.3 僵尸进程6.4 孤儿进程关于kill指令 引入 …

nssctf web 入门(9)

[SWPUCTF 2021 新生赛]sql [SWPUCTF 2021 新生赛]sql 可以猜测做了过滤 这里可以bp跑一下看过滤了哪些 尝试发现过滤了空格/**/在sql中代表注释符在mysql中这个可以用来代表空格 发现--被过滤 #也不行我们试下url编码的#也就是%23 成功了 3个字段 得到库名test_db 这里提示非…

一篇文章让你彻底学会--防抖(并且自己可以手写)

Hi,有的小伙伴们在面试的时候会被要求手写防抖函数&#xff0c;很多都被难着了吧&#xff0c;宝贝&#xff0c;那你你没有理解防抖函数。 今天&#xff0c;就让我带你攻克它&#xff01; 1.防抖 防抖:单位时间内&#xff0c;频繁触发事件&#xff0c;只执行最后一次。 人话:说…

嵌入式Linux(1):make menuconfig图形化界面

文章目录 搜索功能配置驱动状态退出和make menuconfig有关的三个文件make menuconfig会读取哪个目录下的Kconfig文件&#xff1f;为什么要复制成.config而不复制成其他的文件呢&#xff1f;在默认的deconfig上面通过make menuconfig来改配置&#xff0c;然后保存怎么和Makefile…

门店智能经营平台能解决哪些问题?应该如何选购?

现在很多实体店都开始借助第三方软件或系统&#xff0c;来为自家门店搭建门店智能经营平台&#xff0c;来智能管理自家门店的商品和库存&#xff0c;提高门店运营效率。 一、使用门店智能经营平台能解决哪些难题&#xff1f; 1、实现数据化决策 通过门店智能经营平台&#xff…

VUE3的使用

文章目录 一、Vue3基础语法1、Vue开发准备2、Vue的模板语法3、条件渲染4、列表渲染5、事件处理6、表单输入绑定 二、Components组件1、组件基础2、组件交互3、自定义事件的组件交互4、组件生命周期5、引入第三方组件 三、网络请求及路由配置1、Axios网络请求2、Axios网络请求封…

【Python_Matplotlib学习笔记(一)】pyplot模块的基本用法

pyplot模块的基本用法 前言 Matplotlib 是一个 Python 的 2D绘图库&#xff0c;它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形&#xff08;来自&#xff1a;百度百科&#xff09;。pyplot 模块是 Matplotlib 模块提供的快速绘图模块&#xff0c;它模仿了 MA…

H12-831最新解析25题

401、(判断)isis silent命令用来配置IS-IS接口为抑制状态&#xff0c;即抑制该接口接收和发送IS-IS报文&#xff0c;但此接口所在网段的路由可以被发布出去。 A.TRUE B.FALSE 答案&#xff1a;A 解析&#xff1a;isis silent命令为设置静默接口&#xff0c;配置了之后该接口…

5.1、阻塞/非阻塞、同步/异步(网络IO)

5.1、阻塞/非阻塞、同步/异步&#xff08;网络IO&#xff09; 1.阻塞/非阻塞、同步/异步(网络IO)①典型的一次IO的两个阶段是什么&#xff1f; 2.日志系统①基础知识②整体概述③本文内容④单例模式1.经典的线程安全懒汉模式2.局部静态变量之线程安全懒汉模式 ⑤饿汉模式⑥条件…

Tomcat 部署与优化

1. Tomcat概述 Tomcat是Java语言开发的&#xff0c;Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;是Apache软件基金会的Jakarta项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人 共同开发而成。Tomcat属于轻量级应用服务器&#xff0c;在…