Mycat——分表分庫組件
系統開發中,資料庫是非常重要的一個點。除了程序的本身的優化,如:SQL語句優化、代碼優化,資料庫的處理本身優化也是非常重要的。主從、熱備、分表分庫等都是系統發展遲早會遇到的技術問題問題。Mycat是一個廣受好評的資料庫中間件,已經在很多產品上進行使用了。希望通過這篇文章的介紹,能學會Mycat的使用。
1.Mycat下載安裝
Mycat解壓後的目錄結構如下:
目錄
說明
2.Mycat架構
Mycat的架構其實很好理解,Mycat是代理,Mycat後面就是物理資料庫。和Web伺服器的Nginx類似。對於使用者來說,訪問的都是Mycat,不會接觸到後端的資料庫。
簡單分表的示例如下:
伺服器
IP
說明
Mycat作為主資料庫中間件,肯定是與代碼弱關聯的,所以代碼是不用修改的,使用Mycat後,資料庫連接是不變的,默認埠是8066。連接方式和普通資料庫一樣,如:jdbc:mysql://192.168.0.2:8066/
3.Mycat具體配置如下:
server.xml
32
32
0.0.0.0
4096
300000
100
druidparser
1
8066
9066
test
TESTDB
user
TESTDB
true
參數
說明
rule.xml
參數
說明
schema:
屬性
說明
table:
屬性
說明
dataNode:
屬性
說明
dataHost:
屬性
說明
4.登錄mycat
mysql -utest -ptest -h127.0.0.1 -P8066 -DTESTDB
測試資料庫:
DROP DATABASE IF EXISTS db01;
CREATE DATABASE db01;
USE db01;
CREATE TABLE users (
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL DEFAULT "",
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
############################################################
DROP DATABASE IF EXISTS db02;
CREATE DATABASE db02;
USE db02;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
############################################################
DROP DATABASE IF EXISTS db03;
CREATE DATABASE db03;
USE db03;
CREATE TABLE item (
id INT NOT NULL AUTO_INCREMENT,
value INT NOT NULL default 0,
addtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
現在通過資料庫查詢資料庫和表,發現只有邏輯資料庫TESTDB而不是db01, db02, db03;而且表也是統一顯示的,而不是分布在不同的實際資料庫中。參考圖片如下:
現在在訪問Mycat在資料庫中插入數據,看數據能否按照前面配置的路由規則進行分表
測試SQL:
insert into users(name,addtime) values("zhangsan",now());
insert into users(name,addtime) values("lisi",now());
insert into item(id,value,addtime) values(1,100,now());
insert into item(id,value,addtime) values(2,100,now());
然後在Mycat上查看是否插入成功,下圖顯示插入成功
在Mycat上查詢數據:
然後登錄實際的資料庫(MySQL埠號3306),看分表是否成功。下圖顯示分表成功
至此Mycat安裝和測試分表分庫結束。功能測試正常。


TAG:落葉飛翔的蝸牛 |