You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
An implementation of a MySQL proxy server built on top of tokio-core.
Overview
This crate provides a MySQL proxy server that you can extend with your own custom logic. Here are some examples of use cases for a proxy:
Capture a log of SQL queries issued by an application
Profiling of query execution time
Monitor query patterns e.g. threat detection
Record SQL traffic for later playback for automated testing
Usage
The proxy defines the following trait for defining a packet handler for handling request and response packets:
pubtraitPacketHandler{fnhandle_request(&self,p:&Packet) -> Action;fnhandle_response(&self,p:&Packet) -> Action;}/// Handlers return a variant of this enum to indicate how the proxy should handle the packet.pubenumAction{/// drop the packetDrop,/// forward the packet unmodifiedForward,/// forward a mutated packetMutate(Packet),/// respond to the packet without forwardingRespond(Vec<Packet>),/// respond with an error packetError{code:u16,state:[u8;5],msg:String},}
Example
The example proxy passes all queries to MySQL except for queries containing the word 'avocado'. Use the following command to run the example.
Note that we have tested the proxy with rustc 1.13.0-nightly (cbe4de78e 2016-09-05).
$ cargo run --example proxy
Then in a separate window you can test out the proxy. The proxy binds to port 3307 and assumes that a MySQL server is running on port 3306.