日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建

發布時間:2025/3/21 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在研究mycat源碼之前必須先把環境搭建好。這篇文章的目標就是搭建mycat源碼調試環境。環境主要包括:

  • git
  • jdk
  • maven
  • eclipse
  • mysql

這里假設你知道上面的知識點。我們搭建的環境所處于的操作系統是Windows7+。下面將一步一步講解如何搭建源碼調試環境:

1. 環境搭建

1.1 獲取mycat源碼

mycat源碼托管在github上面,為了以后實時獲取源碼,我們需要先安裝并配置好Git客戶端,請根據以下教程安裝配置好git:

git安裝教程

安裝成功后,我們在本地某個文件路徑下,鼠標右鍵打開Git Bash,執行以下命令將代碼克隆到當前文件路徑:

git clone https://github.com/MyCATApache/Mycat-Server.git
  • 1
  • 1

使用以下命令切換到最新1.6分支:

git checkout -b 1.6 origin/1.6
  • 1
  • 1

如果你對這個項目感興趣并希望為mycat貢獻代碼,那么可以fork mycat代碼到你個人的github上,然后從你自己fork的項目地址上面拉取代碼。

1.2 安裝jdk

jdk版本要求7或者更高。我們需要安裝jdk并配置Java環境變量。jdk的安裝和環境變量的配置請參考:

JDK安裝與環境變量配置

1.3 安裝maven

mycat項目源碼使用maven進行依賴管理、編譯打包。因此我們需要安裝maven并配置好,請參考以下教程進行配置:

Maven的安裝及配置

1.4 安裝配置eclipse

eclipse是開發Java項目常用的IDE,我們使用它來進行源碼閱讀和調試。eclipse可以在eclipse官網下載:?https://www.eclipse.org/downloads/

我個人習慣使用STS——spring?Tool Suite,也是eclipse的一個擴展,可以在這個地址下載:?http://spring.io/tools/sts/

完成后打開eclipse,配置maven使用我們自己下載的maven:

Windows -> Preferences -> Maven -> Installations

點擊Add添加你的maven根目錄,勾選你自己的maven,如下所示:

最后點擊OK確定即可。

eclipse和maven都依賴jdk環境,所以務必在安裝之前先安裝好jdk并配置好相應的環境變量。

1.5 導入mycat源碼

完成上面配置后,就可以導入我們之前拉取的mycat源碼:

File -> Import?選擇?Existing Maven Projects,瀏覽選擇我們clone的mycat源碼,點擊確定開始進行導入。第一次導入需要等待maven下載插件以及mycat項目需要用到的第三方依賴庫,等待時間相對長一點。成功完成導入后的項目如下所示:

1.6 安裝配置mysql

為了能夠更方便地在本地開發環境調試mycat,我們最后還需要在我們的機器上安裝MySQL。建議windows下下載mysql綠色版,然后通過簡單配置完成mysql的安裝,具體參考以下教程:

Windows 下綠色安裝Mysql 5.7 (zip壓縮包)

根據上面教程使用root賬號成功登陸mysql之后,建議修改root密碼,eg:

mysql > set password = password('your password');

?

好了,到這里,我們的環境就算搭建完成了,下面我們將介紹如何在eclipse中根據mycat源碼啟動mycat。

2. IDE啟動mycat

2.1 配置mycat

為了能夠讓mycat順利啟動,我們首先需要進行必要的配置。從github上面clone的源碼在src/main/resources目錄下存在mycat運行所需要配置的文件,有schema.xml、rule.xml和server.xml。這里我們采用最簡方式進行配置:

(1) schema.xml

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"><schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"><table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"rule="mod-long" /></schema><dataNode name="dn1" dataHost="localhost1" database="db1" /><dataNode name="dn2" dataHost="localhost1" database="db2" /><dataNode name="dn3" dataHost="localhost1" database="db3" /><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="localhost:3306" user="root"password="mysql"><!-- can have multi read hosts --><!-- <readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" /> --></writeHost><!-- <writeHost host="hostS1" url="localhost:3316" user="root"password="123456" /> --><!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --></dataHost></mycat:schema>

?

這里使用本地mysql(localhost:3306)進行測試,user為root,密碼是mysql,根據實際情況修改。

(2) rule.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://io.mycat/"><tableRule name="mod-long"><rule><columns>id</columns><algorithm>mod-long</algorithm></rule></tableRule><function name="mod-long" class="io.mycat.route.function.PartitionByMod"><!-- how many data nodes --><property name="count">3</property></function></mycat:rule>

