1.数据分片; 2.部署mycat服务;3.基于mycat服务创建新库新表.

一,数据分片

1.数据分片,也叫分库分表,即将存放在一台数据库服务器中的数据,按照特定方式进行拆分,分散存放到其它多台服务器中,以分散单台服务器的负载.

2.垂直分割

将单个数据库中的多个表按业务分类,分散存储到不同的数据库中.

3.水平分割

按照表中指定字段的分片规则,将表记录按行切分,分散存储到多个数据库中.

4.Mycat软件介绍及作用

基于java的分布式数据库系统中间件,为高并发环境的分布式存储提供解决方案.mycat适合有大量数据写入的存储需求,支持mysql,Oracle,sqlserver,mongodb等软件,提供数据读写分离和分片服务,是基于阿里巴巴Cobar研发的开源软件.

5.分片规则

6.工作原理:mycat收到sql命令->解析命令涉及到的表->有分片规则->获取sql命令分片字段的值->匹配分片函数

->获取分片列表->转发sql命令到对应的分片服务器执行->收集和处理所有分片结果->响应客户端.

7.mycat目录下的文件结构

二,部署mycat

拓扑图:

192.168.4.50为客户端,在192.168.4.56上部署mycat分布式数据库服务,部署192.168.4.53,192.168.4.54,192.468.4.55作为逻辑库存储数据

在主机4.56上部署mycat:

1. 安装提供mycat服务的软件包

# yum -y install java-1.8.0-openjdk   //安装jdk

# which java   //查看生成的java目录

# java -version   //查看版本

# tar -xvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz //解压

# mv mycat/ /usr/local/   //移动并改名

# ls /usr/local/mycat   //查看生成的mycat目录

2. 修改配置文件

2.1 创建连接用户,定义客户端连接到mycat服务的用户

#vim/usr/local/mycat/conf/server.xml

<user name="root">     //连接mycat的用户名root

<property name="password">123456</property>        //连接密码

<property name="schemas">TESTDB</property>      //逻辑库名

</user>

<user name="user">          //第2个用户名user

<property name="password">user</property>

<property name="schemas">TESTDB</property>

<property name="readOnly">true</property>   //只能读

</user>

2.2 定义数据分片的表table

# vim /usr/local/mycat/conf/schema.xml

<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />   //定义表格company的参数

<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" />  //定义表格hostnew的参数

2.3 定义数据节点dn1,dn2,dn3

<dataNode name="dn1" dataHost="localhost53" database="db1" />

<dataNode name="dn2" dataHost="localhost54" database="db2" />

<dataNode name="dn3" dataHost="localhost55" database="db3" />

2.4 定义数据库服务器IP地址及端口

<dataHost name="localhost53" maxCon="1000" minCon="10" balance="0"

writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<!-- can have multi write hosts -->

<writeHost host="hostM53" url="192.168.4.53:3306" user="admin"

password="123qqq...A">

</writeHost>

</dataHost>

3. 配置数据库服务器

3.1 创建存储的数据库

#mysql -uroot -p123qqq...A -e "create database db1"  //4.53上建库db1

#mysql -uroot -p123qqq...A -e "create database db2"  //4.54上建库db2

#mysql -uroot -p123qqq...A -e "create database db3"  //4.55上建库db3

3.2添加授权用户

# mysql -uroot -p123qqq...A -e 'grant all on *.* to admin@"%" identified by "123qqq...A"'     //分别在4.53,4.54,4.55上创建

# mysql -uroot -p123qqq...A -e 'select host,user from mysql.user' //查看创建的用户授权.       //分别在4.53,4.54,4.55上查看

4.启动mycat服务,并查看服务信息

/usr/local/mycat/bin/mycat start

Netstat -apntul|grep :8806

5.客户端测试配置

5.1连接到mycat

# mysql -h192.168.4.56 -P8066 -uroot -p123456  //客户端4.50上测试

5.2选择库,查看表

mysql> show databases;

mysql> use TESTDB;

mysql> show tables;

+------------------+

| Tables in TESTDB |

+------------------+

| company          |

| customer         |

| customer_addr    |

