mycat 垂直切分和水平切分配置示例

原创 2016年08月28日 16:15:17

mycat 垂直切分和水平切分配置示例

首先是数据库表的分布:
192.168.0.83:db1数据库 test1表;db3数据库 user表 user_detail表
192.168.0.165:db1数据库 test2表;db3数据库 user表 user_detail表
sql:

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50713
Source Host           : localhost:3306
Source Database       : db1

Target Server Type    : MYSQL
Target Server Version : 50713
File Encoding         : 65001

Date: 2016-08-26 17:23:56
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `test1`
-- ----------------------------
DROP TABLE IF EXISTS `test1`;
CREATE TABLE `test1` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test1
-- ----------------------------


/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50713
Source Host           : localhost:3306
Source Database       : db3

Target Server Type    : MYSQL
Target Server Version : 50713
File Encoding         : 65001

Date: 2016-08-26 17:24:04
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(11) NOT NULL,
  `user_id` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------

/*
Navicat MySQL Data Transfer

Source Server         : localhost
Source Server Version : 50713
Source Host           : localhost:3306
Source Database       : db3

Target Server Type    : MYSQL
Target Server Version : 50713
File Encoding         : 65001

Date: 2016-08-26 17:24:18
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `user_detail`
-- ----------------------------
DROP TABLE IF EXISTS `user_detail`;
CREATE TABLE `user_detail` (
  `id` int(11) NOT NULL,
  `user_id` varchar(255) DEFAULT NULL,
  `detail` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user_detail
-- ----------------------------


/*
Navicat MySQL Data Transfer

Source Server         : song
Source Server Version : 50713
Source Host           : 192.168.0.165:3306
Source Database       : db1

Target Server Type    : MYSQL
Target Server Version : 50713
File Encoding         : 65001

Date: 2016-08-26 17:24:27
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `test2`
-- ----------------------------
DROP TABLE IF EXISTS `test2`;
CREATE TABLE `test2` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of test2
-- ----------------------------

schema.xml文件:

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



         <schema name="qs" checkSQLschema="false" sqlMaxLimit="100">
                <!-- 垂直切分 -->
                <table name="test1" primaryKey="id" type="global" dataNode="nodeTest1" />
                <table name="test2" primaryKey="id" type="global" dataNode="nodeTest2" />

                <!-- 全局表的配置如下(比如配置文件的数据,数据不大很少变动的,但是经常用到查询的) -->
                <!-- <table name="t_area" primaryKey="id" type="global" dataNode="dn1,dn2" /> -->

                <!-- 水平切分 -->
                <!-- ER分片表:如user表和user_detail表的关联字段user_id;保证相同user_id的数据在同一块片区上 -->
                <table name="user" primaryKey="user_id" dataNode="nodeUser01,nodeUser02" rule="mod-long">
                    <childTable name="user_detail" primaryKey="id" joinKey="user_id" parentKey="user_id" />
                </table>
         </schema>




         <dataNode name="nodeUser01" dataHost="dataHost01" database="db3" />
         <dataNode name="nodeUser02" dataHost="dataHost02" database="db3" />

         <dataNode name="nodeTest1" dataHost="dataHost01" database="db1" />
         <dataNode name="nodeTest2" dataHost="dataHost02" database="db1" />



        <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.0.83:3306" user="root" password="root"/>
        </dataHost>

        <dataHost name="dataHost02" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native">
                <heartbeat>select user()</heartbeat>
                <writeHost host="hostM1" url="192.168.0.165:3306" user="root" password="root"/>
        </dataHost>

</mycat:schema>

注: rule=”mod-long” 分片规则是根据分片字段求模运算;
分片规则有:固定分片hash,范围约定,一致性hash,按日期范围等。
详见官网文档 http://www.mycat.org.cn/document/Mycat_V1.6.0.pdf

测试:
C:\Program Files\MySQL\MySQL Server 5.7\bin>mysql -uroot -proot -hlocalhost -P8066 -Dqs
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.5.8-mycat-1.4-release-20151019230038 MyCat Server (OpenCloundDB)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql> show databases;
+———-+
| DATABASE |
+———-+
| qs |
+———-+
1 row in set (0.00 sec)

mysql> show tables;
+————–+
| Tables in qs |
+————–+
| test1 |
| test2 |
| user |
| user_detail |
+————–+
4 rows in set (0.00 sec)

版权声明:本文为博主原创文章,未经博主允许不得转载。

Mycat之——读写分离+垂直切分+水平切分+er分片+全局表 测试

今天,给大家带来一篇基于Mycat的读写分离+垂直切分+水平切分+er分片+全局表 测试 ,我们直接进入主题 读写分离:利用最基础的mysql主从复制,事务性的查询无法分离出去(因为会导致数据不一致...
  • l1028386804
  • l1028386804
  • 2017年07月10日 20:45
  • 1594

Mycat 水平分表,垂直分表实践(2)

1,迁移数据举例说明,比如一个博客数据库数据表如下: 这里水平拆分,垂直拆分,只是做个简单的实验,真正的线上业务要根据情况,数据进行拆分。 mycat提供了数据库垂直拆分和水平拆分的方案,对于数据迁...
  • freewebsys
  • freewebsys
  • 2015年03月26日 13:50
  • 6845

mycat是什么鬼?垂直切分?水平切分?

mycat是什么鬼mycat是国人开发的一款开源的数据库中间件,他的作用就是伪装成一个真的数据库,然后在它背后,连的是多种类型,集群分布式的真实数据库。他的体系结构就像下面:需要理解mycat的几个概...
  • yingxiake
  • yingxiake
  • 2016年06月17日 08:59
  • 4337

由一次mycat+mysql水平拆分集群问题引发的思考

近段时间部署和测试了一个mycat+4 Percona+tokudb的水平拆分集群,前段应用是将一类奖状数据不断地写入到这个库中,只有insert操作,前几天运行状态还比较好。 从昨天开始,由...
  • yumushui
  • yumushui
  • 2015年11月26日 18:59
  • 1181

数据库垂直和水平切分

前言 通过MySQLReplication功能所实现的扩展总是会受到数据库大小的限制,一旦数据库过于庞大,尤其是当写入过于频繁,很难由一台主机支撑的时候,我们还是会面临到扩展瓶颈。这时候,我们就必须...
  • holyandyqqqq
  • holyandyqqqq
  • 2014年10月08日 11:13
  • 1170

数据库的垂直切分和水平切分

数据切分可以是物理上的,对数据通过一系列的切分规则将数据分布到不同的DB服务器上,通过路由规则路由访问特定的数据库,这样一来每次访问面对的就不是单台服务器了,而是N台服务器,这样就可以降低单台机器的负...
  • kobejayandy
  • kobejayandy
  • 2013年04月08日 22:39
  • 14404

Mycat水平拆分之十种分片规则

水平切分分片实现   配置schema.xml  在同一个mysql数据库中,创建了三个数据库 testdb1,testdb2,testdb3。并在每个库中都创建了user表     ...
  • kingice1014
  • kingice1014
  • 2017年07月26日 11:49
  • 586

重构--先垂直水平切分后的落地之泛化思维

水平切分后. 支付分成两大块: 支付记录和回调, 折扣计算和维护. 支付记录这块不依赖订单信息. 折扣计算折扣和具体的折扣业务相关. 券计算和券维护. 需要泛化. 将之前的voucherAmou...
  • fei33423
  • fei33423
  • 2016年05月17日 16:10
  • 266

数据库垂直拆分 水平拆分

当我们使用读写分离、缓存后,数据库的压力还是很大的时候,这就需要使用到数据库切分了。                  数据库切人简单来说,就是指通过某种特定的条件,按照某个维度,将我们存放在同一个数...
  • Jerome_s
  • Jerome_s
  • 2016年09月10日 08:48
  • 3890

mycat 垂直切分和水平切分配置示例

mycat 垂直切分和水平切分配置示例首先是数据库表的分布: 192.168.0.83:db1数据库 test1表;db3数据库 user表 user_detail表 192.168.0.165:...
  • qiaoshuai0920
  • qiaoshuai0920
  • 2016年08月28日 16:15
  • 1129
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mycat 垂直切分和水平切分配置示例
举报原因:
原因补充:

(最多只允许输入30个字)