mycat分片部署例子
来源:互联网 发布:上淘宝怎么用花呗付款 编辑:程序博客网 时间:2024/06/15 22:09
参考:https://www.cnblogs.com/raphael5200/p/5884931.html
前提:已经安装好mysql
一、下载mycat
1、下载mycat:http://www.mycat.io/
2、下载到/usr/local后执行解压Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar -xzvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
进入mycat目录
cd /usr/local/Mycat
启动mycat
./bin/mycat start
可以查看mycat的状态
./bin/mycat status
默认情况下mycat的配置文件指向的mysql数据库的连接信息可能不符合实际情况,所以此处运行有可能会是吧
3、mycat的配置文件
./conf/schema.xml 中定义逻辑库,表、分片节点等内容.
./conf/rule.xml 中定义分片规则.
./conf/server.xml 中定义用户以及系统相关变量,如端口等
二、配置mycat
1、在mysql数据库中创建3个数据库,模拟mycat分片
CREATE database db1;CREATE database db2;CREATE database db3; -- 注意:若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。-- 在MySQL的配置文件/etc/my.cnf 的[mysqld] 中增加一行lower_case_table_names = 1
mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || db1 || db2 || db3 || mysql || performance_schema || sys |+--------------------+7 rows in set (0.01 sec)
2、修改mycat的schema.xml文件
<!DOCTYPE mycat:schema SYSTEM "schema.dtd"><mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"> <!-- auto sharding by id (long) --> <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" /> <!-- global table is auto cloned to all defined data nodes ,so can join with any table whose sharding node is in the same data node --> <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /> <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /> <!-- random sharding using mod sharind rule --> <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" rule="mod-long" /> <!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global" needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3" rule="mod-long" /> --> <table name="employee" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile" /> <table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile"> <childTable name="orders" primaryKey="ID" joinKey="customer_id" parentKey="id"> <childTable name="order_items" joinKey="order_id" parentKey="id" /> </childTable> <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" parentKey="id" /> </table> <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate" /> --> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <dataNode name="dn1" dataHost="localhost1" database="db1" /> <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> <!-- can have multi write hosts --> <writeHost host="hostM1" url="localhost:3306" user="root" password="123456"> <!-- can have multi read hosts --> <!-- <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" /> --> </writeHost> <!--<writeHost host="hostS1" url="localhost:3316" user="root" password="123456" /> --> <!-- <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)配置中schema节点,相当于定义了一个mycat的逻辑库(类似mysql中的一个数据库),这里用默认的TESTDB
(2)schema节点中的table,相当于该TESTDB里面的表
(3)dataNode节点指定数据节点,name属性表示节点名,dataHost属性表示数据主机,database属性表示数据主机中的数据库名
(4)dataHost节点配置具体的数据主机的信息,通过writeHost可以指定多个写操作的mysql数据库(前提这些数据库已经做了主从配置),同理readHost可以直接读操作的mysql数据库。
具体的节点属性配置,可以到官网查看说明文档
3、查看分片规则
这里我使用的是schema里面的
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
这个表travelrecord,它的分片规则是auto-sharding-long
查看rule.xml找到对应的分片规则
<tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule>再查找规则的方法rang-long
<function name="rang-long"class="io.mycat.route.function.AutoPartitionByLong"><property name="mapFile">autopartition-long.txt</property></function>查看autopartition-long.txt文件
vim ./conf/autopartition-long.txt
# range start-end ,data node index# K=1000,M=10000.0-500M=0500M-1000M=11000M-1500M=2
0-500w在分片1
500-1000W在分片2
1000W-1500w在分片3
这里应该指的是主键id的取值范围
三、尝试插入数据
连接到mycat,注意是mycat,端口是8066
mysql -uroot -P8066 -h127.0.0.1 -DTESTDB -p123456
查看下物理表
mysql> show tables;+------------------+| Tables in TESTDB |+------------------+| company || customer || customer_addr || employee || goods || hotnews || orders || order_items || travelrecord |+------------------+9 rows in set (0.00 sec)
创建表
mysql> create table travelrecord (id bigint not null auto_increment primary key,name varchar(100));Query OK, 0 rows affected (3.84 sec)
然后db1、db2、db3都会创建这个表
插入数据
下面我们分别向表中插入三条数据分别ID是 100,6000000,11000000,看是否正常分配到三个表中
insert
into
travelrecord(id,
name
)
values
(100,
'lucy'
);
insert
into
travelrecord(id,
name
)
values
(6000000,
'lily'
);
insert
into
travelrecord(id,
name
)
values
(11000000,
'tom'
);
mysql> insert into travelrecord(id,name) values(100,'lucy');Query OK, 1 row affected (0.07 sec)mysql> insert into travelrecord(id,name) values(6000000,'lily');Query OK, 1 row affected (0.01 sec)mysql> insert into travelrecord(id,name) values(11000000,'tom');Query OK, 1 row affected (0.00 sec)
现在分别查看db1、db2、db3的数据库,是否分别插入一条数据
现在连到mysql数据库
mysql -uroot -p
mysql> select * from db1.travelrecord;+-----+------+| id | name |+-----+------+| 100 | lucy |+-----+------+1 row in set (0.00 sec)mysql> select * from db2.travelrecord;+---------+------+| id | name |+---------+------+| 6000000 | lily |+---------+------+1 row in set (0.00 sec)mysql> select * from db3.travelrecord;+----------+------+| id | name |+----------+------+| 11000000 | tom |+----------+------+1 row in set (0.00 sec)
分片存储成功
详细深入学习可以到官网下载官方文档
- mycat分片部署例子
- mycat分片
- Mycat学习实战-Mycat分片
- mycat 离散分片 -> 枚举分片
- mycat 离散分片(枚举分片)
- mycat分片JOIN,分片规则
- mycat+mysql分片
- mycat分片规则
- Mycat 月分片方法
- mycat常用分片规则
- MyCat分片算法学习
- mycat 分片规则
- mycat+mysql分片
- mycat部署
- Mycat范围分片设置默认分片
- mycat 连续分片 -> 自定义数字范围分片
- MyCAT常用分片规则之分片枚举
- mycat 取模分片,ER分片
- poj2002——Squares
- Eclipse安装wordwrap设置自动换行
- Angular4_管道转换大小写
- 深入理解Spring--动手实现一个简单的SpringIOC容器-注解版
- CS 400 Restricted Permutation 排列,DP计数
- mycat分片部署例子
- 封装:钩子注册全局组合快捷键
- 把单链表按某值划分成左边小,中间相等,右边大的形式,时间O(n),空间O(1)
- pyCharm、Webstorm,IDEA最新2017激活码
- Anaconda学习使用总结
- Django中直接执行SQL语句
- 关于Fisher信息阵自然梯度摘录
- CSS 变量教程
- JPEG系列二 JPEG文件中的EXIF(上)