mysql-proxy 0.1.7

Extensible MySQL Proxy
Documentation

mysql-proxy-rs

Version Docs

An implementation of a MySQL proxy server built on top of tokio-core. Tested with rustc 1.13.0-nightly (cbe4de78e 2016-09-05).

Usage

The proxy uses the following interface for defining a handler for handling request and response packets:

pub enum Action {
    Forward,                // forward the packet unmodified
    Mutate(Packet),         // mutate the packet
    Respond(Vec<Packet>)    // handle directly and optionally return some packets
}

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

This allows the proxy to forward packets unmodified, mutate individual packets, or take over handling of a packet completely.

Example

The example proxy passes all queries to MySQL except for queries containing the word 'avocado'.

$ cargo run --example proxy
   ...
Listening for MySQL proxy connections on 127.0.0.1:3307

Then in a separate window you can test out the proxy. The proxy currently assumes that a MySQL server is running on port 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

License

mysql-proxy-rs is distributed under the terms of the Apache License (Version 2.0).

See LICENSE-APACHE for details.