mycat中介軟體進行MySQL資料庫的垂直拆分
阿新 • • 發佈:2020-09-03
垂直拆分——分庫
一個數據庫由很多表的構成,每個表對應著不同的業務,垂直切分是指按照業務將表進行分類,分佈到不同的資料庫上面,這樣也就將資料或者說壓力分擔到不同的庫上面,如下圖:
系統被切分成了,使用者,訂單交易,支付幾個模組。
如何劃分表
一個問題:在兩臺主機上的兩個資料庫中的表,能否關聯查詢?答案:不可以關聯查詢。
分庫的原則:有緊密關聯關係的表應該在一個庫裡,相互沒有關聯關係的表可以分到不同的庫裡
#客戶表 rows:20萬
CREATE TABLE customer(
id INT AUTO_INCREMENT, NAME VARCHAR(200), PRIMARY KEY(id)
);
#訂單表 rows:600萬CREATE TABLE orders(
id INT AUTO_INCREMENT,
order_type INT, customer_id INT,
amount DECIMAL(10,2),
PRIMARY KEY(id)
);
#訂單詳細表rows:600萬
CREATE TABLE orders_detail(
id INT AUTO_INCREMENT, detail VARCHAR(2000), order_id INT,
PRIMARY KEY(id)
);
#訂單狀態字典表 rows:20 CREATE TABLEdict_order_type(
id INTAUTO_INCREMENT,
order_type VARCHAR(200), PRIMARY KEY(id)
);
以上四個表如何分庫?
由於分庫後的位於不同庫裡面的表是不能進行關聯查詢的,所以
客戶表分在一個數據庫,另外三張都需要關聯查詢,分在另外一個數據庫。
實現分庫
1、修改schema配置檔案
… <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <table name="customer" dataNode="dn2" ></table> </schema> <dataNode name="dn1" dataHost="host1" database="orders" /> <dataNode name="dn2" dataHost="host2" database="orders" /> <dataHost name="host1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.140.128:3306" user="root" password="123123"> </writeHost>
</dataHost> <dataHost name="host2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM2" url="192.168.140.127:3306" user="root" password="123123"> </writeHost> </dataHost> …
#如下圖
2、新增兩個空白庫
分庫操作不是在原來的老資料庫上進行操作,需要準備兩臺機器分別安裝新的資料庫
#在資料節點dn1、dn2 上分別建立資料庫orders CREATE DATABASE orders;
3、啟動Mycat
./mycat console
4、訪問Mycat進行分庫
#訪問Mycat
mysql -umycat -p123456 -h 192.168.140.128 -P 8066
#切換到 TESTDB #建立 4 張表
#查看錶資訊,可以看到成功分庫