由于Cobar遵循MySQL协议,访问Cobar的方式与访问MySQL数据库完全相同
mysql命令行访问如下:
mysql -h127.0.0.1 -utest -ptest -P8066 -Ddbtest
支持JDBC方式访问,支持用户使用JDBC连接池
jdbc:mysql://172.16.88.131:8066/testdb?user=test&password=test
也可以如下:
Class.forName("com.mysql.jdbc.Driver");
Connection conn
=
DriverManager.getConnection("jdbc:mysql://192.0.0.1:8066/dbtest",
"test",
"test")
这样就可以连接到cobar上了,使用和调用mysql一样简单。
在有分库的情况下,Cobar会提取SQL中的路由字段值判断此SQL被路由到哪个一分库执行,假如用户的SQL语句中没有路由字段值,Cobar将会把SQL分发到所有分库执行。
如果当前连接的schema没有拆分表,则SQL语句中显示指定的schema会原样发送给后端MySQL数据库;
如果当前连接的schema包含拆分表, 则SQL语句中显示指定的schema都将被删除掉。
注意:Cobar不允许再同一个连接中切换schema,如果切换的话,cobar会报错
mysql -h127.0.0.1 -utest -ptest -P8066 -Ddbtest
mysql> use db_home;
ERROR 1044 (HY000): Not allowed to change the database!
如果用户想查看Cobar是如何路由自己的SQL语句,只需在explain后加上该SQL,Cobar便会向用户展示该SQL被路由到哪些datanode执行。
mysql> explain select * from tb1 where id in (1, 2);
+-----------+---------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------+
| dnTest1 | select * from tb1 where id in (1, 2) |
+-----------+---------------------------------------+
1 row in set (0.00 sec)
cobar操作要注意:
不支持跨库情况下的join、分页、排序、子查询操作;
SET语句执行会被忽略,事务和字符集设置除外;
分库情况下,insert语句必须包含拆分字段列名;
分库情况下,update语句不能更新拆分字段的值;
不支持SAVEPOINT操作;
使用JDBC时,不支持rewriteBatchedStatements=true参数设置(默认为false);
使用JDBC时,不支持useServerPrepStmts=true参数设置(默认为false);
使用JDBC时,BLOB, BINARY,
VARBINARY字段不能使用setBlob()或setBinaryStream()方法设置参数