MySQL使用MyCat实现分库分表

news2025/2/5 17:57:31

MySQL分库分表的实现方式有:

  • shardingJDBC:基于AOP原理,在应用程序中对本地执行的SQL进行拦截,解析、改写、路由处理。需要自行编码配置实现,只支持java语言,性能较高。
  • MyCat:数据库分库分表中间件,不用调整代码即可实现分库分表,支持多种语言,性能不及前者。

这里使用的是MyCat

mycat2官网地址:MyCat2

mycat只需要在一台服务器上安装即可,安装的服务器也称为中间件服务器。

我这里是在虚拟机上进行的,一共3台服务器,192.168.168.100,192.168.168.101,192.168.168.102

3台服务器上都需要安装mysql(安装mysql:Linux安装MySQL_生骨大头菜的博客-CSDN博客),只需要在192.168.168.100上安装mycat和jdk

1.安装jdk

如果系统没有安装jdk,需要先安装:linux安装java_生骨大头菜的博客-CSDN博客_java安装linux

2.下载安装包并且解压

地址:https://github.com/MyCATApache/Mycat-download/tree/master/1.6-RELEASE

将下载好的文件上传到服务器的/usr/mycat目录下 

# 进入mycat文件夹
cd /usr/mycat
# 解压
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

cd /usr/local/
ll

 进入mycat可以看到文件及文件夹

3.设置分片配置

cd conf/
ll

 分片配置文件是schema.xml ,删除不需要的部分进行精简

vim schema.xml

编辑后的:

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

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
	</schema>

	<dataNode name="dn1" dataHost="localhost1" database="db1" />
	<dataNode name="dn2" dataHost="localhost1" database="db2" />
	<dataNode name="dn3" dataHost="localhost1" database="db3" />

	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="hostS1" url="localhost:3316" user="root" password="123456" />
	</dataHost>

</mycat:schema>

编辑相关配置:

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

	<schema name="DB01" checkSQLschema="true" sqlMaxLimit="100">
		<table name="TB_ORDER" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
	</schema>

	<dataNode name="dn1" dataHost="dhost1" database="db01" />
	<dataNode name="dn2" dataHost="dhost2" database="db01" />
	<dataNode name="dn3" dataHost="dhost3" database="db01" />

	<dataHost name="dhost1" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="master" url="jdbc:mysql://192.168.168.100:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="root" />
	</dataHost>

	<dataHost name="dhost2" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="master" url="jdbc:mysql://192.168.168.101:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="root" />
	</dataHost>

	<dataHost name="dhost3" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="jdbc" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>

		<writeHost host="master" url="jdbc:mysql://192.168.168.102:3306?useSSL=false&amp;serverTimezone=Asia/Shanghai&amp;characterEncoding=utf8" user="root" password="root" />
	</dataHost>

</mycat:schema>

配置server.xml,配置mycat的用户及用户的权限信息

	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">DB01</property>
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>

	<user name="user">
		<property name="password">123456</property>
		<property name="schemas">DB01</property>
		<property name="readOnly">true</property>
	</user>

4.启动mycat服务

# /usr/local/mycat/为mycat的安装目录
# 启动
/usr/local/mycat/bin/mycat start
# 停止
/usr/local/mycat/bin/mycat stop

mycat启动之后,占用的端口号8806

查看是否启动成功

tail -f /usr/local/mycat/logs/wrapper.log

如果这时提示错误:

原因为缺少驱动,可以下载相应的驱动:https://downloads.mysql.com/archives/c-j/

上传到/usr/local/mycat/lib进行解压,取出文件夹里jar文件

# 授权
chmod 777 mysql-connector-java-5.1.49.jar
/usr/local/mycat/bin/mycat stop
/usr/local/mycat/bin/mycat start
tail -f /usr/local/mycat/logs/wrapper.log

看到这句话证明正常启动了 

5.登录mycat服务

mysql -h 192.168.168.100 -P 8066 -uroot -p123456

show databases;

 可以看到对应的逻辑数据库以及表

创表并插入数据

CREATE TABLE TB_ORDER (
id BIGINT(20) NOT NULL,
title VARCHAR(100) NOT NULL,
PRIMARY KEY(id)
)ENGINE=INNODB DEFAULT CHARSET=utf8;

