MySQL binlog parser impl with Rust
Parsed events matrix:
Hex | Event Name | Parsed | Note |
---|---|---|---|
0x01 | START_EVENT_V3 | N | too old to support |
0x02 | QUERY_EVENT | Y | |
0x03 | STOP_EVENT | N | |
0x04 | ROTATE_EVENT | Y | |
0x05 | INTVAR_EVENT | Y | |
0x06 | LOAD_EVENT | N | |
0x07 | SLAVE_EVENT | N | |
0x08 | CREATE_FILE_EVENT | N | |
0x09 | APPEND_BLOCK_EVENT | N | |
0x0a | EXEC_LOAD_EVENT | N | |
0x0b | DELETE_FILE_EVENT | N | |
0x0c | NEW_LOAD_EVENT | N | |
0x0d | RAND_EVENT | N | |
0x0e | USER_VAR_EVENT | N | |
0x0f | FORMAT_DESCRIPTION_EVENT | Y | |
0x10 | XID_EVENT | Y | |
0x11 | BEGIN_LOAD_QUERY_EVENT | Y | |
0x12 | EXECUTE_LOAD_QUERY_EVENT | Y | |
0x13 | TABLE_MAP_EVENT | Y | not fully tested |
0x14 | WRITE_ROWS_EVENTv0 | N | |
0x15 | UPDATE_ROWS_EVENTv0 | N | |
0x16 | DELETE_ROWS_EVENTv0 | N | |
0x17 | WRITE_ROWS_EVENTv1 | N | |
0x18 | UPDATE_ROWS_EVENTv1 | N | |
0x19 | DELETE_ROWS_EVENTv1 | N | |
0x1a | INCIDENT_EVENT | N | |
0x1b | HEARTBEAT_EVENT | N | |
0x1c | IGNORABLE_EVENT | N | |
0x1d | ROWS_QUERY_EVENT | Y | |
0x1e | WRITE_ROWS_EVENTv2 | Y | not fully tested |
0x1f | UPDATE_ROWS_EVENTv2 | Y | not fully tested |
0x20 | DELETE_ROWS_EVENTv2 | Y | not fully tested |
0x21 | GTID_EVENT | Y | |
0x22 | ANONYMOUS_GTID_EVENT | Y | |
0x23 | PREVIOUS_GTIDS_EVENT | Y |
use rustcdc::error::Error;
use rustcdc::mysql::{Listener, MySqlOption};
use rustcdc::snapshot::SnapShotType;
#[tokio::main]
async fn main() -> Result<(), Error> {
let mut stream = MySqlOption::new()
.host("127.0.0.1")
.port(3556)
.username("root")
.password(None)
.database("rustcdc")
.table(vec!["*".to_string()]) // all tables
.charset("utf8mb4")
.server_id(5)
.snapshot(SnapShotType::FILE) // default
.connect().await?;
stream.register_listener(Listener::default());
stream.start().await;
Ok(())
}