MyCAT 可以視為“MySQL”集群的企業(yè)級數(shù)據(jù)庫,用來替代昂貴的Oracle集群,其背后是阿里曾經(jīng)開源的知名產(chǎn)品Cobar。MyCAT的目標(biāo)是:低成本的將現(xiàn)有的單機數(shù)據(jù)庫和應(yīng)用平滑遷移到“云”端,解決數(shù)據(jù)存儲和業(yè)務(wù)規(guī)模迅速增長情況下的數(shù)據(jù)瓶頸問題。
一、部署步驟詳解
(1) 用命令行工具或圖形化客戶端,連接mysql,創(chuàng)建DEMO所用三個分片數(shù)據(jù)庫;
CREATE database db1;
CREATE database db2;
CREATE database db3;
(2) 修改my.inf新增以下語句,my.inf 一般會放在/etc/my.cnf 或 /etc/mysql/my.cnf,設(shè)置為Mysql大小寫不敏感,否則可能會發(fā)生表找不到的問題。
lower_case_table_names = 1
(3) 解壓Mycat-server-1.3.0.2-20150105144205-Linux.tar.gz 到/usr/local/mycat
(4) 解壓jdk-7u65-linux-i586.gz,拷貝jdk1.7.0_65 到/usr/local/mycat/
(5) 修改/usr/local/conf/wrap.conf 修改wrapper.Java.command=java為上一步存放路徑
wrapper.java.command=/usr/local/mycat/jdk1.7.0/bin/java
(6) 創(chuàng)建mycat 用戶,改變目錄權(quán)限為mycat
useradd mycat
chown -R mycat.mycat /usr/local/mycat
(7) 修改用戶密碼
passwd mycat
輸入:
(8) 修改/usr/local/conf/schema.xml,URL、用戶名、密碼修改,其余不變 二、運行步驟詳解 (1) 進入 /usr/local/mycat/bin (默認數(shù)據(jù)端口為8066,管理端口為9066) (2) 進入logs目錄,查看日志,如果wrapper.log 報錯 java.NET.BindException: Address already in use 殺掉正在執(zhí)行的相關(guān)java進程 三、使用步驟詳解 (2) 登錄mysql 執(zhí)行以下命令 (3) 表創(chuàng)建測試: mysql> explain create table employee (id int not null primary key,name varchar(100),sharding_id int not null); 創(chuàng)建mycat新連接:ip:10.1.176.104,用戶名:test,密碼:test,端口:8066 打開db1,db2 數(shù)據(jù)庫也可看到已創(chuàng)建表employee (5) 插入數(shù)據(jù)測試 Query OK, 1 row affected (0.03 sec) mysql> explain insert into employee(id,name,sharding_id) values(1,'leader us',10000); (7) 三個分片上都插入了3條數(shù)據(jù) (8) 確認是分片存儲 mysql> explain select * from employee;
<writeHost host="hostM1" url="10.1.176.104:3306" user="root"
password="
執(zhí)行./mycat start
ps -ef|grep java
kill -9 xxx
(1) 進入mysql bin目錄/usr/local/mysql/bin/
./mysql -utest -ptest -h10.1.176.104 -P8066 -DTESTDB
(mycat的用戶賬號和授權(quán)信息是在conf/server.xml文件中配置)
mysql> create table employee (id int not null primary key,name varchar(100),sharding_id int not null);
Query OK, 0 rows affected (0.30 sec)
+-----------+------------------------------------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+------------------------------------------------------------------------------------------------+
| dn1 | create table employee (id int not null primary key,name varchar(100),sharding_id int not null) |
| dn2 | create table employee (id int not null primary key,name varchar(100),sharding_id int not null) |
+-----------+------------------------------------------------------------------------------------------------+
2 rows in set (0.04 sec)
(4) 客戶端軟件使用:navicat
可看到TESTDB數(shù)據(jù)庫下已創(chuàng)建表:employee
mysql> insert into employee(id,name,sharding_id) values(1,'leader us',10000);
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 6
Current database: TESTDB
+-----------+-----------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+-----------------------------------------------------------------------+
| dn1 | insert into employee(id,name,sharding_id) values(1,'leader us',10000) |
+-----------+-----------------------------------------------------------------------+
1 row in set (0.00 sec)
(6) 根據(jù)規(guī)則auto-sharding-long(主鍵范圍)進行分片測試
mysql> explain create table company(id int not null primary key,name varchar(100));
+-----------+---------------------------------------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------------------------------------+
| dn1 | create table company(id int not null primary key,name varchar(100)) |
| dn2 | create table company(id int not null primary key,name varchar(100)) |
| dn3 | create table company(id int not null primary key,name varchar(100)) |
+-----------+---------------------------------------------------------------------+
3 rows in set (0.01 sec)
mysql> explain insert into company(id,name) values(1,'hp');
+-----------+---------------------------------------------+
| DATA_NODE | SQL |
+-----------+---------------------------------------------+
| dn1 | insert into company(id,name) values(1,'hp') |
| dn2 | insert into company(id,name) values(1,'hp') |
| dn3 | insert into company(id,name) values(1,'hp') |
+-----------+---------------------------------------------+
3 rows in set (0.00 sec)
mysql> select * from employee;
+----+-----------+-------------+
| id | name | sharding_id |
+----+-----------+-------------+
| 2 | me | 10010 |
| 4 | mydog | 10010 |
| 1 | leader us | 10000 |
| 3 | mycat | 10000 |
+----+-----------+-------------+
4 rows in set (0.01 sec)
+-----------+----------------------------------+
| DATA_NODE | SQL |
+-----------+----------------------------------+
| dn1 | SELECT * FROM employee LIMIT 100 |
| dn2 | SELECT * FROM employee LIMIT 100 |
+-----------+----------------------------------+
2 rows in set (0.00 sec)