启动和使用Cobar
- 启动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
- 查看Cobar进程以及端口:
- 访问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地址,其他信息不变。
- 查看数据库及表。
1 2
show databases; #dbtest1、dbtest2、dbtest3对用户透明 show tables; #dbtest中有两张表tb1和tb2
- 插入数据并查询。
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将会报错。
- 验证Cobar。
- 通过MySQL的方式后端登录查看MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中。
1
/usr/local/mysql-20/bin/mysql -h192.168.200.56 -uroot -p123456
- 查看dbtest1库里tb1内容。
1 2 3 4
show databases; use dbtest1; show tables; select * from tb1;
- 查看dbtest2库里tb2内容。
1 2 3
use dbtest2; show tables; select * from tb2;
- 查看dbtest3库里tb2内容。
1 2 3
use dbtest3; show tables; select * from tb2;
经过验证:
系统对外提供的数据库名是dbtest,并且其中有两张表tb1和tb2。tb1表的数据被映射到物理数据库dbtest1的tb1上,tb2表的一部分数据被映射到物理数据库dbtest2的tb2上,另外一部分数据被映射到物理数据库dbtest3的tb2上。
- 通过MySQL的方式后端登录查看MySQL数据库dbtest1,dbtest2和dbtest3,验证数据分布在不同的库中。