12个版本

使用旧Rust 2015

0.2.1 2016年10月3日
0.2.0 2016年10月3日
0.1.9 2016年9月22日

#21#sql-server

Apache-2.0

15KB
294

mysql-proxy-rs

CircleCI Version Docs

基于tokio-core实现的MySQL代理服务器。

概述

此软件包提供了一个MySQL代理服务器,您可以使用自己的自定义逻辑进行扩展。以下是代理的使用案例:

  • 捕获应用程序发出的SQL查询日志
  • 查询执行时间分析
  • 监控查询模式,例如威胁检测
  • 记录SQL流量以供后续回放进行自动化测试

使用方法

代理定义了一个以下特质,用于定义处理请求和响应包的包处理器

pub trait PacketHandler {
    fn handle_request(&self, p: &Packet) -> Action;
    fn handle_response(&self, p: &Packet) -> Action;
}

/// Handlers return a variant of this enum to indicate how the proxy should handle the packet.
pub enum Action {
    /// drop the packet
    Drop,
    /// forward the packet unmodified
    Forward,
    /// forward a mutated packet
    Mutate(Packet),
    /// respond to the packet without forwarding
    Respond(Vec<Packet>),
    /// respond with an error packet
    Error { code: u16, state: [u8; 5], msg: String },
}

示例

示例代理将所有查询转发到MySQL,除了包含单词'鳄梨'的查询。使用以下命令运行示例。

请注意,我们已经使用以下命令测试了代理:rustc 1.13.0-nightly (cbe4de78e 2016-09-05)

$ cargo run --example proxy

然后您可以在另一个窗口中测试代理。代理绑定到端口3307,并假设MySQL服务器在端口3306上运行。

$ mysql -u root -p -h 127.0.0.1 -P 3307
mysql> select 'banana';
+--------+
| banana |
+--------+
| banana |
+--------+
1 row in set (0.00 sec)

mysql> select 'avocado';
ERROR 1064 (12345): Proxy rejecting any avocado-related queries

许可证

mysql-proxy-rs根据Apache许可证(版本2.0)分发。

有关详细信息,请参阅LICENSE-APACHE。

依赖项

~10MB
~171K SLoC