MyCAT(一)快速上手-初體驗(yàn)

16年的時(shí)候因?yàn)楣ぷ髟蚬寸裕?jīng)花了一番功夫去了解阿里開源的分庫分表的中間件Corbar的源碼實(shí)現(xiàn)涯曲。
原本想基于Corbar的實(shí)現(xiàn)來寫一個(gè)關(guān)于數(shù)據(jù)庫分庫分表的系列博客塘偎,后來了解到脫胎于Corbar,由一些社區(qū)大牛開發(fā)出了更加強(qiáng)大的MyCAT亚侠,不僅解決了Cobar生產(chǎn)環(huán)境中出現(xiàn)的一些嚴(yán)重的問題胶逢,更加入了很多優(yōu)秀的實(shí)現(xiàn)厅瞎。

本系列文章將由淺入深的學(xué)習(xí)強(qiáng)大的數(shù)據(jù)庫分庫分表中間件MyCAT饰潜。
GitHub: https://github.com/MyCATApache/Mycat-Server
版本:1.6-Release
Mycat權(quán)威指南官方下載: https://github.com/MyCATApache/Mycat-Server/blob/4135f25df8239d52d220529cbf7cb697ede40e12/mycat-definitive-guide.pdf

本篇我們先按步驟來個(gè)初體驗(yàn)。

1和簸、clone 項(xiàng)目到本地彭雾,Checkout Tag 1.6-Release

2、按如下配置schema.xml锁保、server.xml薯酝、rule.xml,跟Corbar配置基本一致爽柒。節(jié)點(diǎn)屬性含義請(qǐng)查閱mycat-definitive-guide.pdf吴菠,在此不做贅述。
schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
        <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="20" 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:3306" user="root"
                   password="xxxx">
        </writeHost>
    </dataHost>
</mycat:schema>

server.xml和rule.xml由于本篇只做簡(jiǎn)單體驗(yàn)浩村,不做配置做葵。

3、按schema.xml配置在本地mysql數(shù)據(jù)庫中建立相應(yīng)的數(shù)據(jù)庫表心墅,如下:


image.png

image.png

image.png

便于各位玩家快速體驗(yàn)酿矢,直接貼出建表語句:

CREATE TABLE `company` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(64) DEFAULT '',
  `market_value` bigint(20) DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;

CREATE TABLE `hotnews` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `title` varchar(64) DEFAULT '',
  `content` varchar(512) DEFAULT '0',
  `time` varchar(8) DEFAULT '',
  `cat_name` varchar(10) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `travelrecord` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `city` varchar(32) DEFAULT '',
  `time` varchar(8) DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

4、運(yùn)行MycatStartup.java嗓化,運(yùn)行成功控制臺(tái)打印如下:


image.png

5棠涮、因?yàn)镸yCAT作為數(shù)據(jù)庫中間代理層統(tǒng)一管理所有的數(shù)據(jù)源谬哀,后端數(shù)據(jù)庫集群對(duì)前端應(yīng)用程序透明刺覆。基本支持各種客戶端直連史煎。本篇我們代理的是MySQL數(shù)據(jù)源谦屑,直接用Navicat for MySQL連接MyCAT服務(wù):


image.png

展開邏輯數(shù)據(jù)庫TESTDB:


image.png

6、針對(duì)各個(gè)數(shù)據(jù)表寫幾條插入語句篇梭,看看執(zhí)行結(jié)果
表travelrecord相關(guān)配置:

<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
    <tableRule name="auto-sharding-long">
        <rule>
            <columns>id</columns>
            <algorithm>rang-long</algorithm>
        </rule>
    </tableRule>
    <function name="rang-long"
        class="io.mycat.route.function.AutoPartitionByLong">
        <property name="mapFile">autopartition-long.txt</property>
    </function>

測(cè)試語句1:

insert into travelrecord(`city`, `time`) values('NANJING', '20180906');

未指定分片列id氢橙,直接報(bào)錯(cuò):


image.png

測(cè)試語句2:

insert into travelrecord(`id`, `city`, `time`) values(1, 'NANJING', '20180906');

執(zhí)行成功,數(shù)據(jù)落入db1.travelrecord

表company相關(guān)配置:

<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />

測(cè)試語句3:

insert into company(`name`, `market_value`) values('yunmanman', 130);

執(zhí)行成功恬偷,數(shù)據(jù)落入db1.travelrecord悍手、db2.travelrecord、db3.travelrecord袍患。
type="global"為全局表坦康,數(shù)據(jù)冗余到各個(gè)分片,避免跨分片join诡延。

表hotnews相關(guān)配置:

        <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
               rule="mod-long" />
    <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>

測(cè)試語句4:

insert into hotnews(`title`, `content`) values('波音飛機(jī)', '波音埃塞俄比亞墜機(jī)');

執(zhí)行成功滞欠,數(shù)據(jù)落入db1.hotnews。
對(duì)比測(cè)試語句1發(fā)現(xiàn)肆良,同樣是未指定分片列id筛璧,加入屬性autoIncrement="true"后 逸绎,主鍵自增對(duì)應(yīng)用透明。


image.png

本篇開胃菜到此結(jié)束夭谤。

轉(zhuǎn)載請(qǐng)備注原文鏈接棺牧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過簡(jiǎn)信或評(píng)論聯(lián)系作者沮翔。
  • 序言:七十年代末陨帆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子采蚀,更是在濱河造成了極大的恐慌昔脯,老刑警劉巖治宣,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡滥壕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門炭臭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來迎膜,“玉大人,你說我怎么就攤上這事神妹⊥窍” “怎么了?”我有些...
    開封第一講書人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵鸵荠,是天一觀的道長(zhǎng)冕茅。 經(jīng)常有香客問我,道長(zhǎng)蛹找,這世上最難降的妖魔是什么姨伤? 我笑而不...
    開封第一講書人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮庸疾,結(jié)果婚禮上乍楚,老公的妹妹穿的比我還像新娘。我一直安慰自己届慈,他們只是感情好徒溪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著金顿,像睡著了一般臊泌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上串绩,一...
    開封第一講書人閱讀 51,573評(píng)論 1 305
  • 那天缺虐,我揣著相機(jī)與錄音,去河邊找鬼礁凡。 笑死高氮,一個(gè)胖子當(dāng)著我的面吹牛慧妄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播剪芍,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼塞淹,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了罪裹?” 一聲冷哼從身側(cè)響起饱普,我...
    開封第一講書人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎状共,沒想到半個(gè)月后套耕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡峡继,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年冯袍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碾牌。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡康愤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出舶吗,到底是詐尸還是另有隱情征冷,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布誓琼,位于F島的核電站检激,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏踊赠。R本人自食惡果不足惜呵扛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一每庆、第九天 我趴在偏房一處隱蔽的房頂上張望筐带。 院中可真熱鬧,春花似錦缤灵、人聲如沸伦籍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帖鸦。三九已至,卻和暖如春胚嘲,著一層夾襖步出監(jiān)牢的瞬間作儿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來泰國打工馋劈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留攻锰,地道東北人晾嘶。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像娶吞,于是被迫代替她去往敵國和親垒迂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355