mycat单数据库按日分表,按月分表

1.mycat单数据库分表配置

数据库有个表数据每天增加一百多万条,数据量太大了,查询时耗时大,需要进行分表操作,这里我是按天分表。

1.1下载

官网 http://www.mycat.org.cn/
下载地址 http://dl.mycat.org.cn/1.6.7.4/

1.2安装配置

安装就不写了,百度就有
下面是配置
server.xml文件主要配置

<!--配置连接mycat的用户-->
	<user name="root" defaultAccount="true">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property> 
		<!--这个数据要和schema.xml文件中<schema name=""> 保持一致-->
		
		<!-- 表级 DML 权限设置 -->
		<!-- 		
		<privileges check="false">
			<schema name="TESTDB" dml="0110" >
				<table name="tb01" dml="0000"></table>
				<table name="tb02" dml="1111"></table>
			</schema>
		</privileges>		
		 -->
	</user>

rule.xml

<!--根据日期分表-->
	<tableRule name="sharding-by-date">
      <rule>
        <columns>ctime</columns> <!-- 要分片的表的字段-->
        <algorithm>sharding-by-date</algorithm>  <!--分片函数-->
      </rule>
	</tableRule> 
	
	<function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate">
		<property name="dateFormat">yyyy-MM-dd</property>
		<property name="sBeginDate">2020-06-01</property> <!--开始时间-->
		 <property name="sPartionDay">1</property> <!-- 分表时间间隔-->
	</function>

schema.xml

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

	<!--server.xml文件中的数据库-->
	<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
		<!-- auto sharding by id (long) -->
		<!--<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />  -->
		<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
			/> -->
			<!-- 配置mycat数据库显示的表和分表规则 -->
			<!--按天分表,需要在数据库中先把表建好,不然操作表的时候会报错-->
			  <table name="table" dataNode="dn1"  subTables="table_2020_6_$01-30,table_2020_7_$01-31" rule="sharding-by-date"   />  
			  <!--按月分表-->
		<!-- <table name="table" dataNode="dn1"  subTables="table_2020_$01-12" rule="sharding-by-month"    />  -->
		<!--配置了表在mycat数据库里面才会显示,不然没有表数据-->
			<table name="table" dataNode="dn1"  />
			<table name="table" dataNode="dn1" />
			
	</schema>
		<!--配置数据库节点,可以配置多个进行分库分表-->
	<dataNode name="dn1" dataHost="localhost1" database="test" />
	<!-- <dataNode name="dn2" dataHost="localhost1" database="db2" />  -->
	<!-- <dataNode name="dn3" dataHost="localhost1" database="db3" /> -->
	<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
	 <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" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- 配置mysql数据库连接 -->
		<writeHost host="hostM1" url="127.0.0.1:3306" user="root"
				   password="123456">
		</writeHost>
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
	<!--
		<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
		<heartbeat> 		</heartbeat>
		 <writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" 	password="jifeng"></writeHost>
		 </dataHost>

	  <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" 	dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
		<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
		<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" 	password="123456" > </writeHost> </dataHost>

		<dataHost name="jdbchost" maxCon="1000" 	minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
		<heartbeat>select 	user()</heartbeat>
		<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>

		<dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
		<heartbeat> </heartbeat>
		 <writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" 	password="jifeng"></writeHost> </dataHost> -->

	<!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
		dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
		url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
		</dataHost> -->
</mycat:schema>

1.3配置主键id统一自增

我这里使用的是本地文件的方式,.
修改sequence_conf.properties文件

#TABLE是表名,必须大写
#CURID是指表的主键id已经使用到14547424,下一条数据id就是14547425
TABLE.HISIDS=
TABLE.MINID=1
TABLE.MAXID=99999999999
TABLE.CURID=14547424

修改server.xml文件

	<property name="sequnceHandlerType">0</property>  <!--修改主键生成策略-->

修改schema.xml文件,添加 primaryKey=“id” autoIncrement=“true”

  <table name="table" dataNode="dn1" primaryKey="id" autoIncrement="true"   subTables="table_2020_5_$01-31,table_2020_6_$01-30" rule="sharding-by-date"   />  

1.4启动

