Mysql·分库分表

news2025/1/15 20:03:20

Mysql·分库分表

      • 在mysql中新建数据库用以表分库分表
      • mycat解压后配置文件参数
        • server.xml 主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等
        • rule.xml 主要配置路由策略,主要有分片的片键,拆分的策略(取模还是按区间划分等)
        • schema.xml 文件主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。
      • 启动mycat

window环境下运行的,实际生产推荐在Linux上运行
使用前软件环境搭建
下载安装mysql:mysql-5.7.36-winx64
下载安装jdk-8u251-windows-x64
下载安装Mycat-server-1.3.0.3-release-20150527095523-win

在mysql中新建数据库用以表分库分表

create database yy01;
create database yy02;
create database yy03;

select 'yy01',a.* from yy01.item a union all 
select 'yy02',a.* from yy02.item a union all 
select 'yy03',a.* from yy03.item a  ;

explain select * from item ;

mycat解压后配置文件参数

在这里插入图片描述

server.xml 主要配置mycat服务的参数,比如端口号,myact用户名和密码使用的逻辑数据库等

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
	<system>
	<property name="defaultSqlParser">druidparser</property>

	</system>
	<user name="test">
		<property name="password">test</property>
		<property name="schemas">TESTDB</property>	
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>
</mycat:server>

rule.xml 主要配置路由策略,主要有分片的片键,拆分的策略(取模还是按区间划分等)

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">

<tableRule name="role1">
    <rule>
        <columns>id</columns>
        <algorithm>mod-long</algorithm>
    </rule>
</tableRule>

<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<tableRule name="rule2">
<rule>
<columns>user_id</columns>
<algorithm>func1</algorithm>
</rule>
</tableRule>
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<tableRule name="auto-sharding-long">
<rule>
<columns>id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
<tableRule name="mod-long">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<tableRule name="sharding-by-murmur">
<rule>
<columns>id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>
   
   <function name="murmur" class="org.opencloudb.route.function.PartitionByMurmurHash">
      <property name="seed">0</property><!-- 默认是0-->
      <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片-->
      <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍-->
  </function>
  <function name="hash-int" class="org.opencloudb.route.function.PartitionByFileMap">
    <property name="mapFile">partition-hash-int.txt</property>
  </function>
   <function name="rang-long" class="org.opencloudb.route.function.AutoPartitionByLong">
    <property name="mapFile">autopartition-long.txt</property>
  </function>
  <function name="mod-long" class="org.opencloudb.route.function.PartitionByMod">
   <!-- how many data nodes  -->
    <property name="count">3</property>
  </function>
  
  <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
    <property name="partitionCount">8</property>
    <property name="partitionLength">128</property>
  </function>
</mycat:rule>

schema.xml 文件主要配置数据库的信息,例如逻辑数据库名称,物理上真实的数据源以及表和数据源之间的对应关系和路由策略等。

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

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">

        <!-- 数据同步 -->
        <table name="users" primaryKey="id"  dataNode="dn1,dn2,dn3" />  
        <!-- 数据分库分表 rule="role1" 分库分表规则分库表数据union all在一起是全量数据 如不设置默认所有库下数据相同 -->
        <table name="item" primaryKey="id" dataNode="dn1,dn2,dn3" rule="role1" /> 
        <table name="users2" primaryKey="id" dataNode="dn1,dn2,dn3" rule="role1" />
        <table name="orders" primaryKey="id" dataNode="dn1,dn2,dn3" rule="role1" />
	</schema>

	<dataNode name="dn1" dataHost="localhost1" database="yy01" />
	<dataNode name="dn2" dataHost="localhost1" database="yy02" />
	<dataNode name="dn3" dataHost="localhost1" database="yy03" />
	<!-- 
	<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
	<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
	<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" />
 -->
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
		writeType="0" dbType="mysql" dbDriver="native">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="localhost:3306" user="root"
			password="123456">
			<!-- can have multi read hosts -->
			<!-- <readHost host="hostS1" url="localhost:3306" user="root" password="123456" 
				/> -->
		</writeHost>
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
	 
</mycat:schema>

启动mycat

在这里插入图片描述
在这里插入图片描述
出现此画面说明启动成功

验证结果
在命令行访问mycat逻辑数据库,采用如下的命令:
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB
现在通过数据库查询数据库和表,发现只有逻辑数据库TESTDB而不是yy01, yy02, yy03;而且表也是统一显示的,而不是分布在不同的实际数据库中。参考图片如下:
在这里插入图片描述

