歡迎光臨
每天分享高質量文章

資料庫中介軟體 MyCAT 原始碼分析 —— 除錯環境搭建

本文主要基於 MyCAT 1.6.5 正式版

  • 1. 依賴工具

  • 2. 原始碼拉取

  • 3. 資料庫配置

  • 4. MyCat 配置

  • 5. MyCAT 啟動

  • 6. MyCAT 測試

  • 7. 交流


友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【芋艿】搞基嗨皮。

友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【芋艿】】搞基嗨皮。

友情提示:歡迎關註公眾號【芋道原始碼】。?關註後,拉你進【原始碼圈】微信群和【芋艿】】搞基嗨皮。


1. 依賴工具

  • Maven

  • Git

  • JDK

  • MySQL

  • IntelliJ IDEA

2. 原始碼拉取

從官方倉庫 https://github.com/MyCATApache/Mycat-Server Fork 出屬於自己的倉庫。為什麼要 Fork ?既然開始閱讀、除錯原始碼,我們可能會寫一些註釋,有了自己的倉庫,可以進行自由的提交。?

使用 IntelliJ IDEA 從 Fork 出來的倉庫拉取程式碼。拉取完成後,Maven 會下載依賴包,可能會花費一些時間,耐心等待下。

3. 資料庫配置

我們要搭建的是非分片表的除錯環境,需要建立一個資料庫和表:

  1. 建立資料庫:db01 。

  2. 建立資料庫表:travelrecord 。

CREATE TABLE `travelrecord` (
 `id` bigint(20) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) CHARACTER SET latin1 DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_bin

4. MyCAT 配置

為了避免對實現原始碼產生影響,我們選擇對 test 目錄做變更。

1、在 resources 目錄下新建檔案夾 backups ,將原 resources 下的所有檔案移到 backups 下,這樣我們的環境就乾乾凈了。 
2、在 resources 目錄下新建 schema.xml 檔案,配置 MyCAT 的邏輯庫、表、資料節點、資料源。



<mycat:schema xmlns:mycat="http://io.mycat/">

   <schema name="dbtest" checkSQLschema="true" sqlMaxLimit="100">
       <table name="travelrecord" dataNode="dn1" autoIncrement="true" primaryKey="id" />
   schema>



   <dataNode name=“dn1” dataHost=“localhost1” database=“db1” />

   <dataHost name=“localhost1” maxCon=“1000” minCon=“10” balance=“0”
             writeType=“0” dbType=“mysql” dbDriver=“native” switchType=“1” slaveThreshold=“100”>

       <heartbeat>select user()heartbeat>
       <writeHost host=“hostM1” url=“127.0.0.1:33061” user=“root” password=“123456”>
       writeHost>
   dataHost>

mycat:schema>

3、在 resources 目錄下新建 server.xml 檔案,配置 MyCAT 系統配置。



<mycat:server xmlns:mycat="http://io.mycat/">
   <system>
       <property name="nonePasswordLogin">0property>


       <property name=“useHandshakeV10”>1property>
       <property name=“useSqlStat”>0property>  
       <property name=“useGlobleTableCheck”>0property>  
       <property name=“sequnceHandlerType”>2property>
       <property name=“processorBufferPoolType”>0property>
       <property name=“handleDistributedTransactions”>0property>
       <property name=“useOffHeapForMerge”>1property>
       <property name=“memoryPageSize”>64kproperty>
       <property name=“spillsFileBufferSize”>1kproperty>
       <property name=“useStreamOutput”>0property>
       <property name=“systemReserveMemorySize”>384mproperty>
       <property name=“useZKSwitch”>falseproperty>
   system>

   <user name=“root” defaultAccount=“true”>
       <property name=“password”>123456property>
       <property name=“schemas”>dbtestproperty>
   user>

mycat:server>

5. MyCAT 啟動

1、在 java 目錄下新建 debugger 包,和原先已存在的包做區分。 
2、在 debbuger 包下新建 MycatStartupTest.java :

package debugger;

import io.mycat.MycatStartup;

/**
* {@link io.mycat.MycatStartup}測試
*
* Created by yunai on 2017/5/22.
*/

public class MycatStartupTest {

   public static void main(String[] args) {
       MycatStartup.main(args);
   }

}

3、執行 MycatStartupTest.java ,當看到輸出日誌 MyCAT Server startup successfully. see logs in logs/mycat.log 即為啟動成功。

截止目前,test 目錄如下:

test目錄.png

6. MyCAT 測試

除錯環境已經搭建完成,我們看看是否正確。

使用 MySQL 客戶端連線 MyCAT :

  • HOST :127.0.0.1

  • PORT :8066

  • USERNAME :root

  • PASSWORD :123456

mysql> insert into travelrecord(name) values ('haha');
Query OK, 1 rows affected (0.01 sec)

mysql> select * from travelrecord;
+--------------------+------+
| id                 | name |
+--------------------+------+
| 866707181398003712 | haha |
+--------------------+------+
1 rows in set (0.05 sec)

成功。???

7. 交流

感謝閱讀、收藏、關註。 
知其然知其所以然。學習 MyCAT 會是一段很愉快的旅程。如果有你的交流,相信會更加愉快。歡迎新增微信:wangwenbin-server 進行探討。

贊(0)

分享創造快樂