Mycat 垂直拆分--分庫

一個數據庫由很多表的構成,每個表對應着不同的業務,垂直切分是指按照業務將表進行分類, 分佈到不同 的數據庫上面,這樣也就將數據或者說壓力分擔到不同的庫上面,如下圖:

一個問題:在兩臺主機上的兩個數據庫中的表,能否關聯查詢?
答案:不可以關聯查詢

分庫的原則:有緊密關聯關係的表應該在一個庫裏,相互沒有關聯關係的表可以分到不同的庫裏。

 

垂直分庫,不能在老的數據庫上進行,需要在新的空數據庫上進行。

先在兩臺機器上創建好2個數據庫,然後通過Mycat創建好需要的空表(分佈在兩臺機器上的數據庫中)。

最後將老的數據庫上的數據灌到新的2個數據庫上就可以了。

 

Mycat和Mysql環境搭建如前幾篇文章。

主從機IP如下說明:

192.168.1.9       主機   dn1

192.168.1.109   從機   dn2

一. 先修改mycat的scheme.xml配置文件

vim /usr/local/mycat/conf/schema.xml

 schema.xml  配置如下:

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

        <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
              <table name="customer" dataNode="dn2"></table>
        </schema>
        <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
                /> -->
        <dataNode name="dn1" dataHost="localhost1" database="orders" />
        <dataNode name="dn2" dataHost="localhost2" database="orders" />
        <dataHost name="localhost1" 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.1.9:3306" user="root"
                                   password="123456">
                </writeHost>
        </dataHost>
        <dataHost name="localhost2" 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.1.109:3306" user="root"
                                   password="123456">
                </writeHost>
        </dataHost>

</mycat:schema>

 

二. 分別登錄主從機的mysql,創建2個空的數據庫orders

# 在數據節點 dn1、dn2 上分別創建數據庫 orders

# 登錄mysql

cd /usr/local/mysql/bin

./mysql -u root -p

123456

# 創建數據庫orders

CREATE DATABASE orders;

說明:分庫操作不是在原來的老數據庫上進行操作,需要準備兩臺機器分別安裝新的數據庫

三. 啓動 Mycat,開始分庫

mycat登錄:mysql -u mycat -p -h 192.168.1.9 -P 8066

密碼:123456

通過mycat創建如下4張表,建表語句如下: 

#客戶表 rows:10萬 CREATE TABLE customer(

id INT AUTO_INCREMENT,

NAME VARCHAR(200),

PRIMARY KEY(id)

);

創建訂單表 rows:100萬

CREATE TABLE orders(

id INT AUTO_INCREMENT,

order_type INT,

customer_id INT,

amount DECIMAL(10,2),

PRIMARY KEY(id)

);

#訂單詳細表 rows:100萬

CREATE TABLE orders_detail(

id INT AUTO_INCREMENT,

detail VARCHAR(2000),

order_id INT,

PRIMARY KEY(id)

);

#訂單狀態字典表 rows:20

CREATE TABLE dict_order_type(

id INT AUTO_INCREMENT,

order_type VARCHAR(200),

PRIMARY KEY(id)

);

 四. 分庫驗證

如之前的schema.xml配置,customer這個表會被分到dn2這個節點上,即從機上(192.168.1.109).

其他的表會被分配到dn1上去,即主機上(192.168.1.109)。

也就是說通過mycat把mycat邏輯庫裏的4張表分到了不同的兩臺機器上了,成功實現了垂直分庫操作,如下所示:

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章