| employee         |

| goods            |

| hotnews          |

| orders           |

| order_items      |

| travelrecord     |

+------------------+

9 rows in set (0.00 sec)

5.3 测试mycat服务_枚举法

#vim /usr/local/mycat/conf/schema.xml     (不做更改,只是查看该xml文件)

<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"

rule="sharding-by-intfile" />    //以表格employee为例

#vim /usr/local/mycat/conf/rule.xml (不做更改,只是查看该xml文件)

<tableRule name="sharding-by-intfile">

<rule>

<columns>sharding_id</columns>

<algorithm>hash-int</algorithm>

</rule>

</tableRule>

<function name="hash-int"

class="io.mycat.route.function.PartitionByFileMap">

<property name="mapFile">partition-hash-int.txt</property>

</function>

# vim /usr/local/mycat/conf/partition-hash-int.txt

10000=0  (说明: 计算值为10000的时候,分片数据到第1台数据节点dn1存储数据)

10010=1  (说明: 计算值为10010的时候,分片数据到第2台数据节点dn2存储数据)

10020=2  (说明: 计算值为10020的时候,分片数据到第3台数据节点dn3存储数据)    //新增

5.3.1 先停止服务,再重启服务,并查看端口

# /usr/local/mycat/bin/mycat stop

# /usr/local/mycat/bin/mycat start

# netstat -apntul|grep :8066

tcp6   0   0 :::8066         :::*     LISTEN      1701/java

5.3.2 客户端连接到mycat,为表格employee创建表结构

# mysql -h192.168.4.56 -P8066 -uroot -p123456     //客户端登录到mycat服务器192.168.4.56

mysql> create table employee(                    //为employee创建表结构

-> ID int primary key, sharding_id int, name char(6),age int(8)

-> );

Query OK, 0 rows affected (1.23 sec)

mysql> desc employee;

+-------------+---------+------+-----+---------+-------+

| Field       | Type    | Null | Key | Default | Extra |

+-------------+---------+------+-----+---------+-------+

| ID          | int(11) | NO   | PRI | NULL    |       |

| sharding_id | int(11) | YES  |   | NULL    |       |

| name      | char(6) | YES  |    | NULL    |       |

| age        | int(8)  | YES  |    | NULL    |       |

+-------------+---------+------+-----+---------+-------+

4 rows in set (0.01 sec)

5.3.3 在服务器4.53, 4.54, 4.55上查询表格结构是否生成

Mysql>show databases;desc db1;   //在4.53上查看表结构

Mysql>show databases;desc db2;   //在4.54上查看表结构

Mysql>show databases;desc db3;   //在4.55上查看表结构

5.3.4 在表格employee里插入数据

mysql> insert into TESTDB.employee(ID,sharding_id,name,age) values(1,10000,"tom",18),(2,10010,"jack",19),(3,10020,"lucy",20);

Query OK, 3 rows affected (0.15 sec)

5.3.5 分别在4.53, 4.54, 4.55上查看插入的数据

mysql> select * from db1.employee;    //ID为1的记录分配到4.53上存储

+----+-------------+------+------+

| ID | sharding_id | name | age  |

+----+-------------+------+------+

|  1 |       10000 | tom  |   18 |

+----+-------------+------+------+

1 row in set (0.00 sec)

mysql> select * from db2.employee;   //ID为2的记录分配到4.54上存储

+----+-------------+------+------+

| ID | sharding_id | name | age  |

+----+-------------+------+------+

|  2 |       10010 | jack |   19 |

+----+-------------+------+------+

1 row in set (0.00 sec)

mysql> select * from db3.employee;   //ID为3的记录分配到4.55上存储

+----+-------------+------+------+

| ID | sharding_id | name | age  |

+----+-------------+------+------+

|  3 |       10020 | lucy |   20 |

+----+-------------+------+------+

1 row in set (0.00 sec)

5.4 测试mycat服务_求模法

5.4.1 配置schema.xml

<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3  rule="mod-long" />    //蓝色字体需要删除

5.4.2 配置rule.xml文件

<tableRule name="mod-long">

<rule>

<columns>num</columns>     //定义字段名为num

