---
title: 启动和使用Cobar
description: "1. 启动Cobar。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengcobar_04_0012.html
sourcePath: /source/zh/kunpengdbs/ecosystemEnable/MySQL/kunpengcobar_04_0012.html
indexId: 6eb6c28c6c7440a71ccfdf3fcfb67344882ecc6322b166ed64e00a2b576c145b69
---
# 启动和使用Cobar

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

或
```
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。

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

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

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

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

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