1. 程式人生 > 其它 >資料庫中介軟體 MyCAT 原始碼分析 —— 除錯環境搭建

資料庫中介軟體 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 IDEAFork 出來的倉庫拉取程式碼。拉取完成後,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 的邏輯庫、表、資料節點、資料來源。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<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"> <!-- ‼️‼️‼️ url、user、password 設定成你的資料庫 -->
        </writeHost>
    </dataHost>

</mycat:schema>

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

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
    <system>
        <property name="nonePasswordLogin">0</property> <!-- 0為需要密碼登陸、1為不需要密碼登陸 ,預設為0,設定為1則需要指定預設賬戶-->
        <property name="useHandshakeV10">1</property>
        <property name="useSqlStat">0</property>  <!-- 1為開啟實時統計、0為關閉 -->
        <property name="useGlobleTableCheck">0</property>  <!-- 1為開啟全加班一致性檢測、0為關閉 -->
        <property name="sequnceHandlerType">2</property>
        <property name="processorBufferPoolType">0</property>
        <property name="handleDistributedTransactions">0</property>
        <property name="useOffHeapForMerge">1</property>
        <property name="memoryPageSize">64k</property>
        <property name="spillsFileBufferSize">1k</property>
        <property name="useStreamOutput">0</property>
        <property name="systemReserveMemorySize">384m</property>
        <property name="useZKSwitch">false</property>
    </system>

    <user name="root" defaultAccount="true">
        <property name="password">123456</property>
        <property name="schemas">dbtest</property>
    </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 進行探討。