MyCat

一掏父、MyCat

? ? 1.簡介

????????MyCat是目前最流行的基于Java語言編寫的數(shù)據(jù)庫中間件鸯匹,是要給實(shí)現(xiàn)了MySQL協(xié)議的服器渺氧,前端用戶可以把它看作是一個(gè)數(shù)據(jù)庫代理洞渔,用MySQL客戶端工具和命令行訪問嫂沉,而其后端可以用MySQL原生協(xié)議與多個(gè)MySQL服務(wù)器通信稽寒,也可以同JDBC協(xié)議與大多數(shù)主流數(shù)據(jù)庫服務(wù)器通信,其核心功能是分庫分表趟章,配合數(shù)據(jù)庫的主從模式還可以實(shí)現(xiàn)讀寫分離

????????MyCat 是基于阿里開源的 Cobar 產(chǎn)品而研發(fā)杏糙,Cobar 的穩(wěn)定性、可靠性蚓土、優(yōu)秀的架構(gòu)和 性能以及眾多成熟的使用案例使得 MyCat 變得非常的強(qiáng)大宏侍。????

????????MyCat 發(fā)展到目前的版本,已經(jīng)不是一個(gè)單純的 MySQL 代理了蜀漆,它的后端可以支持 MySQL谅河、SQL Server、Oracle确丢、DB2旧蛾、PostgreSQL 等主流數(shù)據(jù)庫,也支持 MongoDB 這種新型 NoSQL 方式的存儲蠕嫁,未來還會支持更多類型的存儲锨天。而在最終用戶看來,無論是那種存儲方 式剃毒,在 MyCat 里病袄,都是一個(gè)傳統(tǒng)的數(shù)據(jù)庫表,支持標(biāo)準(zhǔn)的 SQL 語句進(jìn)行數(shù)據(jù)的操作赘阀,這樣一來益缠,對前端業(yè)務(wù)系統(tǒng)來說,可以大幅降低開發(fā)難度基公,提升開發(fā)速度幅慌。

????????MyCat 官網(wǎng):http://www.mycat.io/

? ? 2.MyCate的優(yōu)勢

????數(shù)據(jù)量級

????????單一的 MySQL 其數(shù)據(jù)存儲量級和操作量級有限. Mycat 可以管理若干 MySQL 數(shù)據(jù)庫,同時(shí)實(shí)現(xiàn)數(shù)據(jù)的存儲和操作.

????開源性質(zhì)

????????Mycat 是 java 編寫的中間件. 開源,免費(fèi). 有非常多的人和組織對 Mycat 實(shí)行開發(fā),維護(hù),管理,更新. Mycat 版本提升較快,可以跟隨環(huán)境發(fā)展.如果有問題,可以快速解決. Mycat有開源網(wǎng)站和開源社區(qū).且有官方發(fā)布的電子書籍. Mycat 是阿里原應(yīng)用 corba 轉(zhuǎn)型而來的.

????市場應(yīng)用

????????2015 年左右,Mycat 在互聯(lián)網(wǎng)應(yīng)用中占比非常高.

? ??使用MyCat后的結(jié)構(gòu)圖

使用MyCat后的結(jié)構(gòu)圖

二、MyCat中的概念

? ??1.切分:邏輯上的切分轰豆,在物理層面胰伍,是使用多庫【database】齿诞,多表【table】實(shí)現(xiàn)的切分

????2.縱向切分/垂直切分:就是把原本存儲于一個(gè)庫的數(shù)據(jù)存儲到多個(gè)庫上

????????由于對數(shù)據(jù)的讀寫都是對一個(gè)庫進(jìn)行操作,所以單庫并不能解決大規(guī)模并發(fā)寫入的問題

????????例如:我們會建立定義數(shù)據(jù)庫workDB骂租、商品數(shù)據(jù)庫payDB祷杈、用戶數(shù)據(jù)庫userDB、日期數(shù)據(jù)庫logDB等渗饮,分別用戶存儲項(xiàng)目數(shù)據(jù)定義表但汞、商品定義表、用戶數(shù)據(jù)表互站、日志數(shù)據(jù)表等私蕾。

????優(yōu)點(diǎn):

