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