MySQL X協(xié)議分析

這篇文章從分析MySQL X這個插件的協(xié)議層考蕾, 包括兩方面內(nèi)容:protobuf消息的具體定義,及這些消息到SQL語句的映射勿锅。

MySQL X簡介

MySQL X 是MySQL 5.7發(fā)布時自帶的一個插件婿屹,啟用后江耀,即可通過 ** X Protocol** 協(xié)議提供一個非常類似MongoDB的服務。在Unix/Linux環(huán)境下擒权,加載這個插件的命令是:

INSTALL PLUGIN mysqlx SONAME 'mysqlx.so';

后續(xù)的配置袱巨,可以參考這里
對應地碳抄,客戶端程序稱為 MySQL Shell 愉老, 在這里可以下載。

服務端的這個插件在收到請求之后剖效,會將其翻譯為對應的SQL語句嫉入,然后轉(zhuǎn)交給MySQL主服務執(zhí)行,并將結(jié)果集返回給客戶端贱鄙。

消息協(xié)議

消息協(xié)議定義在 MySQL 5.7 源碼樹的rapid/plugin/x/protocol目錄下劝贸,包括連接管理、會話管理逗宁、CRUD等各種類型映九。需要注意的是,這些文件中定義了多個不同名的包瞎颗,因此在Golang中件甥,是無法使用的,還需要做一些包括建立子目錄哼拔、更改包名等在內(nèi)的微小處理引有。消息本身的文檔在這里

然而文檔并不涵蓋所有的細節(jié)倦逐,因此譬正,我們寫一個抓包并打印消息內(nèi)容的工具,來幫助我們調(diào)試這個協(xié)議。項目在這里曾我。

消息映射到SQL

管理員命令 粉怕,在rapid/plugin/x/src/{admin_cmd_handler.h,admin_cmd_handler.cc}中。

  • ping抒巢,直接返回OK消息贫贝;
  • list_clients,返回4個column metadata蛉谜,分別為client_id, user, host, sql_session稚晚;
  • kill_client
  • create_collection
  • drop_collection
  • ensure_collection
  • create_collection_index
  • drop_collection_index
  • list_objects
  • enable_notices
  • disable_notices
  • list_notices

驗證相關的命令 ,在同目錄下的auth_mysql41.hauth_mysql41.cc文件中型诚。由三個函數(shù)客燕,分別對應start,continue和done三個階段狰贯。

CRUD類操作 幸逆,通過crud_cmd_handler.h中定義的Crud_command_handler類的7個接口實現(xiàn),這7個接口分別負責增刪改查記錄暮现,及創(chuàng)建还绘、修改、銷毀視圖栖袋。

  • Insert_statement_builder類將文檔的插入操作改寫為SQL的INSERT語句拍顷;
  • Update_statement_builder類將文檔的更新操作改寫為UPDATE語句;
  • 對應的塘幅,還有Delete_statement_builderfind_statement_builder類昔案。

還有一些 notice 相關的內(nèi)容,暫略电媳。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末踏揣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子匾乓,更是在濱河造成了極大的恐慌捞稿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拼缝,死亡現(xiàn)場離奇詭異娱局,居然都是意外死亡,警方通過查閱死者的電腦和手機咧七,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進店門衰齐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人继阻,你說我怎么就攤上這事耻涛》峡幔” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵抹缕,是天一觀的道長锦积。 經(jīng)常有香客問我,道長歉嗓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任背蟆,我火速辦了婚禮鉴分,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘带膀。我一直安慰自己志珍,他們只是感情好,可當我...
    茶點故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布垛叨。 她就那樣靜靜地躺著伦糯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪嗽元。 梳的紋絲不亂的頭發(fā)上敛纲,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天,我揣著相機與錄音剂癌,去河邊找鬼淤翔。 笑死,一個胖子當著我的面吹牛佩谷,可吹牛的內(nèi)容都是我干的旁壮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼谐檀,長吁一口氣:“原來是場噩夢啊……” “哼抡谐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桐猬,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤麦撵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后溃肪,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體厦坛,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年乍惊,在試婚紗的時候發(fā)現(xiàn)自己被綠了杜秸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡润绎,死狀恐怖撬碟,靈堂內(nèi)的尸體忽然破棺而出诞挨,到底是詐尸還是另有隱情,我是刑警寧澤呢蛤,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布惶傻,位于F島的核電站,受9級特大地震影響其障,放射性物質(zhì)發(fā)生泄漏银室。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一励翼、第九天 我趴在偏房一處隱蔽的房頂上張望蜈敢。 院中可真熱鬧,春花似錦汽抚、人聲如沸抓狭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽否过。三九已至,卻和暖如春惭蟋,著一層夾襖步出監(jiān)牢的瞬間苗桂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工告组, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留誉察,地道東北人。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓惹谐,卻偏偏與公主長得像持偏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子氨肌,可洞房花燭夜當晚...
    茶點故事閱讀 45,092評論 2 355

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

  • 1. Java基礎部分 基礎部分的順序:基本語法鸿秆,類相關的語法,內(nèi)部類的語法怎囚,繼承相關的語法卿叽,異常的語法,線程的語...
    子非魚_t_閱讀 31,644評論 18 399
  • 一. Java基礎部分.................................................
    wy_sure閱讀 3,811評論 0 11
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理恳守,服務發(fā)現(xiàn)考婴,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • 我的曾經(jīng)并不屬于過往催烘, 再快樂也會碰上悲傷沥阱。 墨爾本的夜不 再偽裝, 有唯美伊群, 還不是為了彰顯凄涼考杉! 你犯賤的誓言...
    夜里的狐閱讀 183評論 0 1
  • 17.沒有策精,你真的不明白。其實即使你理智冷血崇棠、自私自利咽袜,只要不自私得吃相難看,都不會影響他們愛你的程度枕稀。溫柔這種特...
    胖達胖達胖胖胖胖達閱讀 213評論 0 0