Mycat的安装与简单使用
一、准备资源
IP | 主机名 | 数据库名 | 安装软件 |
---|---|---|---|
192.168.1.20 | master | master_db1 | mycat,mysql |
192.168.1.21 | node1 | node1_db2 | mysql |
192.168.1.22 | node2 | node2_db3 | mysql |
二、安装MySQL
安装mysql的方式有很多,这里我使用docker来安装mysql。
3台机子上都执行同样的操作
三、连接数据库
创建数据库
local-master创建db1
create database db1;
local-node-1创建db2
create database db2;
local-node-2创建db3
create database db3;
四、安装Mycat
去官网下载mycat,链接http://www.mycat.org.cn/
- 上传Mycat到服务器
- 解压
tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz
- 创建组
groupadd mycat
- 创建一个新的用户,并加入group
useradd -g mycat mycat
- 给新用户设置密码
passwd mycat
- 进入conf
修改server.xml
完整的server.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://org.opencloudb/"> <system> <property name="defaultSqlParser">druidparser</property> </system> <user name="root"> <property name="password">123456</property> <property name="schemas">zdxh</property> </user> </mycat:server>
修改schema.xml
完整的schema.xml
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://org.opencloudb/"> <schema name="zdxh" checkSQLschema="false" sqlMaxLimit="100"> <table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="sharding-by-intfile" /> </schema> <dataNode name="dn1" dataHost="local-master" database="master_db1" /> <dataNode name="dn2" dataHost="local-node-1" database="node1_db2" /> <dataNode name="dn3" dataHost="local-node-2" database="node2_db3" /> <dataHost name="local-master" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.168.1.20:3306" user="root" password="123456"></writeHost> </dataHost> <dataHost name="local-node-1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM2" url="192.168.1.21:3306" user="root" password="123456"></writeHost> </dataHost> <dataHost name="local-node-2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM3" url="192.168.1.22:3306" user="root" password="123456"></writeHost> </dataHost> </mycat:schema>
修改partition-hash-int.txt
10000=0
10010=1
10020=2
- 启动mycat
cd bin
./mycat start
启动成功
五、测试与使用
- navicat连接mycat
这里显示连接成功,但是打不开数据库,后面会提到解决方案,先往后面的步骤继续做
- 创建表
use zdxh;
create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
- 往mycat中插入数据
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(1, 'I am db1',10000);
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(2, 'I am db2',10010);
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(3, 'I am db3',10020);
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(4, 'I am db1',10000);
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(5, 'I am db2',10010);
INSERT INTO EMPLOYEE(ID,NAME,SHARDING_ID) VALUES(6, 'I am db3',10020);
效果
在mycat中插入的6条数据被分散地插入到3个数据库中
六、遇到的问题
问题1
org.opencloudb.config.util.ConfigException: schema zdxh refered by user root is not exist!
原因
schema.xml文件下的schema标签的name属性值忘了改成zdxh
解决
schema.xml文件下的schema标签的name属性值改成zdxh
问题2
navicat连接mycat,显示连接成功,却打不开mycat,提示database not selected的问题
原因
navicat版本的问题
解决
方案1:
如果采用工具连接,1.4,1.3目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。
方案2:使用mysql客户端连接
mysql -uroot -p123456 -P8066 -h192.168.1.20
方案3:使用sqlyog连接工具连接