在TESTDB库中创建item表用以测试
drop table if exists item ; 
CREATE TABLE item (  
    id INT NOT NULL AUTO_INCREMENT,  
    d_name varchar(100) ,  
    d_date varchar(100)  default '0000-00-00 00:00:00',  
    PRIMARY KEY (id)  
)AUTO_INCREMENT= 1 ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into item (id,d_name,d_date) values(01,'秦时明月',now());
insert into item (id,d_name,d_date) values(02,'秦时明月',now());
insert into item (id,d_name,d_date) values(03,'秦时明月',now());
insert into item (id,d_name,d_date) values(04,'秦时明月',now());
insert into item (id,d_name,d_date) values(05,'秦时明月',now());
insert into item (id,d_name,d_date) values(06,'秦时明月',now());
insert into item (id,d_name,d_date) values(07,'秦时明月',now());
insert into item (id,d_name,d_date) values(08,'秦时明月',now());
insert into item (id,d_name,d_date) values(09,'秦时明月',now());
insert into item (id,d_name,d_date) values(10,'秦时明月',now());
insert into item (id,d_name,d_date) values(11,'秦时明月',now());
insert into item (id,d_name,d_date) values(12,'秦时明月',now());
insert into item (id,d_name,d_date) values(13,'秦时明月',now());

select 'yy01',a.* from yy01.item a union all 
select 'yy02',a.* from yy02.item a union all 
select 'yy03',a.* from yy03.item a  ;

explain select * from item ;

如下图所示,mycat配置分库分表成功
在这里插入图片描述



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

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

相关文章

Elasticsearch:Elasticsearch 容量规划

Elasticsearch 是一个可扩展的分布式系统&#xff0c;可为企业搜索、日志聚合、可观察性和安全性提供解决方案。 Elastic 解决方案建立在一个单一、灵活的技术堆栈之上&#xff0c;可以部署在任何地方。 要在自托管或云端运行生产环境 Elasticsearch&#xff0c;需要规划基础架…

删除注册表配置后Chrome仍然显示“由贵单位管理”解决办法

这个提示并不影响使用&#xff0c;但是强迫症看着就是难受&#xff0c;搞掉他。 现象 找到是谁触发的 浏览器输入并打开chrome://policy/ 其实看不看意义不大&#xff0c;因为你知道了也奈何不了他。 解决问题 使用百度搜索一下都是提供的删除注册表的方法&#xff08;通过…

【C++技能树】NameSpace --命名空间的使用

Halo&#xff0c;这里是Ppeua。平时主要更新C语言&#xff0c;C&#xff0c;数据结构算法......感兴趣就关注我吧&#xff01;你定不会失望。 &#x1f308;个人主页&#xff1a;主页链接 &#x1f308;算法专栏&#xff1a;专栏链接 我会一直往里填充内容哒&#xff01; &…

burpsuite抓包数据分析

以抓到的pikachu的数据为例&#xff1a; POST /pikachu/vul/burteforce/bf_form.php HTTP/1.1 # POST请求 被抓包的文件 http协议是1.1 Host: www.xxx.com #Host是主机 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101Firefox/49.0 #user-agent是…

【C陷阱与缺陷】两道“有趣”的代码题

如果读者不了解函数指针的&#xff0c;可以先看看这篇文章 链接 < 第一题 > 代码&#xff1a; (*(void (*)())0)();解析&#xff1a; &#x1f4ac;如果你是头一次看上面这段代码的话&#xff0c;心里一定是一个大大的问号&#xff1f;&#xff1f;&#xff1f;现在我…

C++的输入输出概述

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C &#x1f525;座右铭&#xff1a;“不要等到什么都没有了&#xff0c;才下…

前缀和2:2615等值距离和

2615. 等值距离和 - 力扣&#xff08;LeetCode&#xff09; 做这道题之前&#xff0c;先完成1685. 有序数组中差绝对值之和 - 力扣&#xff08;LeetCode&#xff09; 一般性的&#xff0c;我们能在这类题目中总结出以下规律&#xff1a; 求解有序数组中每个元素与q的差值res时…

Traceroute的原理及应用挑战

1 Traceroute简介 Traceroute 是继 ping 之后使用最广泛的网络诊断工具之一&#xff0c;因为它简单且应用范围非常广泛。 traceroute 的可能应用范围从简单的网络错误诊断到揭示底层网络拓扑的大型扫描。然而&#xff0c;由于 traceroute 不是在考虑现代网络技术的情况下构建的…

让你轻松入门APP自动化测试:UiAutomator2框架基础解析

