Skip to content

Quick Start

WilliamWei edited this page Apr 29, 2018 · 4 revisions

场景描述

  • 系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。
  • tb1表的数据被映射到物理数据库dbtest1的tb1上。
  • tb2表的一部分数据被映射到物理数据库dbtest2的tb2上,另外一部分数据被映射到物理数据库dbtest3的tb2 上。
    • 如下图所示:

步骤一:环境准备

  • 软件准备
  • 数据准备
    • 假设本文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)
);

步骤二:部署和配置Cobar

请确保机器上设置了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

  • 启动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,验证数据分布在不同的库中
Clone this wiki locally