????????1)減少增量數(shù)據(jù)寫入時(shí)的鎖對查詢的影響;

????????2)由于單表數(shù)量下降胡桃,常見的操作由于減少了需要掃描的記錄踩叭,使得單表單詞查詢所需的檢索行數(shù)變少,減少了磁盤IO,時(shí)延變短标捺。

? ? 2.橫向切分/水平切分:把原本存儲于一個(gè)表的數(shù)據(jù)分塊存儲到多個(gè)表上,當(dāng)一個(gè)表中的數(shù)據(jù)量過大時(shí)揉抵,我們可以把該表的數(shù)據(jù)按照某種規(guī)則進(jìn)行劃分亡容,然后存儲到多個(gè)結(jié)構(gòu)相同的表,和不同的庫上冤今。

????例如闺兢,我們 userDB 中的 userTable 中數(shù)據(jù)量很大,那么可以把 userDB 切分為結(jié)構(gòu)相同 的多個(gè) userDB:part0DB戏罢、part1DB 等屋谭,再將userDB 上的 userTable,切分為很多userTable: userTable0龟糕、userTable1等桐磁,然后將這些表按照一定的規(guī)則存儲到多個(gè) userDB 上。

????優(yōu)點(diǎn):

????????1)單表的并發(fā)能力提高了讲岁,磁盤 I/O 性能也提高了我擂。

????????2)如果出現(xiàn)高并發(fā)的話,總表可以根據(jù)不同的查詢缓艳,將并發(fā)壓力分到不同的小表里面校摩。? 缺點(diǎn):無法實(shí)現(xiàn)表連接查詢

MyCat中的概念理解

????????邏輯庫—Schema:MyCat中定義的database是邏輯存在的,在物理上是不存在的阶淘,主要是針對縱向切分提供的概念衙吩。

? ??????邏輯表—table:MyCat中定義的table是邏輯存在的,在物理上是不存在的溪窒,主要是針對橫向切分提供的概念坤塞。

????????數(shù)據(jù)主機(jī)—dataHost:物理MySQL存放的主機(jī)地址冯勉,可以使用主機(jī)名,IP尺锚,域名定義珠闰。

? ??????數(shù)據(jù)節(jié)點(diǎn)—dataNode:配置物理的database,數(shù)據(jù)保存的物理節(jié)點(diǎn)就是瘫辩,database

? ??????分片規(guī)則:當(dāng)控制數(shù)據(jù)的時(shí)候伏嗜,如何訪問物理database和table,就是訪問dataHost和dataNode的算法

????????在MyCat處理具體的數(shù)據(jù)CRUD的時(shí)候伐厌,如何訪問dataHost和dataNode的算法

????????如:哈希算法承绸,crc32算法等。

? ??常用工具的默認(rèn)端口:

????????MySQL 默認(rèn)端口是3306

????????Mycat 默認(rèn)端口是8066

????????tomcat 默認(rèn)端口是8080

????????Oracle 默認(rèn)端口是1521

????????nginx 默認(rèn)端口是80

????????http 協(xié)議默認(rèn)端口80

????????redis 默認(rèn)端口6379


三挣轨、讀寫分離

? ? 1.讀寫分離原理:需要搭建主從模式军熏,讓主數(shù)據(jù)庫(master)處理事務(wù)性增、刪卷扮、改操作(INSERT荡澎、UPDATE、DELETE)晤锹,而從數(shù)據(jù)庫(slave)處理SELECT查詢操作

????主從備份:就是一種主備模式的數(shù)據(jù)庫應(yīng)用

????????主庫(Master)數(shù)據(jù)和從庫/備庫(Slave)數(shù)據(jù)完全一致摩幔,實(shí)現(xiàn)數(shù)據(jù)的多重備份,保證數(shù)據(jù)的安全

????????可以在Master【InnoDB】和Slave[MyISAM]中使用不同的數(shù)據(jù)庫引擎鞭铆,實(shí)現(xiàn)讀寫的分離

????主從備份目的:

????????1.保證數(shù)據(jù)安全或衡,盡量避免數(shù)據(jù)丟失的可能

