一、先了解基本概念

1.mycat是一款操作数据库的中间件,可以达到分库分表的效果,可以从分库分表中查询所有的数据,也可以将数据以一定的规则(rule.xml)写入分库和分表。

2.分库可以在一台服务器上,也可以在多台服务器上。

3.linux安装mycat

  • 下载地址:
http://dl.mycat.org.cn/1.6-RELEASE/

  • 解压:
tar -zxvf [filename]
  • 进入mycat的conf目录下,会发现三个主要文件:server.xml schema.xml rule.xml

4.文件解释

  • server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/"><system><property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户--><property name="useHandshakeV10">1</property><property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 --><property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 --><property name="sequnceHandlerType">2</property><property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false --><!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议--><!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号--><!-- <property name="processorBufferChunk">40960</property> --><!-- <property name="processors">1</property> <property name="processorExecutor">32</property> --><!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool --><property name="processorBufferPoolType">0</property><!--默认是65535 64K 用于sql解析时最大文本长度 --><!--<property name="maxStringLiteralLength">65535</property>--><!--<property name="sequnceHandlerType">0</property>--><!--<property name="backSocketNoDelay">1</property>--><!--<property name="frontSocketNoDelay">1</property>--><!--<property name="processorExecutor">16</property>--><!--<property name="serverPort">8066</property> <property name="managerPort">9066</property> <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> --><!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志--><property name="handleDistributedTransactions">0</property><!--off heap for merge/order/group/limit      1开启   0关闭--><property name="useOffHeapForMerge">1</property><!--单位为m--><property name="memoryPageSize">64k</property><!--单位为k--><property name="spillsFileBufferSize">1k</property><property name="useStreamOutput">0</property><!--单位为m--><property name="systemReserveMemorySize">384m</property><!--是否采用zookeeper协调切换  --><property name="useZKSwitch">false</property><!-- XA Recovery Log日志路径 --><!--<property name="XARecoveryLogBaseDir">./</property>--><!-- XA Recovery Log日志名称 --><!--<property name="XARecoveryLogBaseName">tmlog</property>--><!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接--><property name="strictTxIsolation">false</property><property name="useZKSwitch">true</property></system><!-- 全局SQL防火墙设置 --><!--白名单可以使用通配符%或着*--><!--例如<host host="127.0.0.*" user="root"/>--><!--例如<host host="127.0.*" user="root"/>--><!--例如<host host="127.*" user="root"/>--><!--例如<host host="1*7.*" user="root"/>--><!--这些配置情况下对于127.0.0.1都能以root账户登录--><!--<firewall><whitehost><host host="1*7.0.0.*" user="root"/></whitehost><blacklist check="false"></blacklist></firewall>--><user name="root" defaultAccount="true"><property name="password">123456</property><property name="schemas">test_db</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">user</property><property name="schemas">test_db</property><property name="readOnly">true</property></user></mycat:server>

对于初学者来说,只需要了解下图中的name是mycat的用户名,password是mycat的密码,schemas是mycat的逻辑库(用来对应操作的真实数据库,名字随便起)

  • schema.xml(分库)
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="test_db" checkSQLschema="false" sqlMaxLimit="100"><!-- auto sharding by id (long) --><table name="t_orders" primaryKey="id" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /></schema><!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> --><dataNode name="dn1" dataHost="localhost1" database="workdb1" /><dataNode name="dn2" dataHost="localhost1" database="workdb2" /><dataNode name="dn3" dataHost="localhost1" database="workdb3" /><!--<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" maxRetryCount="4"><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="hostS2" url="localhost:3306" user="root" password="123456" /></writeHost><!-- <writeHost host="hostM2" url="localhost:3306" 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>

  • schema.xml分表
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="test_db" checkSQLschema="false" sqlMaxLimit="100"><table name="order" subTables="order_$1-9,order_1$0-2" primaryKey="ordered_id" dataNode="dn1" rule="sharding-by-month"/></schema><!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> --><dataNode name="dn1" dataHost="localhost1" database="workdb1" /><!--<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" maxRetryCount="4"><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="hostS2" url="localhost: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>

分表:有一个subTables表示真实数据表,一张逻辑库映射到多个真实数据表

