如何编写一个,实现自定义支持MySQL协议的SQL中间件?
- 内容介绍
- 文章标签
- 相关推荐

原理比较简单, 就是加个中间件, 让业务连接中间件, 由中 我CPU干烧了。 间件去转发业务数据报, 若遇到需要 的SQL,顺便 下即可.
:为啥要搞这个玩意儿?
哎,说实话,搞这个东西挺麻烦的。但有时候没办法啊! 比如你有个老系统,用的MySQL,现在想换成别的数据库,单是改代码成本太高了! 又或着你想在SQL施行之前Zuo一些校验、脱敏、审计之类的操作。 太魔幻了。 这时候,一个嫩透明拦截并修改SQL的中间件就显得忒别重要了。 而且我跟你说有些“定制的需求”,找原厂的话流程太慢,而且大概率不会去实现。那咋办呢? 自己动手丰衣足食呗!
MySQL协议是个啥?
先说说得了解MySQL协议是怎么回事儿。这玩意儿其实就是客户端和服务器之间通信的规则。 简单来说就是定义了数据的格式、命令的类型等等。 如guo你不熟悉的话,建议先去官方文档堪堪 也有相关记录,我爱我家。。
抓包分析:知己知彼
抓包是干仁和网络相关的活儿者阝绕不开的一步。 我用Wireshark抓了一段包,后来啊如下:,我明白了。
| 包类型 | 描述 | 大小 |
|---|---|---|
| Pack Header | 包头 | 4字节 |
| Payload | 包体 | 根据内容不同而变化 |
| COM_QUERY | SQL语句包 | 根据语句长度变化 |
mysql的数据包格式为: pack_headr+payload
COM_QUERY 包结构详解
走捷径。 而我们本次需要 的则是SQL包, 对应为: COM_QUERY。

原理比较简单, 就是加个中间件, 让业务连接中间件, 由中 我CPU干烧了。 间件去转发业务数据报, 若遇到需要 的SQL,顺便 下即可.
:为啥要搞这个玩意儿?
哎,说实话,搞这个东西挺麻烦的。但有时候没办法啊! 比如你有个老系统,用的MySQL,现在想换成别的数据库,单是改代码成本太高了! 又或着你想在SQL施行之前Zuo一些校验、脱敏、审计之类的操作。 太魔幻了。 这时候,一个嫩透明拦截并修改SQL的中间件就显得忒别重要了。 而且我跟你说有些“定制的需求”,找原厂的话流程太慢,而且大概率不会去实现。那咋办呢? 自己动手丰衣足食呗!
MySQL协议是个啥?
先说说得了解MySQL协议是怎么回事儿。这玩意儿其实就是客户端和服务器之间通信的规则。 简单来说就是定义了数据的格式、命令的类型等等。 如guo你不熟悉的话,建议先去官方文档堪堪 也有相关记录,我爱我家。。
抓包分析:知己知彼
抓包是干仁和网络相关的活儿者阝绕不开的一步。 我用Wireshark抓了一段包,后来啊如下:,我明白了。
| 包类型 | 描述 | 大小 |
|---|---|---|
| Pack Header | 包头 | 4字节 |
| Payload | 包体 | 根据内容不同而变化 |
| COM_QUERY | SQL语句包 | 根据语句长度变化 |
mysql的数据包格式为: pack_headr+payload
COM_QUERY 包结构详解
走捷径。 而我们本次需要 的则是SQL包, 对应为: COM_QUERY。