????????2.實(shí)現(xiàn)讀寫分離,使用不同的數(shù)據(jù)庫引擎车遂,實(shí)現(xiàn)讀寫分離封断,提高所有的操作效率,InnoDB使用DML語法操作舶担,MyISAM使用DQL語法操作

????主從備份模式實(shí)現(xiàn)數(shù)據(jù)同步

????????所有對 Master 的操作,都會同步到 Slave 中. 如果 Master 和 Salve 天生上環(huán)境不同 , 那么對 Master的操作 , 可能會在Slave中出現(xiàn)錯(cuò)誤

????如:

????????在創(chuàng)建主從模式之前 ,Master有 database : db1, db2, db3. Slave有database:db1, db2.

????????創(chuàng)建主從模式 . 現(xiàn)在的情況Master和 Slave天生不同

????????主從模式創(chuàng)建成功后 , 在Master中 drop

????????database db3. Slave中拋出數(shù)據(jù)庫 SQL異常. 后續(xù)所有的命令不能同步 .

????????一旦出現(xiàn)錯(cuò)誤 . 只能重新實(shí)現(xiàn)主從模式

????????主從模式下的邏輯圖:

主從模式下的邏輯圖

四坡疼、創(chuàng)建主從模式

????1.首先準(zhǔn)備準(zhǔn)備兩個(gè)虛擬機(jī),配置好基本環(huán)境衣陶,兩個(gè)分別安裝好mysql數(shù)據(jù)庫回梧,這里的主庫使用192.168.199.129環(huán)境,從庫使用192.168.199.133

????2.Master【主庫】配置

????????2.1修改/ect/my.cnf文件祖搓,配置server_id狱意,和log_bin的值,然后重啟mysql

修改/ect/my.cnf文件
修改/ect/my.cnf文件

????????2.2訪問mysql拯欧,執(zhí)行命令详囤,直接創(chuàng)建從節(jié)點(diǎn)用戶,然后刷新權(quán)限

????????grant all privileges on *.* to 'myslave'@'192.168.199.133'identified by 'myslave' with grant option;


命令
執(zhí)行命令,創(chuàng)建用戶

????????2.3查看用戶藏姐,查看Master信息????切換到mysql數(shù)據(jù)庫隆箩,查看用戶信息


選擇數(shù)據(jù)庫

????????show master status;查看Master信息

查看Master信息

????3.Slave【從庫】配置

????????3.1先修改/etc/my.cnf配置文件,添加唯一標(biāo)識server_id羔杨,唯一標(biāo)識的值要大于Master庫的值


修改/etc/my.cnf配置文件
從庫修改/etc/my.cnf配置文件

????????3.2然后重啟mysql服務(wù)捌臊,配置Slave,首先停止Slave兜材,配置主庫信息理澎,再啟動Slave

然后重啟mysql服務(wù)

????配置Slave
????????執(zhí)行命令配置從庫信息:change????master????to????master_host=’ip’,master_user=’username’,master_password=’password’,master_log_file=’log_file_name‘;

配置Slave

????????3.3可以使用show slave status \G曙寡;查看Slave配置

配置Slave

????4.測試主從糠爬,注意:主庫中的數(shù)據(jù)庫和表以及從庫中的數(shù)據(jù)庫和表要相同

測試主從-主
測試主從-從

????????然后在主庫中添加數(shù)據(jù),會自動同步到從庫中

在主庫中創(chuàng)建表


添加信息

????????在從庫中查看

從庫自動同步

五举庶、安裝MyCat

????1.下載MyCat For Linux的tar包

????2.解壓并指定位置

解壓

????3.啟動測試

啟動測試

六执隧、MyCat的分片規(guī)則以及分庫注意事項(xiàng)

????以 500 萬為單位,實(shí)現(xiàn)分片規(guī)則.

????????邏輯庫 A 對應(yīng) dataNode - db1 和 db2. 1-500 萬保存在 db1 中, 500 萬零 1 到 1000 萬保存在 db2 中,1000 萬零 1 到 1500 萬保存在 db1 中.依次類推

? ??????crc32slot的分片規(guī)則:在 CRUD 操作時(shí),根據(jù)具體數(shù)據(jù)的 crc32 算法計(jì)算,數(shù)據(jù)應(yīng)該保存在哪一個(gè) dataNode 中

