-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Quick Start
WilliamWei edited this page Apr 29, 2018
·
4 revisions
- 系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。
- tb1表的数据被映射到物理数据库dbtest1的tb1上。
- tb2表的一部分数据被映射到物理数据库dbtest2的tb2上,另外一部分数据被映射到物理数据库dbtest3的tb2 上。
- 如下图所示:
- 软件准备
- 操作系统: Linux或者Windows (推荐在Linux环境下运行Cobar)
- MySQL: http://www.mysql.com/downloads/ (推荐使用5.1以上版本)
- JDK: http://www.oracle.com/technetwork/java/javase/downloads/ (推荐使用1.6以上版本)
- Cobar: coming soon ...
- 数据准备
- 假设本文MySQL所在服务器IP为192.168.0.1,端口为3306,用户名为test,密码为空,我们需要创建schema:dbtest1、dbtest2、dbtest3,table:tb1、tb2,脚本如下:
#创建dbtest1
drop database if exists dbtest1;
create database dbtest1;
use dbtest1;
#在dbtest1上创建tb1
create table tb1(
id int not null,
gmt datetime
);
#创建dbtest2
drop database if exists dbtest2;
create database dbtest2;
use dbtest2;
#在dbtest2上创建tb2
create table tb2(
id int not null,
val varchar(256)
);
#创建dbtest3
drop database if exists dbtest3;
create database dbtest3;
use dbtest3;
#在dbtest3上创建tb2
create table tb2(
id int not null,
val varchar(256)
);
请确保机器上设置了JAVA环境变量JAVA_HOME
- 下载Cobar压缩文件并解压,进入conf目录可以看到schema.xml, rule.xml, server.xml等相关的配置文件
wget https://github.com/alibaba/cobar/releases/download/v1.2.7/cobar-server-1.2.7.tar.gz
tar zxf cobar-server-1.2.7.tar.gz
cd cobar-server-1.2.7 #可以看到bin,conf,lib,logs四个目录
- schema.xml配置如下(注意:schema.xml包含MySQL的IP、端口、用户名、密码等配置,您需要按照注释 替换为您的MySQL信息。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cobar:schema SYSTEM "schema.dtd">
<cobar:schema xmlns:cobar="http://cobar.alibaba.com/">
<!-- schema定义 -->
<schema name="dbtest" dataNode="dnTest1">
<table name="tb2" dataNode="dnTest2,dnTest3" rule="rule1"/>
</schema>
<!--数据节点定义,数据节点由数据源和其他一些参数组织而成。-->
<dataNode name="dnTest1">
<property name="dataSource">
<dataSourceRef>dsTest[0]</dataSourceRef>
</property>
</dataNode>
<dataNode name="dnTest2">
<property name="dataSource">
<dataSourceRef>dsTest[1]</dataSourceRef>
</property>
</dataNode>
<dataNode name="dnTest3">
<property name="dataSource">
<dataSourceRef>dsTest[2]</dataSourceRef>
</property>
</dataNode>
<!--数据源定义,数据源是一个具体的后端数据连接的表示。-->
<dataSource name="dsTest" type="mysql">
<property name="location">
<location>192.168.0.1:3306/dbtest1</location><!--注意:替换为您的MySQLIP和Port-->
<location>192.168.0.1:3306/dbtest2</location><!--注意:替换为您的MySQLIP和Port-->
<location>192.168.0.1:3306/dbtest3</location><!--注意:替换为您的MySQLIP和Port-->
</property>
<property name="user">test</property><!--注意:替换为您的MySQL用户名-->
<property name="password"></property><!--注意:替换为您的MySQL密码--
<property name="sqlMode">STRICT_TRANS_TABLES</property>
</dataSource>
</cobar:schema>
- rule.xml配置如下(本文仅以数字类型的id字段作为拆分字段,将数据拆分到两个库中。)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cobar:rule SYSTEM "rule.dtd">
<cobar:rule xmlns:cobar="http://cobar.alibaba.com/">
<!--路由规则定义,定义什么表,什么字段,采用什么路由算法。-->
<tableRule name="rule1">
<rule>
<columns>id</columns>
<algorithm><![CDATA[func1(${id})]]></algorithm>
</rule>
</tableRule>
<!--路由函数定义,应用在路由规则的算法定义中,路由函数可以自定义扩展。-->
<function name="func1" class="com.alibaba.cobar.route.function.PartitionByLong">
<property name="partitionCount">2</property>
<property name="partitionLength">512</property>
</function>
</cobar:rule>
- server.xml配置如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cobar:server SYSTEM "server.dtd">
<cobar:server xmlns:cobar="http://cobar.alibaba.com/">
<!--定义Cobar用户名,密码-->
<user name="test">
<property name="password">test</property>
<property name="schemas">dbtest</property>
</user>
</cobar:server>
- 启动Cobar,进入bin目录可以看到Cobar的启动、停止与重启脚本
./startup.sh #Cobar进程名为CobarStartup
- 查看logs目录下stdout.log, 启动成功日志如下
10:54:19,264INFO ===============================================
10:54:19,265 INFO Cobar is ready to startup...
10:54:19,265 INFO Startup processors...
10:54:19,443 INFO Startup connector...
10:54:19,446 INFO Initialize dataNodes...
10:54:19,470 INFO dnTest1:0 init success
10:54:19,472 INFO dnTest3:0 init success
10:54:19,473 INFO dnTest2:0 init success
10:54:19,481 INFO CobarManager is started and listening on 9066
10:54:19,483 INFO CobarServer is started and listening on 8066
10:54:19,484 INFO ===============================================
- 访问Cobar同访问MySQL的方式完全相同, 常用访问方式如下(注意:本文将Cobar部署在192.168.0.1这台机 器上,否则请替换为您的Cobar所在IP,其他信息不变)
#命令行
mysql -h192.168.0.1 -utest -ptest -P8066 -Ddbtest
#JDBC(建议5.1以上的mysqldriver版本)
Class.forName("com.mysql.jdbc.Driver");
Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.0.1:8066/dbtest","test", "test");
......
- SQL执行示例,执行语句时与使用传统单一数据库无区别
mysql>show databases;
#dbtest1、dbtest2、dbtest3对用户透明
+----------+
|DATABASE |
+----------+
|dbtest |
+----------+
mysql>show tables;
#dbtest 中有两张表tb1和tb2
+-------------------+
|Tables_in_dbtest1 |
+-------------------+
|tb1 |
|tb2 |
+-------------------+
mysql>insert into tb1(id,gmt) values (1,now());
#向表 tb1插入一条数据
mysql>insert into tb2(id,val) values (1,"part1");
#向表 tb2插入一条数据
mysql>insert into tb2(id,val) values (2,"part1"),(513,"part2");
#向表 tb2同时插入多条数据
mysql>select * from tb1;
#查询表 tb1,验证数据被成功插入
+----+---------------------+
|id |gmt |
+----+---------------------+
| 1 |2012-06-1215:00:42 |
+----+---------------------+
mysql>select * from tb2;
#查询 tb2,验证数据被成功插入
+-----+-------+
|id |val |
+-----+-------+
| 1 |part1 |
| 2 |part1 |
|513 |part2 |
+-----+-------+
mysql>select * from tb2 where id in(1,513);
#根据id 查询
+-----+-------+
|id |val |
+-----+-------+
| 1 |part1 |
|513 |part2 |
+-----+-------+
- 查看后端MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中