數據庫中間件MyCAT源碼分析:調試環境搭建

🙂🙂🙂關注微信公衆號:【芋艿的後端小屋】有福利: php

  1. RocketMQ / MyCAT / Sharding-JDBC 全部源碼分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文註釋源碼 GitHub 地址
  3. 您對於源碼的疑問每條留言將獲得認真回覆。甚至不知道如何讀源碼也能夠請教噢
  4. 新的源碼解析文章實時收到通知。每週更新一篇左右

1. 依賴工具

  • Maven
  • Git
  • JDK
  • MySQL
  • IntelliJ IDEA

2. 源碼拉取

從官方倉庫 github.com/MyCATApache… Fork 出屬於本身的倉庫。爲何要 Fork ?既然開始閱讀、調試源碼,咱們可能會寫一些註釋,有了本身的倉庫,能夠進行自由的提交。😈java

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

3. 數據庫配置

咱們要搭建的是非分片表的調試環境,須要建立一個數據庫和表:git

  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 目錄作變動。github

一、在 resources 目錄下新建文件夾 backups ,將原 resources 下的全部文件移到 backups 下,這樣咱們的環境就乾乾淨了。
二、在 resources 目錄下新建 schema.xml 文件,配置 MyCAT 的邏輯庫、表、數據節點、數據源。sql

<?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>複製代碼

三、在 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 啓動

一、在 java 目錄下新建 debugger 包,和原先已存在的包作區分。
二、在 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);
    }

}複製代碼

三、運行 MycatStartupTest.java ,當看到輸出日誌 MyCAT Server startup successfully. see logs in logs/mycat.log 即爲啓動成功。微信

截止目前,test 目錄以下:工具

test目錄.png
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 進行探討。

相關文章
相關標籤/搜索