Mycat分库分表实践相关推荐

  1. MySQL单表膨胀优化之MyCat分库分表

    MySQL的单表达到多少量级时性能会下降?宽表在千万量级,窄表要好一点在1200W左右.但是MySQL单表达到1500W时性能开始急剧下降! 事实上MySQL单表可以存储10亿级数据,只是这时候性能比 ...

  2. 大众点评订单分库分表实践之路

    http://dbaplus.cn/news-10-264-1.html 本文是关于大众点评订单分库分表实践的一个具体分享,包含对订单库的具体切分策略,以及我个人的一些思考. 背景 订单单表早已突破两 ...

  3. Day 4 - PB级规模数据的Elasticsearch分库分表实践

    Day 4 - PB级规模数据的Elasticsearch分库分表实践 从2018年7月在开始在某阿里云数据中心部署Elasticsearch软件,到2018年12月共创建了15个集群,服务于客户的文 ...

  4. MariaDB Spider 数据库分库分表实践 分库分表

    分库分表 一般来说,数据库分库分表,有以下做法: 按哈希分片:根据一条数据的标识计算哈希值,将其分配到特定的数据库引擎中: 按范围分片:根据一条数据的标识(一般是值),将其分配到特定的数据库引擎中: ...

  5. mysql 配置文件在哪_MySQL+MyCat分库分表 读写分离配置

    一. MySQL+MyCat分库分表 1 MyCat简介 java编写的数据库中间件 Mycat运行环境需要JDK. Mycat是中间件,运行在代码应用和MySQL数据库之间的应用. 前身: corb ...

  6. docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...

    一.MySQL读写分离主从模式 1. 下载镜像 docker pull mysql 当前最新版本:mysql Ver 8.0.19 for Linux on x86_64 (MySQL Communi ...

  7. 利用MyCAT分库分表

    文章目录 MyCAT分库分表 一.分库分表简介 二.垂直切分---分库 1.思想 2.配置实现 三.水平切分 MyCAT分库分表 一.分库分表简介 在业务数据量过多的时候,而且数据不断持续增长的情况下 ...

  8. MyCat分库分表和读写分离

    文章目录 1.MyCat 1.1.MyCat简介 1.2.Mycat对多数据库的支持 1.3.MyCAT架构 1.4.MyCat分库分表 1.5.MyCat下载与安装 1.5.1.下载mycat 1. ...

  9. mycat分库分表与读写分离

    mycat分库分表与读写分离 Dockerfile搭建mycat 1.创建mycat的配置文件 #新建目录 mkdir /docker/mycat#切换目录 cd /docker/mycat#下载my ...

最新文章

  1. java redis 网络断开_Redis长时间连接后自动断开
  2. 分享丨10年DBA老司机整理的Oracle学习路线图
  3. 开发指南专题十一:JEECG微云快速开发平台--基础用户权限
  4. Android 应用开机自启和无需权限开启悬浮框
  5. UNIX网络编程(第三版 ) 测试代码 7.3
  6. ioctl 详细说明
  7. 自定义“TB_定位访问”子类
  8. dede文章页调用当前栏目链接方法
  9. 前端手残党福利(BootstrapCV大法)
  10. 什么是 SAP BAPI
  11. 学习日记——Quartus工程创建与运行
  12. 一文读懂反向传播算法原理
  13. [原创] 婚纱照PS处理技术精粹(视频教程1.2G免费下载,11个核心技术点)
  14. 一件虚拟连衣裙价值9500美元?然而这只是数字服装的开始……
  15. java大作穿越arpg_动作与角色扮演完美结合 精品ARPG游戏盘点
  16. Error:..\FreeRTOS\queue.c,1088
  17. 注解和注解处理器APT
  18. PS 滤镜算法原理——浮雕效果
  19. java几种对象的区别(PO,POJO,VO,BO,DAO)
  20. html获取数组的前三个元素,web前端:js 获取数组最后一个元素

热门文章

  1. 学术期刊《广西物理》简介及投稿要求
  2. linux中文写作软件,码字写作软件下载 极音创作(码字软件)V1.3.5 linux版 下载-脚本之家...
  3. 云上的今天,AI的未来:影视特效怎么就成了科技企业的宠儿?
  4. 用记事本编写HTML蓝莲花,我的记事本!
  5. ERROR in static/js/0.5d7325513eec31f1e291.js from UglifyJs
  6. 关于大学生早餐情况的调研报告
  7. 一个学计算机应用基础,用微课学·计算机应用基础
  8. 中国科学院计算机所张浩,专家人才库数据----中国科学院计算技术研究所
  9. Linux环境-自动化部署JAVA
  10. 公司内部培训的一些收获