<algorithm>mod-long</algorithm>    //算法为求模

</rule>

<function name="mod-long" class="io.mycat.route.function.PartitionByMod">

<!-- how many data nodes -->

<property name="count">3</property>    //定义服务器的数量,当前有3台,即4.53, 4.54, 4.55

</function>

5.4.3 停止服务,并重新启动,查看端口

# /usr/local/mycat/bin/mycat stop    //停止mycat服务

# netstat -apntul|grep :8066   //查看端口停止状态

# /usr/local/mycat/bin/mycat start    //启动mycat服务

# netstat -apntul|grep :8066    //查看端口启用状态

5.4.4 在客户端(4.50)验证求模分片规则

mysql> create table hotnews(

>num char(10),title char(15),comment char(20)

>);

Query OK, 0 rows affected (1.13 sec)

mysql> desc hotnews;    //查看表结构

mysql> insert into hotnews(num,title,comment) values(3,"sc","xxxx");

Query OK, 1 row affected (0.16 sec)    //插入数据

mysql> insert into hotnews(num,title,comment) values(10,"beijing","yyyy");

Query OK, 1 row affected (0.05 sec)    //插入数据

mysql> insert into hotnews(num,title,comment) values(11,"shanghai","zzzz");

Query OK, 1 row affected (0.05 sec)    //插入数据

mysql> select * from db1.hotnews;      //num为3的记录,分配到4.53存储(算法:3/3,整除了)

+------+-------+---------+

| num  | title | comment |

+------+-------+---------+

| 3    | sc    | xxxx    |

+------+-------+---------+

1 row in set (0.00 sec)

mysql> select * from db2.hotnews;   //num为10的记录,分配到4.54存储(算法:10/3,余3)

+------+---------+---------+

| num  | title   | comment |

+------+---------+---------+

| 10   | beijing | yyyy    |

+------+---------+---------+

1 row in set (0.00 sec)

mysql> select * from db3.hotnews;   //num为11的记录,分配到4.55存储(算法:11/3,余6)

+------+----------+---------+

| num  | title    | comment |

+------+----------+---------+

| 11   | shanghai | zzzz    |

+------+----------+---------+

1 row in set (0.00 sec)

三, 添加新库新表

#vim /usr/local/mycat/bin/mycat/user.xml     //编辑用户文件user.xml

<user name="root">

<property name="password">123456</property>

<property name="schemas">TESTDB,NEWDB</property>    //创建新库NEWDB

</user>

#vim /usr/local/mycat/bin/mycat/schema.xml    //编辑概要文件schema.xml

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

<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />      //为表格company添加一个全局类型

<table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"

rule="sharding-by-intfile" />

</schema>

# /usr/local/mycat/bin/mycat stop    //停服务

# netstat -apntul|grep :8066      //查看端口

# /usr/local/mycat/bin/mycat start   //启动服务

#]# mysql -h192.168.4.56 -P8066 -uroot -p123456   //客户端登录

mysql> create table company( id int,name char(10),address char(15));    //建表

Query OK, 0 rows affected (1.17 sec)

mysql> insert into company(id,name,address) values(1,"sina","beijing");

Query OK, 1 row affected (0.14 sec)  //插入数据

mysql> insert into company(id,name,address) values(2,"baidu","beijing");

Query OK, 1 row affected (0.12 sec)  //插入数据

mysql> insert into company(id,name,address) values(3,"jd","shenzheng");

Query OK, 1 row affected (0.25 sec)  //插入数据

mysql> select * from company;      //由于company是全局类型,故在3台服务器上都能查询到插入的信息

+------+-------+-----------+

| id   | name  | address   |

+------+-------+-----------+

|    1 | sina  | beijing   |

|    2 | baidu | beijing   |

|    3 | jd    | shenzheng |

+------+-------+-----------+

3 rows in set (0.00 sec)

结束