????配置分片規(guī)則時(shí)需要注意:

????????1)<columns>id</columns>中推薦配置主鍵列

????????2)所有的 tableRule 只能使用一次。如果需要為多個(gè)表配置相同的分片規(guī)則户侥,那么需要在此重新定義該規(guī)則镀琉。

????????3)在 crc32Slot 算法中的分片數(shù)量一旦給定,MyCat 會將該分片數(shù)量和 slor 的取值范圍保存到文中蕊唐。在次修改分片數(shù)量時(shí)是不會生效的屋摔,需要將該文件刪除。文件位置位于 conf 目錄中的 ruledata 目錄中


????使用MyCat分庫時(shí)需要注意:

????????1)使用 MyCat 實(shí)現(xiàn)分庫時(shí)刃泌,先在 MyCat 中定義邏輯庫與邏輯表凡壤,然后在 MyCat 的鏈接 中執(zhí)行創(chuàng)建表的命令必須要在 MyCat 中運(yùn)行署尤。因?yàn)?MyCat 在創(chuàng)建表時(shí)耙替,會在表中添加一個(gè) 新的列,列名為_slot曹体。

????????2)使用 MyCat 插入數(shù)據(jù)時(shí)俗扇,語句中必須要指定所有的列。即便是一個(gè)完全項(xiàng)插入也不 允許省略列名箕别。

? ??在MyCat中配置分庫

配置Schema.xml

????然后在rule.xml中配置

配置rule.xml

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铜幽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子串稀,更是在濱河造成了極大的恐慌除抛,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件母截,死亡現(xiàn)場離奇詭異到忽,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門喘漏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來护蝶,“玉大人,你說我怎么就攤上這事翩迈〕只遥” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵负饲,是天一觀的道長堤魁。 經(jīng)常有香客問我,道長绽族,這世上最難降的妖魔是什么姨涡? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮吧慢,結(jié)果婚禮上涛漂,老公的妹妹穿的比我還像新娘。我一直安慰自己检诗,他們只是感情好匈仗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著逢慌,像睡著了一般悠轩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上攻泼,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天火架,我揣著相機(jī)與錄音,去河邊找鬼忙菠。 笑死何鸡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牛欢。 我是一名探鬼主播骡男,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼傍睹!你這毒婦竟也來了隔盛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤拾稳,失蹤者是張志新(化名)和其女友劉穎吮炕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體访得,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡龙亲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俱笛。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捆姜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出迎膜,到底是詐尸還是另有隱情泥技,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布磕仅,位于F島的核電站珊豹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏榕订。R本人自食惡果不足惜店茶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望劫恒。 院中可真熱鬧贩幻,春花似錦、人聲如沸两嘴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽憔辫。三九已至趣些,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贰您,已是汗流浹背坏平。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锦亦,地道東北人舶替。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像孽亲,于是被迫代替她去往敵國和親坎穿。 傳聞我的和親對象是個(gè)殘疾皇子展父,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一返劲、MyCat簡介 1.什么是MyCat? MyCat 是目前最流行的基于 java 語言編寫的數(shù)據(jù)庫中間件栖茉,是一...
    開源oo柒閱讀 710評論 0 19
  • 一篮绿、MyCat簡介 1.什么是MyCat MyCat是目前最流行的基于Java語言編寫的數(shù)據(jù)庫中間件,是一個(gè)實(shí)現(xiàn)了...
    青年心路閱讀 50,283評論 0 30
  • 什么是 MyCat MyCat 是目前最流行的基于 java 語言編寫的數(shù)據(jù)庫中間件吕漂,是一個(gè)實(shí)現(xiàn)了 MySQL 協(xié)...
    小破孩_e9ce閱讀 259評論 0 0
  • MySQL的安裝(rpm格式/需要聯(lián)網(wǎng)) 安裝環(huán)境 VMware Linux CentOS-6.5亲配。 上傳工具Fi...
    Cehae閱讀 12,620評論 0 16
  • 基本配置 1 . 在mycat/conf目錄下,MyCat核心配置文件:schema.xml 2 . dataHo...
    iEvans閱讀 27,657評論 2 18