可以在Navicat工具上看到每台虚拟机的数据库都有这张表了

  

INSERT INTO TB_ORDER(id,title) VALUES(1,'goods1');
INSERT INTO TB_ORDER(id,title) VALUES(2,'goods2');
INSERT INTO TB_ORDER(id,title) VALUES(3,'goods3');
INSERT INTO TB_ORDER(id,title) VALUES(1000000, 'goods1000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000000, 'goods10000000');
INSERT INTO TB_ORDER(id,title) VALUES(10000001, 'goods10000001');

 注意:由于分配规则使用的是auto-sharding-long,所以只能插入id<=15000000的数据,如果需要插入这个值以上的就需要增加数据节点,或者修改规则

至此mycat部署已基本完成

如果想更灵活地使用mycat,则需要了解mycat的相关配置文件的使用 

 6.mycat配置文件

主要有3个:

  • schema.xml:配置逻辑库逻辑表等相关信息
  • server.xml:mycat运行的服务的信息,例如用户及其权限
  • rule.xml:分片规则的信息

都存放在/usr/local/mycat/conf

6.1.schema.xml

schema.xml作为MyCat中最重要的配置文件之一, 涵盖了MyCat的逻辑库、逻辑表、分片规则、分片节点及数据源的配置。
主要包含以下三组标签:

6.1.1.schema标签

schema标签用于定义MyCat实例中的逻辑库,一个MyCat实例中, 可以有多个逻辑库,可以通过schema标签来划分不同的逻辑库。 MyCat中的逻辑库的概念,等同于MySQL 中的database概念,需要操作某个逻辑库下的表时,也需要切换逻辑库(use xxx)。

核心属性:

  • name:指定自定义的逻辑库库名
  • checkSQLschema:在SQL语句操作时指定了数据库名称,执行时是否自动去除; true: 自动去除,false: 不自动去除
  • sqlMaxLimit:如果未指定limit进行查询,列表查询模式查询多少条记录

table标签

table标签定义了MyCat中逻辑库schema'下的逻辑表,所有需要拆分的表都需要在table标签中定义。

核心属性: 

  • name:定义逻辑表表名,在该逻辑库下唯一
  • dataNode: 定义逻辑表所属的dataNode, 该属性需要与dataNode标签中name对应;多个dataNode逗号分隔
  • rule:分片规则的名字,分片规则名字是在rule.xml中定义的
  • primaryKey:逻辑表对应真实表的主键
  • type:逻辑表的类型,目前逻辑表只有全局表和普通表,如果未配置,就是普通表;全局表,配置为global

6.1.2. dataNode标签

dataNode标签中定义了MyCat中的数据节点,也就是我们通常说的数据分片。一个dataNode标签就是-个独立的数据分片。
核心属性:

  • name:定义数据节点名称
  • dataHost: 数据库实例主机名称,引用自dataHost标签中name属性
  • database:定义分片所属数据库

6.1.3.datahost栋签

 该标签在MyCat逻辑库中作为底层标签存在,直接定义了具体的数据库实例、读写分离、心跳语句。

核心属性: 

  • name:唯一标识,供上层标签使用
  • maxCon/minCon: 最大连接数/最小连接数
  • balance: 负载均衡策略,取值0,1,2,3
  • writeType: 写操作分发方式(0:写操作转发到第一个writeHost, 第一个挂了,切换到第二个; 1:写操作随机分发到配置的writeHost)
  • dbDriver:数据库驱动,支持native、jdbc

6.2.rule.xml

rule.xml中定义所有拆分表的规则,在使用过程中可以灵活的使用分片算法,或者对同一个分片算法使用不同的参数,它让分片过程可配置化。

主要包含两类标签: tableRule、Function。

 

 

 6.3.server.xml

 server.xml配置文件包含了MyCat的系统配置信息,主要有两个重要的标签: system、 user。

 6.3.1.system标签

 对应的系统配置项及其含义

6.3.2.user标签

了解这些配置文件后可以灵活地对数据库进行水平拆分、垂直拆分

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

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

相关文章

我国盆栽行业发展向好 服务、信息、性价比高度结合的销售模式势在必行

盆栽系由中国传统的园林艺术变化而来&#xff0c;其定义是指栽在盆里的活体植物的总称。盆栽是温室花卉生产的主要方式之一&#xff0c;即便于控制各种生活条件&#xff0c;有利于花卉的促控栽培&#xff0c;还便于搬移&#xff0c;即可陈设于室内&#xff0c;又可布景于庭院。…

Metal每日分享,基于色温调整白平衡滤镜效果

本案例的目的是理解如何用Metal实现基于色温调整白平衡效果滤镜&#xff0c;主要就是消除或减轻日光下偏蓝和白炽灯下偏黄&#xff0c;简单讲把应该是白色的调成白色或接近白色&#xff0c;不使其严重偏色&#xff1b; Demo HarbethDemo地址iDay每日分享文档地址 实操代码 /…

如何多人配音?告诉你这几个实用的配音技巧

大家平常在刷短视频时&#xff0c;有没有刷到过一些搞笑配音视频呢&#xff1f;有些视频是由多人互动或者一人扮演多角而成的&#xff0c;这些创作者把当下比较热门的话题通过配音的方式呈现出来&#xff0c;或让我们捧腹大笑、或让我们引起思考。如果你也想通过这种方式来制作…

JVS低代码基础介绍

企业信息化底座 JVS是面向软件开发团队可以快速实现应用的基础开发脚手架&#xff0c;主要定位于企业信息化通用底座&#xff0c;采用微服务分布式框架&#xff0c;提供丰富的基础功能&#xff0c;集成众多业务引擎&#xff0c;它灵活性强&#xff0c;界面化配置对开发者友好&a…

Git仓库创建、代码更新、代码提交完整版(Gitee、Github、GitLab对比)

区别 Gitee、Github、GitLab三个都提供了 个人和团队存储、分享、发布和协同开发项目的中心化云存储功能 名称代码版块控制管理工具是否收费搭建环境联网/github git 公有仓库免费 私有仓库收费&#xff08;鼓励代码共享&#xff09; 企业私有需要搭建可离线&#xff08;分布…

在英特尔独立显卡上部署YOLOv5 v7.0版实时实例分割模型

作者&#xff1a;贾志刚 英特尔物联网创新大使  目录 1.1 YOLOv5实时实例分割模型简介 1.2 英特尔消费级锐炫™ A 系列显卡简介 1.3 在英特尔独立显卡上部署YOLOv5-seg模型的完整流程 1.3.1 搭建YOLOv5开发环境和OpenVINO部署环境 1.3.2 验证YOLOv5开发环境和OpenVINO部…

Spring Cloud之acos服务注册与Dubbo

Spring Cloud之acos服务注册与Dubbo nacos是springcloud的扩展&#xff0c;注册中心功能通过NacosDiscoveryClient 继承DiscoveryClient&#xff0c;在springcloud中&#xff0c;与Eureka可以无侵入的切换。注册中心可以手动剔除服务实例&#xff0c;通过消息通知客户端更新缓…

【推荐】数据湖技术及实践与案例资料汇总合集47篇

数据湖或hub的概念最初是由大数据厂商提出的&#xff0c;表面上看&#xff0c;数据都是承载在基于可向外扩展的HDFS廉价存储硬件之上的。但数据量越大&#xff0c;越需要各种不同种类的存储。最终&#xff0c;所有的企业数据都可以被认为是大数据&#xff0c;但并不是所有的企业…

30多条立马执行的站内SEO优化建议

站内SEO优化,讲来讲去很多年,但是国内很少有比较全面的Check List。国外的文章,一般都是教你如何优化一篇文章。而不是教你如何打造一个一个商业化的产品页。本篇文章是结合我这几年的独立站SEO项目经验,对站内SEO进行的一些总结,有30多条立马执行的站内SEO优化建议。 其实…

SpringBoot+Actuator+Prometheus+Grafana进行可视化应用监控

最终效果 actuator actuator是什么 看一看chatGPT怎么说&#xff1f; Spring Boot Actuator是Spring Boot的一个子项目&#xff0c;它为监视和管理Spring Boot应用程序提供了附加功能。它提供了一组端点&#xff0c;允许您监视和管理应用程序&#xff0c;如运行状况检查、度量…

[附源码]计算机毕业设计Python电影推荐网站(程序+源码+LW文档)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…

使用FastDeploy在英特尔CPU和独立显卡上端到端高效部署AI模型

目录 1.1 产业实践中部署AI模型的痛点 1.1.1 部署模型的典型流程 1.1.2 端到端的AI性能 1.1.3 部署模型的难点和痛点 1.2 FastDeploy简介 1.3 英特尔独立显卡简介 1.4 使用FastDeploy在英特尔CPU和独立显卡上部署模型的步骤 1.4.1 搭建FastDeploy开发环境 1.4.2 下载…

秒杀/抢购架构设计

1 秒杀业务分析 1.1 正常电子商务流程 &#xff08;1&#xff09;查询商品&#xff1b; &#xff08;2&#xff09;创建订单&#xff1b; &#xff08;3&#xff09;扣减库存&#xff1b; &#xff08;4&#xff09;更新订单&#xff1b; &#xff08;5&#xff09;付款&…

Odoo丨手把手教你灵活控制表单明细的创建与删除!

文章目录一、前言二、表单明细的创建与删除1.根据主表字段带出明细信息2.根据主表字段控制明细表的添加和删除功能三、总结一、前言 我们知道&#xff0c;在Odoo页面上&#xff0c;控制的最小单位是字段&#xff0c;可通过Odoo提供的属性&#xff0c;控制字段的必填、只读、隐…

Spring Cloud 应用 Proxyless Mesh 模式探索与实践

作者&#xff1a;十眠 Service Mesh 简介 Service Mesh 早已不是一个新兴的概念&#xff0c;目前已经有许多关于 Service Mesh 的探索以及实践。 2016 年可以说是 Service Mesh 的元年&#xff0c;Buoyant 公司 CEO William Morgan 率先发布 Linkerd &#xff0c;成为业界首…

Java中的多线程(上)

作者&#xff1a;~小明学编程 文章专栏&#xff1a;JavaEE 格言&#xff1a;热爱编程的&#xff0c;终将被编程所厚爱。 目录 多线程 什么是线程 为什么需要多线程 进程和线程的区别&#xff08;面试重点&#xff09; Java实现多线程 多线程带来的好处 认识Thread类 T…

前端基础_贝塞尔和二次方曲线

贝塞尔和二次方曲线 贝塞尔曲线可以是二次和三次方的形式&#xff0c;常用于绘制复杂而有规律的形状。 绘制贝塞尔曲线主要使用bezierCurveTo方法。该方法可以说是lineTo的曲线版&#xff0c;将从当前坐标点到指定坐标点中间的贝塞尔曲线追加到路径中。该方法的定义如下。 b…

艾美捷耗氧率检测试剂盒说明书及相关研究

细胞内稳态通过ATP的产生来维持。ATP的生成可以通过单独的糖酵解&#xff08;无氧呼吸&#xff09;或通过糖酵解与氧化磷酸化的耦合来完成。氧化磷酸化是氧&#xff08;O2&#xff09;依赖性的&#xff0c;发生在线粒体中&#xff0c;是哺乳动物细胞合成ATP的最有效和优选的方法…

电力系统可视化——比PowerWorld还精彩(Matlab实现)

目录 1 概述 2 PowerWorld 3 案例及Matlab代码实现 3.1 案例 3. 2 结果展现 3.3 Matlab代码实现 1 概述 信息可视化的应用为电力行业带来了巨大的希望&#xff0c;但其潜力尚未被可视化社区充分挖掘。先前关于电力系统可视化的工作仅限于在地理布局之上描绘原始或处理过的…

【数据结构】单链表OJ

目录 一、反转单链表 描述 二、返回链表的中间节点 三、返回倒数第K个节点 描述 示例1 四、合并两个已排序的链表 描述 五、分隔链表 六、判断一个链表是否为回文结构 描述 示例1 示例2 示例3 七、两个链表的第一个公共结点 描述 输入描述&#xff1a; 返回值描…