启动mycat,修改springboot配置,连接mycat数据库,对表进行insert操作,测试是否分表成功.
配置和server里面配置的数据一致就行了

spring.datasource.url=jdbc:mysql://localhost:8066/TESTDB
spring.datasource.username=root
spring.datasource.password=123456
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
MyCAT是一种开源软件,是面向企业的“大型数据库集群”。MyCAT是一个强制数据库,可以替代MySQL,并支持事务和ACID。作为企业数据库MySQL群集,MyCAT可以代替昂贵的Oracle群集。MyCAT还是一种新型的数据库,它看起来像是与内存缓存技术,NoSQL技术和HDFS大数据集成的SQL Server。作为一种新型的现代企业数据库产品,MyCAT与传统的数据库和新的分布式数据仓库相结合。总之,MyCAT是一种全新的数据库中间件。 Mycat的目标是以低成本将当前的独立数据库和应用程序平稳地迁移到云端,并解决由于数据存储和业务规模的快速增长而引起的瓶颈问题。 特性: 支持SQL92标准 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster 基于Nio实现,有效管理线程,高并发问题。 支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。 支持库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 支持多租户方案。 支持分布式事务(弱xa)。 支持全局序列号,解决分布式下的主键生成问题。 分片规则丰富,插件化开发,易于扩展。 强大的web,命令行监控。 支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb、巨杉。 支持密码加密 支持服务降级 支持IP白名 支持SQL黑名、sql注入攻击拦截 支持分表(1.6) 集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。 优点: 1、基于阿里巴巴的开源项目Cobar,其稳定性,可靠性,出色的体系结构和性能以及许多成熟的用例使MyCAT有了良好的开端。站在巨人的肩膀上,MyCAT感到足够自信,可以走得更远。 2、MyCAT的基因整合了最好的开源项目和创新思想,使MyCAT领先于其他当前类似的开源项目,甚至超越了某些商业产品。 3、MyCAT支持强大的技术团队,该团队的参与者经验超过5年,其中包括一些高级软件工程师,架构师,DBA等。优秀的技术团队可确保Mycat的产品质量。 4、MyCAT不依赖任何商业公司。它与一些开源项目不同,后者的重要特征包含在其商业产品中,并使开源项目像装饰一样。   Mycat2 更新日志: v1.13 修复所有下推中带有错误联合的连接 修复生成的sql带有类型转换导致mysql运算不正确 修复黑客路由器损坏 修复黑客路由器响应int类型可能超出数字范围
要在Mycat中实现动态按年分表,你需要进行以下步骤: 1. 首先,下载Mycat并进行安装配置。你可以从官方网站http://www.mycat.org.cn/ 下载最新版本的Mycat安装包。 2. 在Mycat的配置文件中,你需要添加一个创建表的配置语句。通过修改tableNames参数,可以实现按年动态创建分表。具体的配置语句如下所示: ``` mycat:createTable{ "schemaName":"mycatdb", "shardingTable":{ "createTableSQL":"CREATE TABLE `mycatdb`.`test` (`name` varchar(10),`create_time` varchar(30));", "function":{ "clazz":"io.mycat.router.mycat1xfunction.PartitionByMonth", "properties":{ "beginDate":"2021-01-01 00:00:00", "dateFormat":"yyyy-MM-dd hh:mm:ss", "endDate":"", "columnName":"create_time" }, "ranges":{} }, "partition":{ "schemaNames":"1cloud", "tableNames":"test_$202101-202104", "targetNames":"prototype" } }, "tableName":"test" } ``` 在上述配置中,你需要修改schemaName为你的数据库名称,createTableSQL为你要创建的表的SQL语句,tableNames为按年动态生成的表名格式,targetNames为最终生成的表名前缀。 3. 配置完成后,启动Mycat服务器。你可以按照中的指导进行启动。 通过以上步骤,你就可以在Mycat中实现动态按年分表了。每个的数据将自动分配到对应的表中,方便数据管理和查询。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MyCat2按分表操作](https://blog.csdn.net/Swlymbcty/article/details/125048968)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mycat数据库按日分表,按分表](https://blog.csdn.net/qq_42795685/article/details/106768430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值