brpc icon indicating copy to clipboard operation
brpc copied to clipboard

Add Mysql Protocol

Open yanglimingcn opened this issue 2 years ago • 3 comments

Add Mysql Protocol, support text protocol, transaction, support prepare statement.

issue #209

What problem does this PR solve?

Issue Number:

Problem Summary:

What is changed and the side effects?

Changed:

Side effects:

  • Performance effects(性能影响):

  • Breaking backward compatibility(向后兼容性):


Check List:

  • Please make sure your changes are compilable(请确保你的更改可以通过编译).
  • When providing us with a new feature, it is best to add related tests(如果你向我们增加一个新的功能, 请添加相关测试).
  • Please follow Contributor Covenant Code of Conduct.(请遵循贡献者准则).

yanglimingcn avatar Jan 17 '23 09:01 yanglimingcn

mysql的prepared statement协议的支持。 遇到的两个问题解决方案如下: 1、prepared statement首先是在某个连接上创建一个statement id,后续操作可以根据这个statement id向这个连接发送后续的请求。同一个语句在每个连接上的statement id是不同的。在pooled模式下,每次RPC选择的连接是不同的,所以需要记录SocketId和statement id的关系,我们这里称为id_map。但是一个SocketId有可能关闭,然后又重新建立起来,这个新SocketId对应的连接没有这个statement id。id_map没有机制可以做到同步更新,保存的SocketId与statement id关系信息是旧的关系。这样就会产生问题。 这个问题的修改方式是,给socketid对应的fd一个唯一的版本号,每次通过stmt_id找到socketid的时候对比一下版本号,版本号一致说明fd没有变化,版本号不一致说明fd变化过。 2、目前还不能支持single模式,唯一的原因就是auth部分,正常auth多个请求会竞争发送auth,后续操作就不需要发送auth了,auth不用等待服务端应答,就可以让其他请求继续发送。但是mysql的auth和这个逻辑不通,mysql的auth首先接收mysql-server发送过来的salt,客户端根据salt加密密码,再把加密后的密码发送给服务端。这样的逻辑如果不等待服务端应答就解锁别的请求,就会出现发送auth的请求落后于正常的请求,导致消息乱序。 这个目前就先不支持single模式了。

yanglimingcn avatar Jan 17 '23 09:01 yanglimingcn

求教, mysql协议现在是什么状态了呢

jiangdongzi avatar Jul 15 '25 09:07 jiangdongzi

求教, mysql协议现在是什么状态了呢

目前没时间开发这个,有兴趣可以贡献一下。

yanglimingcn avatar Jul 15 '25 10:07 yanglimingcn