Mycat數據庫中間件初體驗

    Mycat是阿里開源的數據庫中間件,用java語言編寫,目前是1.x版本,2.0版本正在研發中。

    Mycat支持的數據庫很多,目前常用的基本都包含了,mysql,postgresql,sqlserver,oracle,db2等等。Mycat的作用和其他中間件一樣,最簡單的功能來說,就是支持分庫功能,這個在海量數據的應用中非常方便,無需我們人爲編碼來進行分庫分表,直接通過連接Mycat,他幫我屏蔽了底層實現細節,我們就像普通數據庫一樣去使用,無需關心怎麼對應物理數據庫中的具體哪個庫或者哪張表。

    這裏以mysql數據庫爲例,我們通過Mycat來連接mysql,實現分庫功能。

    準備工作:

    1、安裝jdk,因爲Mycat是java語言編寫,運行依賴jre。

    2、安裝mysql。其實不用按照官方文檔或者其他博客,需要安裝mysql主從複製集羣,單機版的mysql也可以。

    3、安裝Mycat。下載github或者官網的壓縮包解壓即可運行。

    這裏我的環境裏面有了jdk以及mysql,只需要下載Mycat,這裏mysql的用戶名密碼是huali/huali2019,mysql數據庫安裝在本機,因此host就是127.0.0.1,端口默認3306。這裏有必要區分一下Mycat連接的用戶名和密碼,默認是root/123456,端口是8066。

    這個實驗的目的是驗證Mycat的分庫功能,我們首先連接mysql,在上面建立三個數據庫分別爲:db1,db2,db3,爲後面Mycat啓動做準備。

    

    此時,db1,db2,db3中均是沒有表的:

     

    接着,我們修改Mycat的配置文件,conf目錄下的schema.xml,指定會做分庫的表,以及數據庫連接信息:

     

    table指定了會分庫的表,使用默認的規則auto-sharding-long,即5,000,000條記錄爲一組,會存放在db1,超過5,000,000條記錄存放在db2中,超過10,000,000條記錄存放在db3中。

    在dataNode中,我們指定了三個數據庫,就是前面我們在mysql中提前創建的。

    在dataHost中,我們只需要指定一個writeHost即可,這裏既可以寫入數據,也可以讀取數據,就是官網配置中的主從複製中的主節點,這裏因爲是單機版的mysql,這裏就填寫一個主機信息即可。其中,標註爲<!-- -->的是註解,我們不用關注。另外,在Mycat中,對應的數據庫是TESTDB,在這裏的schema標籤體中,一開始就聲明瞭。

    Mycat提供了訪問他的數據庫用戶名和密碼,默認有一個root/123456的用戶名和密碼。在server.xml配置文件中,我們可以看到相關配置信息:

         

    至此,分庫分表的準備工作已經就緒,就等着啓動Mycat,然後進入Mycat中進行操作。 

    啓動Mycat,命令 bin/mycat start

    

    進入Mycat,前面提到過,使用Mycat就和使用mysql一樣,我們也是通過mysql命令進入命令行,只不過這時候,連接信息是使用的Mycat,不是物理數據庫mysql的。

     

    查看數據庫,發現只有TESTDB,這時候連接TESTDB,然後新建表users

    mysql> create table users (id int primary key,name varchar(20),age int);

        

    這時候,我們再回過頭來看mysql數據庫db1,db2,db3中自動創建了數據表users:

     

    繼續在Mycat中操作,我們插入三條記錄,分別是id爲1,5000001,10000001的記錄,看看他們最終存入mysql的庫是否是db1,db2,db3各一條記錄。

    mysql>insert into users (id,name,age) values (1,'aa',18),(5000001,'bb',20),(10000001,'cc',33);

         

    在Mycat這裏查看三條記錄都在users表中,這是正常的,我們最後在物理存儲庫mysql中看看三條記錄的分佈:

     

    可以看到,按照5,000,000記錄的界限爲分割依據,三條記錄分別進入了三個數據庫中。驗證了Mycat分庫的功能。 

    分庫只是Mycat的一種功能,Mycat還提供了很多其他的功能,比如分佈式事務(XA)。

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