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連接工具連接