目录 前言 一、uiautomator/uiautomator2的前生今世 1.官方文档介绍 2.梳理一下脉络 3.三款框架对比 二、uiautomator2简介 1.项目组成 2.工作原理 三、环境搭建 1.安装uiautomator2 2.初始化设备 3.init时都干了啥&#xff1f; 四、基础操作 1.连接设备 2.命令…

IEEE SPL | 基于图注意力机制的音频语意概述

本文由哈工程智能信号处理组与悉尼科技大学、萨里大学合作&#xff0c;发表于IEEE信号处理学会期刊IEEE Signal Processing Letters&#xff0c;论文一作为2020级硕士研究生肖飞扬。 论文链接&#xff1a;https://arxiv.org/abs/2304.03586 论文代码&#xff1a;https://github…

GPT 任务指令 = 定义角色 + 背景信息 + 任务目标 + 输出要求

GPT 任务指令 定义角色 背景信息 任务目标 输出要求 环境 GPT-4 0. 你是一名专业的导游&#xff0c;负责为我生成旅游计划&#xff0c;现在我来北京旅游&#xff0c;需要你为我生成一份 3天2晚的北京旅游规划。我的要求是&#xff1a;1.地点包括故宫、军播和环球影城。 2…

你一定能看懂的SQL事务及其实现原理

一。概念 事务 是数据库执行原子操作的基本单位。一个事务中的多个修改&#xff0c;则要么全部成功执行&#xff0c;要么全部不执行。 关于事务的 MYSQL 官网的解释 Transactions are atomic units of work that can be *committed* or *rolled back*. When a transaction ma…

substrate实例-基于OCW发送一个签名交易

目录标题 1. 获取substrate-node-template代码2. 添加一个用于测试的ocw-test目录至pallets3. 编写ocw-test/src/lib.rs代码3.1 需要用到的包名的引用3.2 模块crypto的实现3.3 mode pallet 的实现-config、storage、event3.4 mode pallet 的实现-call3.5 mode pallet 的实现-ho…

整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条

本篇文章主要讲解自己整理的汉字拼音数据资源的下载及使用方法。 资源截图 包含&#xff1a;sql、xls、txt、json等格式文件 汉字涵盖&#xff1a;多音字、生僻字 下载地址&#xff1a;https://download.csdn.net/download/hj960511/87705416 使用方法 步骤一、下载资源包&…

七、使用arcgis对道路结果进行后处理及iou优化步骤详解

最近在研究对道路的后处理 废话不多说 直接放我的教程了 分别对real真实和predict预测的图片进行镶嵌操作 教程在这里 工具在这里 结果如下 矢量化提取道路中心线 经过很多尝试 arcscan是提取效果最好的一个方法&#xff0c;操作见这 或者这里这篇文章注解更详细一点&am…

问题汇总1

问题汇总 Linux相关1. vim 修改挂载文件时 报错 read-only filesystem2.root 用户密码无法更改3.linux 用户被锁定4.linux 查看登录日志其他小问题 Windows 相关1.添加 删除 默认路由2.exel合并单元格 添加 分隔符 Linux相关 1. vim 修改挂载文件时 报错 read-only filesystem …

Linux namespace

​ 前言 从《initrd&init进程》可知&#xff0c;我们通过ssh连接linux服务器&#xff0c;其实主是linux启动一shell进程与我们做交互。而Linux又是多租户的&#xff0c;这使用得用户与用户间产生了&#xff0c;资源的争抢。 如何隔离资源&#xff0c;且让用户都无法察觉&…

SpringBoot项目实现热部署

文章目录 SpringBoot实现热部署手动开启热部署自动开启热部署热部署相关配置 SpringBoot实现热部署 什么是热部署&#xff1f; 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。对于Java应用程序来说&#xff0c;热部署就是在运行时…

初学数据库

1、什么是数据库 数据库&#xff08;Database&#xff09;是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的API用于创建&#xff0c;访问&#xff0c;管理&#xff0c;搜索和复制所保存的数据。 我们也可以将数据存储在文件中&#xff0c;但是在…

企业级实践:大厂项目研发流程

引言 战国邹孟轲《孟子离娄上》&#xff1a;“离娄之明&#xff0c;公输子之巧&#xff0c;不以规矩&#xff0c;不能成方圆。” 每一个行业都有自己行之有效的规矩&#xff0c;同样软件行业也有自己一套的开发流程&#xff0c;今天就来跟大家聊一聊咱们公司的开发流程&#…