鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

启动和使用Cobar

  1. 启动Cobar。
    1
    2
    cd /home/cobar-server-1.2.8-SNAPSHOT/bin
    ./startup.sh
    

    1
    2
    cd /home/cobar-server-1.2.8-SNAPSHOT/bin
    ./restart.sh
    

    Cobar进程名为CobarStartup,验证是否正常启动,可以通过查看Cobar进程以及端口,或查看日志文件。

    • 查看Cobar进程以及端口:
      1
      2
      3
      ps -ef|grep CobarStartup
      netstat -an|grep 8066
      netstat -an|grep 9066
      

    • 查看日志文件:
      1
      2
      cd /home/cobar-server-1.2.8-SNAPSHOT/logs
      cat stdout.log
      

  2. 访问Cobar。
    访问Cobar和访问MySQL的方式相同,常用访问方式如下
    1
    /usr/local/mysql-20/bin/mysql -h192.168.200.56 -utest -ptest -P8066 -Ddbtest
    

    本文将Cobar部署在192.168.200.56这台机器上,请替换为您的Cobar所在IP地址,其他信息不变

  3. 查看数据库及表。
    1
    2
    show databases; #dbtest1、dbtest2、dbtest3对用户透明
    show tables; #dbtest中有两张表tb1和tb2
    

  4. 插入数据并查询。
    1
    2
    3
    4
    5
    insert into tb1 (id, gmt) values (1, now()); #向表tb1插入一条数据
    insert into tb2 (id, val) values (1, "part1"); #向表tb2插入一条数据
    insert into tb2 (id, val) values (2, "part1"), (513, "part2"); #向表tb2同时插入多条数据
    select * from tb1; #查询表tb1,验证数据被成功插入
    select * from tb2; #查询tb2,验证数据被成功插入
    

    SQL中的路由字段在有分库的情况下,Cobar会提取SQL中的路由字段值判断此SQL被路由到哪个分库执行,假如用户的SQL语句中没有路由字段值,Cobar将会把SQL分发到所有分库执行。如果用户将tb2按id拆分成两份放在不同的MySQL实例中,然后通过Cobar执行下述两句SQL,结果便不同。

    mysql>insert into tb2 values (1, "part1");表示向表tb2插入一条数据,由于id为路由字段,Cobar在SQL语句中无法提取id这个字段,因此将会把此SQL分发到两个分库(dbtest2、dbtest3)执行,这样后端两个MySQL分库都会新增一条记录。

    通过后端登录MySQL查看。

    mysql>insert into tb2 (id, val) values (2, "part1");表示向表tb2再插入一条数据,Cobar提取出路由字段id的值为2,根据路由规则会将此SQL语句分发到对应分库中,这样后端只有一个MySQL分库新增记录。

    通过后端登录MySQL查看。

    因此,SQL中显示指定拆分字段非常重要,而且一条记录的拆分字段值不希望被更改。如果用户修改拆分字段值,Cobar将会报错。

  5. 验证Cobar。
    1. 通过MySQL的方式后端登录查看MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中。
      1
      /usr/local/mysql-20/bin/mysql -h192.168.200.56 -uroot -p123456
      

    2. 查看dbtest1库里tb1内容。
      1
      2
      3
      4
      show databases;
      use dbtest1;
      show tables;
      select * from tb1;
      

    3. 查看dbtest2库里tb2内容。
      1
      2
      3
      use dbtest2;
      show tables;
      select * from tb2;
      

    4. 查看dbtest3库里tb2内容。
      1
      2
      3
      use dbtest3;
      show tables;
      select * from tb2;
      

    经过验证:

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