?

(3) server.xml

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mycat:server SYSTEM "server.dtd"> <mycat:server xmlns:mycat="http://io.mycat/"><system><property name="useSqlStat">1</property> <!-- 1為開啟實時統計、0為關閉 --><property name="useGlobleTableCheck">0</property> <!-- 1為開啟全加班一致性檢測、0為關閉 --><property name="defaultSqlParser">druidparser</property><property name="sequnceHandlerType">0</property><!-- <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議--><!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--設置模擬的MySQL版本號--><!-- <property name="processorBufferChunk">40960</property> --><!-- <property name="processors">1</property> <property name="processorExecutor">32</property> --><!--默認為type 0: DirectByteBufferPool | type 1 ByteBufferArena--><property name="processorBufferPoolType">0</property><!--默認是65535 64K 用于sql解析時最大文本長度 --><!--<property name="maxStringLiteralLength">65535</property>--><!--<property name="sequnceHandlerType">0</property>--><!--<property name="backSocketNoDelay">1</property>--><!--<property name="frontSocketNoDelay">1</property>--><!--<property name="processorExecutor">16</property>--><!-- <property name="mutiNodeLimitType">1</property> 0:開啟小數量級(默認) ;1:開啟億級數據排序<property name="mutiNodePatchSize">100</property> 億級數量排序批量<property name="processors">32</property> <property name="processorExecutor">32</property> <property name="serverPort">8066</property> <property name="managerPort">9066</property> <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> --><!--分布式事務開關,0為不過濾分布式事務,1為過濾分布式事務(如果分布式事務內只涉及全局表,則不過濾),2為不過濾分布式事務,但是記錄分布式事務日志--><property name="handleDistributedTransactions">0</property><!--off heap for merge/order/group/limit 1開啟 0關閉--><property name="useOffHeapForMerge">1</property><!--單位為m--><property name="memoryPageSize">1m</property><!--單位為k--><property name="spillsFileBufferSize">1k</property><property name="useStreamOutput">0</property><!--單位為m--><property name="systemReserveMemorySize">384m</property></system><user name="root"><property name="password">mysql</property><property name="schemas">TESTDB</property></user></mycat:server>

?

2.2 mysql數據庫準備

登錄到本地mysql,創建需要的database和table:

create database db1 default charset 'utf8'; create database db2 default charset 'utf8'; create database db3 default charset 'utf8';

?

分別在db1、db2、db3下創建hotnews表:

create table hotnews (id int primary key,title varchar(100),author_id int,create_tm datetime,content text ) engine = innodb default character set = 'utf8';

?

2.3 啟動mycat

到了這一步,所有的準備已經到位,在Eclipse的mycat項目下找到MycatStartup這個類,Run As ->?Java?Application即可跑起一個mycat server。默認mycat server端口8066,管理端口9066。

Eclipse里面使用Ctrl+Shift+T快捷鍵,輸入類名,就可以快速定位到對應的源碼文件。

這個時候使用mysql客戶端工具,執行以下命令登錄mycat:

> mysql -uroot -hlocalhost -P8066 -p > 鍵入密碼mysql
  • ?

成功則表示mycat server調試環境已經部署成功了。好了,接下來以Debug默認運行,然后在你希望debug的位置打上斷點,就可以盡情地閱讀mycat源碼了。

eg:?
所有發往mycat的sql都會經過ServerQueryHandler的query方法,在這個方法首行代碼處打上斷點,然后使用mysql客戶端工具登錄mycat并執行一個sql,程序就會定位到你設置的斷點那里。

3. (可選)編譯mycat軟件包

我們可以通過mycat源碼來編譯得到mycat軟件包,只要我們安裝了maven即可。方法如下:

cmd進入到mycat源碼根目錄,即pom.xml所在目錄,執行以下命令進行編譯打包:

mvn package -Dmaven.test.skip=true

?

-Dmaven.test.skip=true表示忽略mycat的單元測試的執行,這樣可以節省編譯打包時間。

等待執行成功后,可以在mycat源碼根目錄的target子目錄里面,看到如下格式的壓縮包:

Mycat-server-${version}-${buildtime}-${platform}.tar.gz

?

其中${version}表示mycat版本號,${buildtime}為我們執行編譯打包的日期時間,${platform}表示使用的操作系統平臺,取值有win、Linux、mac、solaris和unix。這樣我們就可以拿對應的軟件包到對應的平臺上去部署了。

總結

以上是生活随笔為你收集整理的Mycat源码篇 : 起步,Mycat源码阅读调试环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。