这篇文章从分析MySQL X这个插件的协议层, 包括两方面内容:protobuf消息的具体定义,及这些消息到SQL语句的映射。

MySQL X简介

MySQL X 是MySQL 5.7发布时自带的一个插件,启用后,即可通过 ** X Protocol** 协议提供一个非常类似MongoDB的服务。在Unix/Linux环境下,加载这个插件的命令是:

INSTALL PLUGIN mysqlx SONAME 'mysqlx.so';

后续的配置,可以参考这里。

对应地,客户端程序称为 MySQL Shell , 在这里可以下载。

服务端的这个插件在收到请求之后,会将其翻译为对应的SQL语句,然后转交给MySQL主服务执行,并将结果集返回给客户端。

消息协议

消息协议定义在 MySQL 5.7 源码树的rapid/plugin/x/protocol目录下,包括连接管理、会话管理、CRUD等各种类型。需要注意的是,这些文件中定义了多个不同名的包,因此在Golang中,是无法使用的,还需要做一些包括建立子目录、更改包名等在内的微小处理。消息本身的文档在这里。

然而文档并不涵盖所有的细节,因此,我们写一个抓包并打印消息内容的工具,来帮助我们调试这个协议。项目在这里。

消息映射到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.h和auth_mysql41.cc文件中。由三个函数,分别对应start,continue和done三个阶段。

CRUD类操作 ,通过crud_cmd_handler.h中定义的Crud_command_handler类的7个接口实现,这7个接口分别负责增删改查记录,及创建、修改、销毁视图。

Insert_statement_builder类将文档的插入操作改写为SQL的INSERT语句;

Update_statement_builder类将文档的更新操作改写为UPDATE语句;

对应的,还有Delete_statement_builder和find_statement_builder类。

还有一些 notice 相关的内容,暂略。

X协议 mysql_MySQL X协议分析相关推荐

  1. linux nDPI 协议检测 源码分析

    关于nDPI的基本功能就不在这介绍了,有兴趣了解的读者可以阅读官方的快速入门指南:https://github.com/ntop/nDPI/blob/dev/doc/nDPI_QuickStartGu ...

  2. SSL/TLS 协议简介与实例分析

    作者:drinkey 以前读RFC时总结的一篇文章,主要介绍了SSL/TLS协议的相关知识,包括协议本身以及简单的密码学概念,以及用实例解析了HTTP over SSL的协商过程,在最后简要列出了SS ...

  3. 深入理解HTTP协议、HTTP协议原理分析

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接 ...

  4. 互联网协议IP抓包分析 -- wireshark

    互联网协议IP抓包分析 – wireshark 互联网协议IP是Internet Protocol的缩写,中文缩写是网协 互联网协议也就是为计算机相互连接进行通信而设计的协议. IP地址协议报文首部 ...

  5. [转]HTTP协议及其请求头分析

    众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用.    WWW 服务器使 ...

  6. 数据包捕获计算机网络实训,计算机网络-使用网络协议分析器捕捉和分析协议数据包...

    广州大学学生实验报告 开课学院及实验室:计算机科学与工程实验室2014年11月28日 一.实验目的 (1)熟悉ethereal的使用 (2)验证各种协议数据包格式 (3)学会捕捉并分析各种数据包. 二 ...

  7. 由于在客户端检测到一个协议错误_TLS协议的分析

    TLS概述 TLS(传输层安全性)协议基于SSL(安全套接字层)协议,该协议最初由Netscape开发,用于增强Internet上的电子商务安全性.SSL是在应用程序级实现的,直接位于TCP(传输控制 ...

  8. BT和eMule下载协议的比较和分析

    转载:http://www.yuanma.org/data/2008/0420/article_3009.htmBT和eMule下载协议的比较和分析     由于从事P2P下载引擎开发得原因,对BT和 ...

  9. Drown跨协议攻击TLS漏洞分析

    北京时间 2016年3月2日,OpenSSL官方发布了新的安全公告.公告中提及修复了一个高危漏洞--DROWN跨协议攻击TLS漏洞.百度云安全威胁管理团队联合百度安全应急响应中心第一时间对事件触发应急 ...

最新文章

  1. Spring-ApplicationContext解读
  2. 天天用 Spring,bean 实例化原理你懂吗?
  3. buu [GXYCTF2019]CheckIn
  4. 整型数组中三个数的最大乘积
  5. AOP技术研究 再续
  6. cf769D(枚举位或运算)
  7. 电脑开机一会就蓝屏怎么回事_电脑蓝屏怎么回事
  8. 想快速了解AI各领域的前沿研究成果?可以来这个网站看看 | 资源
  9. Spring事物配置文件
  10. 0903 - Firebase Analytics PK Google Analytics
  11. cdr X6 64位32位缩略图补丁包
  12. go Test Benchmark 性能测试
  13. Android studio 制作一个app实现简单功能
  14. 02_函数定义及使用函数
  15. java中|和||的使用和区别
  16. Godaddy Web Hosting http 重定向至 https协议
  17. Docker 与 K8S学习笔记(二十)—— 使用Downward API向容器注入Pod信息
  18. 硬盘主引导记录,分区引导记录(MBR,PBR)
  19. python 自动发微博_用 Python 自动定时发微博
  20. 【蓝桥杯单片机】第十三届蓝桥杯单片机省赛客观题及其题解

热门文章

  1. Leetcode 17.电话号码的组合(回溯法)
  2. pytorch: nn.Sequential(func1,func2,func3)
  3. pytorch: 网络层参数初始化
  4. T3139 栈练习3 codevs
  5. Mispelling4
  6. zoj1022 Parallel Expectations(DP)
  7. Flash:LoadVars数据提交与表单处理
  8. vue 源码 断点调试
  9. 记一次Vue全页面SSR深坑之旅 - 微弱的内存/CPU泄漏
  10. 安利一个React同构渲染脚手架 —— razzle