数据库_数据分片与mycat服务的更多相关文章

  1. MyCat 学习笔记 第十二篇.数据分片 之 分片事务处理

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  2. MyCat 学习笔记 第六篇.数据分片 之 按月数据分片

    1 应用场景 Mycat 有很多数据分库规则,接下来几篇就相关觉得常用的规则进行试用与总结. 一般来说,按自然月份来进行数据分片的规则比较适用于商城订单查询,类似最近1周.2周.3个月内的数据.或是报 ...

  3. 数据分片存储,mycat服务器

    关闭防火墙和selinux,配置yum源配置21 .22 数据库(这里以21为例)[root@host21 ~]# tar -xf mysql-5.7.17.tar[root@host21 ~]# y ...

  4. MyCat 学习笔记 第十篇.数据分片 之 ER分片

    1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键 ...

  5. MyCat 学习笔记 第九篇.数据分片 之 数值分布

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值分片也是比较简单,其实这个和数据取摸是类似的实现. 优.缺点同上一篇 2 环境说明 参考  <MyCat 学习笔记>第六篇. ...

  6. MyCat 学习笔记 第八篇.数据分片 之 求摸运算分片

    1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在M ...

  7. 28_数据库_第28天(数据库、表及表数据、SQL语句)_讲义

    今日内容介绍 1.MySQL数据库 2.SQL语句 01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行 ...

  8. MyCat 学习笔记 第七篇.数据分片 之 按数据范围分片

    1 应用场景 Mycat 其实自带了2个数据范围分片的方案,一个是纯数据范围的分片,比如 1至 10000 号的数据放到分片1 ,10001 至 20000号数据放到分片2里. 另一个是数据常量形式的 ...

  9. [转]SQLSERVER存储过程调用不同数据库的数据_存储过程中通过链接服务器访问远程服务器

    本文转自:http://blog.csdn.net/nnaabbcc/article/details/7967761 存储过程调用不同数据库的数据 在存储过程调用不同数据库的数据该如何做,比如在存储过 ...

随机推荐

  1. open-ldap schema (2)

    schema介绍及用途 schema 是OpenLDAP 软件的重要组成部分,主要用于控制目录树中各种条目所拥有的对象类以及各种属性的定义,并通过自身内部规范机制限定目录树条目所遵循的逻辑结构以及定义 ...

  2. Golang - 开篇必须吹牛逼

    目录 Golang - 开篇必须吹牛逼 Go牛逼吗 安装环境 Golang - 开篇必须吹牛逼 (1)我们为什么要学 高并发 深度 || 广度 (2)go学习思路和目标 多打多练 掌握go语言 做一个 ...

  3. SPOJ 1812 LCS2 - Longest Common Substring II (后缀自动机、状压DP)

    手动博客搬家: 本文发表于20181217 23:54:35, 原地址https://blog.csdn.net/suncongbo/article/details/85058680 人生第一道后缀自 ...

  4. hdu 4857 逆向拓扑排序+反向输出

    /*一组测试实例 4 4 2 3 1 2 4 */ #include<stdio.h> #include<string.h> #include<queue> usi ...

  5. 0719show engine innodb status解读

    转自 http://www.cnblogs.com/zengkefu/p/5678100.html 注:以下内容为根据<高性能mysql第三版>和<mysql技术内幕innodb存储 ...

  6. Android学习笔记(8):ViewGroup类

    A ViewGroup is a special view that can contain other views (called children.) The view group is the  ...

  7. Mule ESB-3.Build a webservice proxy

    自从引入ESB后,系统之间不再直接依赖.我负责的这块,主要是解决Webservice的问题.使系统A不再直接依赖系统B的Webservice. 我们选择的产品是Mule ESB.所以自然要使用Mule ...

  8. vs2013+ffmpeg开发环境搭建【转】

    本文转载自:http://blog.csdn.net/spaceyqy/article/details/43115391 每当看到配环境,我就泪流满面,好吧,闲话不多说,进入正题. 1.去官方下载ff ...

  9. Test Doubles - Fakes, Mocks and Stubs.

    https://dev.to/milipski/test-doubles---fakes-mocks-and-stubs This text was originally posted at Prag ...

  10. Sublime Text 2 界面主题 推荐 Flatland

    先搜索下THEME-FLATLAND 安装完后在preferences中选择settings-usr { "color_scheme": "Packages/Theme ...