如何在 TiDB 上实现 MySQL X Protocol"
MySQL 的一些文档
实现原理
- 客户端与服务端之间靠 tcp 通信,协议使用了 protobuf 。
- 服务端接收到消息后,把消息解码后分析。协议中包含了 namespace 这样一个概念,具体是指,如果 namespace 为空或者 “sql” ,则消息内容按照 sql 语句来执行,如果为 “xplugin” 、 “mysqlx” 则消息按照其他方式来处理。其他方式又可分为:
- “xplugin” 和 “mysqlx” 作用完全相同,后者是前者的新名字,为了保持兼容暂时没有去掉前者。
- “mysqlx” 的消息除了个别如 kill_client 这样的明显的命令内容外,都是用拼 sql 的方式,转给服务端进行处理。也就是大部分也变成了 namespace 为 “sql” 的形式。
实现步骤
- 给 TiDB 启动一个新的 server 。需要相关的配置参数, ip 、 port 、 socket 之类的东西。
- 实现消息通讯的读和写功能。
- 需要为这个新 server 写一个建立连接的过程,包括认证等内容,过程要遵循协议。为了得到协议内容,可使用 tcpdump 来抓取 MySQL 与客户端的消息内容。再结合对 MySQL 源代码的理解来实现这个过程。
- server 中要包含原 TiDB server 的 Query Context 等内容,因为主要还是要转成 sql 去执行。
- 实现对消息的解码处理。虽然只有一句话,但是包含的工作量巨大。
Comments
comments powered by