12个版本
使用旧Rust 2015
0.2.1 | 2016年10月3日 |
---|---|
0.2.0 | 2016年10月3日 |
0.1.9 | 2016年9月22日 |
#21 在 #sql-server
15KB
294 行
mysql-proxy-rs
基于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