如何通过username转发MySQL请求

47 views
Skip to first unread message

Yuanli Han

unread,
Dec 13, 2022, 3:47:20 AM12/13/22
to openresty
Hi OpenResty社区的工程师们,

我这边有一个应用场景,需要根据username把MySQL请求转发到不同的(MySQL)后端实例,并且MySQL的ssl-mode=disabled

我尝试通过`reqsock:peek`来读取tcp socket buffer中的username,但是`peek(1)`方法读取MySQL client连接请求socket中的数据会一直block,直到preread_timeout超时。值得注意的是,这种情况下,peek超时会直接关闭连接,导致MySQL client连接失败。
我的初步分析是,`peek(1)`方法读取MySQL建立链接的握手请求中的`\x00`字节会一直block直到超时。

希望社区的工程师朋友们分享关于解决这个问题的思路,谢谢🙏

相关链接

韩远立

Junlong Li

unread,
Dec 14, 2022, 7:10:54 AM12/14/22
to openresty
可以用stream的cosocket来实现。content_by_lua_block 里面创建cosocket,启动两个协程,一个收一个发来实现代理。读取username也可以在里面了。
不过如果你用peek可以获取到username的话那性能更高。
Reply all
Reply to author
Forward
0 new messages