Mycat读写分离的简单实现「建议收藏」

Mycat读写分离的简单实现「建议收藏」文章目录1、Mycat读写分离的配置1.1、Mycat是什么1.2、Mycat能干什么1.2.1、数据库的读写分离1.2.2、数据库读写分离图解1.2.3、数据库分库分表1.2.3.1、水平拆分(分库)1.2.3.2、垂直拆分(分表)1.3、Mycat的搭建1.3.1、前期准备1.3.2、搭建环境1.3.3、Mycat的安装启动关闭1.3.4、Mycat的配置文件1.3.5、server.xml文件的配置1.3.6、schema.xml文件的配置1.4、测试读写分离1、Mycat读写分离的配置1.1、M

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1、Mycat读写分离的配置

1.1、Mycat是什么

Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。

1.2、Mycat能干什么

1.2.1、数据库的读写分离

1、通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。

2、实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我们需要部署多主多从的模式

1.2.1.1、数据库读写分离图解

这里是一主一从的图解
一主一从图解

1.2.2、数据库分库分表

分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分

1.2.2.1、水平拆分(分库)

根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面

1.2.2.2、垂直拆分(分表)

按照不同的表来拆分分到不同的数据库服务器之上,根据表的类型不同来拆分

1.3、Mycat的搭建

1.3.1、前期准备

1、要将Mycat准备好可以去官网下载 http://www.mycat.org.cn/

2、需要两台或者两台以上的服务器或者虚拟机

3、保证每台服务器上已经安装好了mysql并且主从复制已经搭建完成
主从复制搭建可以参考这里:https://blog.csdn.net/qq_45334037/article/details/118708689

1.3.2、搭建环境

主服务器ip:176.20.92.71

从服务器ip:176.20.92.73

Mycat版本:1.6.7.1

MySQL版本:5.7.18

Linux版本:centos7

1.3.3、Mycat的安装启动关闭

1、Mycat解压即用

将Mycat解压到/usr/local目录下

2、启动Mycat 需要切换到Mycat中的bin目录下

./mycat start

3、登录mycat 需要进入mysql中的bin目录下

./mysql -umycat -p -P8066 -h127.0.0.1

4、Mycat的关闭

./mycat stop

1.3.4、Mycat的配置文件

  1. server.xml: 用于配置mycat所需要的服务器信息。常用于配置:
    1、配置序列生成方式
    2、配置mycat逻辑数据库
    3、配置mycat的访问账户和密码
  2. schema.xml: 用于配置的逻辑数据库的映射、表、分片规则、数据结点及真实的数据库信息。常用于配置:
    1、配置逻辑库映射
    2、配置垂直切分的表
    3、配置真实的数据库
    4、配置读写结点
  3. rule.xml: 用于定义分片规则

1.3.5、server.xml文件的配置

只需设置连接mycat时的用户名和密码, 逻辑库即可,将默认的修改为你想要的

	<user name="mycat" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">mycatdb</property>
	</user>

1.3.6、schema.xml文件的配置

1.3.6.1、schema配置

因为只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,写转发到主库,读转发到从库,所以schema标签里面不用配置table

配置如下

<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>

1.3.6.2、dataNode配置

dataNode标签的作用

dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库

配置如下

<dataNode name="dn1" dataHost="host1" database="testdb" />

name属性:定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到

dataHost属性:用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性

database属性:用于对应真实的数据库名,必须是真实存在的

1.3.6.3、dataHost配置

dataHost标签的作用

定义具体的数据库实例、读写分离配置和心跳语句

配置如下

	<dataHost name="host1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
			<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
		</writeHost>
	</dataHost>

balance属性:负载均衡类型,目前的取值有4种

switchType属性:用于指定主服务器发生故障后的切换类型

heartbeat标签:用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行

writeHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,写实例

readHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,读实例

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去

1.3.6.4、完整配置

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

	<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	<dataNode name="dn1" dataHost="host1" database="testdb" />
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
			<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
		</writeHost>
		
	</dataHost>
</mycat:schema>

在此我们的mycat读写分离配置就全部完成了,重启mycat进行测试

1.4、读写分离测试

连接mysql
在mycat中的逻辑数据库mycatdb的t_user表中插入数据 可以发现主从数据库都被插入了数据
插入数据
在mycat中查询t_user中的数据
查询
到此mycat读写分离的搭建和测试就全部完成了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182573.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 小树311_森林小道

    小树311_森林小道原题链接森森开了一家快递公司,叫森森快递。因为公司刚刚开张,所以业务路线很简单,可以认为是一条直线上的N个城市,这些城市从左到右依次从0到(N−1)编号。由于道路限制,第i号城市(i=0,⋯,N−2)与第(i+1)号城市中间往返的运输货物重量在同一时刻不能超过C​i​​ 公斤。公司开张后很快接到了Q张订单,其中j张订单描述了某些指定的货物要从S​j​​ 号城市运输到T​j​​ 号城市。这里我们简单地假设所有货物都有无限货源,森森会不定时地挑选其中一部分货物进行运输。安全起见,这些货物不会在中

    2022年8月9日
    5
  • SynchronousQueue用例「建议收藏」

    SynchronousQueue用例「建议收藏」SynchronousQueue是无缓冲区的阻塞队列,即不能直接向队列中添加数据,会报队列满异常,如下所示:importjava.util.concurrent.SynchronousQueue;publicclassSynchronousQueueExp{ publicstaticvoidmain(String[]args){ SynchronousQueu…

    2022年6月22日
    29
  • AV 详解

    AV 详解AV详解

    2022年9月22日
    3
  • 目标检测与图像分割的区别_语义分割和实例分割最新论文

    目标检测与图像分割的区别_语义分割和实例分割最新论文计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?1、ImageClassification(图像分类)图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和do…

    2022年8月23日
    6
  • 强制删除 bat命令「建议收藏」

    强制删除 bat命令「建议收藏」启动Windows记事本程序,输入以下两行代码命令:DEL/F/A/Q\\?\%1RD/S/Q\\?\%1其中第一行命令的功能是删除指定文件夹及其以下文件夹中的全部文件,第二命令是说删除该文件夹及其以下的空子文件夹。把以上记事本文件“另存为”成批处理文件,即文件扩展名变更为.BAT,取文件名为:DEL.BAT保存到桌面或其它任何位置,关闭记事本程序窗口。…

    2022年9月23日
    1
  • MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]

    MySQL数据高级查询之连接查询、联合查询、子查询[通俗易懂]大圣网络2017-01-3109:19连接查询连接查询:将多张表(>=2)进行记录的连接(按照某个指定的条件进行数据拼接)。连接查询的意义:在用户查看数据的时候,需要显示的数据来自多张表.连接查询:join,使用方式:左表join右表;左表:在join关键字左边的表;右表:在join关键字右边的表连接查询分类:SQL中将连接查询分成

    2022年4月27日
    49

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号