Skip to main content

MySQL 8.4+ / MariaDB 10.11+ CDC engine - Python binding (native ctypes)

Project description

mysql-event-stream — Python Binding

CI PyPI License Python MySQL MariaDB Platform

A lightweight CDC (Change Data Capture) engine for Python supporting MySQL 8.4+ and MariaDB 10.11+. Parses binlog replication streams and emits structured row-level change events (INSERT / UPDATE / DELETE).

Built on a self-contained C++ core using ctypes FFI for high throughput and low latency. No external MySQL client library (libmysqlclient) required.

Install

pip install mysql-event-stream

Platform wheels are available for:

  • Linux x86_64
  • Linux aarch64
  • macOS ARM64 (Apple Silicon)

Usage

Parsing binlog bytes

from mysql_event_stream import CdcEngine

engine = CdcEngine()

# Feed raw binlog bytes
engine.feed(binlog_chunk)

while (event := engine.next_event()) is not None:
    print(event.type, event.database, event.table)
    print("before:", event.before)
    print("after:", event.after)

Streaming from MySQL

import asyncio
from mysql_event_stream import CdcStream

async def main():
    async for event in CdcStream(
        host="127.0.0.1",
        port=3306,
        user="replicator",
        password="secret",
    ):
        print(f"{event.type.name} {event.database}.{event.table}")
        print(f"  before: {event.before}")
        print(f"  after:  {event.after}")

asyncio.run(main())

Event Format

Each ChangeEvent contains the event type, database/table name, binlog position, and row data as a plain dict keyed by column name:

ChangeEvent(
    type=EventType.UPDATE,
    database="mydb",
    table="users",
    before={"id": 1, "name": "Alice", "score": 42},
    after={"id": 1, "name": "Alice", "score": 100},
    timestamp=1773584164,
    position=BinlogPosition(file="mysql-bin.000003", offset=3611),
)

Features

  • Native performance — C++ core with ctypes FFI, >100k events/sec
  • Zero native dependencies — No libmysqlclient required; only OpenSSL
  • Streaming — Process events incrementally as bytes arrive
  • MySQL 8.4+ — Supports LTS and Innovation releases
  • MariaDB 10.11+ — Auto-detects flavor and handles MariaDB binlog protocol (GTID events type 162, ANNOTATE_ROWS, slave capability negotiation)
  • GTID support — Native BinlogClient with GTID-based replication (MySQL uuid:gno and MariaDB domain-server-seq formats)
  • Row-level events — Full before/after column values for INSERT, UPDATE, DELETE
  • VECTOR type — Native support for MySQL 9.0+ VECTOR columns (decoded as raw bytes)
  • Column names — Automatic column name resolution via metadata queries
  • SSL/TLS — Full SSL/TLS support for secure MySQL connections
  • Backpressure — Internal reader thread with bounded event queue (default 10,000)
  • Auto-reconnection — Automatic reconnection with linear backoff on connection loss

Server Requirements

MySQL:

  • Version: 8.4+
  • GTID mode enabled (for BinlogClient)
  • Replication privileges: REPLICATION SLAVE, REPLICATION CLIENT

MariaDB:

  • Version: 10.11+ (tested against 10.11 and 11.4)
  • GTID replication enabled (log_bin in ROW format)
  • Replication privileges: REPLICATION SLAVE, REPLICATION CLIENT

License

Apache-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

mysql_event_stream-1.3.0-py3-none-manylinux_2_17_x86_64.whl (2.4 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ x86-64

mysql_event_stream-1.3.0-py3-none-manylinux_2_17_aarch64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

mysql_event_stream-1.3.0-py3-none-macosx_11_0_arm64.whl (2.6 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

mysql_event_stream-1.3.0-py3-none-macosx_10_15_x86_64.whl (2.2 MB view details)

Uploaded Python 3macOS 10.15+ x86-64

File details

Details for the file mysql_event_stream-1.3.0-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.0-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 048bd7154ac47ba50f0d3b288876a361452a48fe69cb5f7c07f39e8e50dc9139
MD5 eb371e74b98713e3b22fe2ea0f51fd6d
BLAKE2b-256 d5ad59285c32239e3528beb7db06b99501dc870c66cbb658c2b37472abaa843d

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.0-py3-none-manylinux_2_17_x86_64.whl:

Publisher: publish.yml on libraz/mysql-event-stream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mysql_event_stream-1.3.0-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.0-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 7395b5833d456a72f31f8422fec51b1f1fd9767b36634728534fbd577c7a9f77
MD5 846a0c9397ec871fcf6850a5246d3312
BLAKE2b-256 a30e2c96b25285bf551750296bbba11e697994d0542b15235319dfb5965b3985

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.0-py3-none-manylinux_2_17_aarch64.whl:

Publisher: publish.yml on libraz/mysql-event-stream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mysql_event_stream-1.3.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c4b1545ce054ecd4a718c3ce63a9ceaefa406701f7ddc0391242a9af882dce06
MD5 3be1ef7e3cbfa6fe257a078bd8472100
BLAKE2b-256 2d9a071f1744591f5a95017544d4abfa3653374b7ab9a0e0b6ceaf2b3b6300f0

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.0-py3-none-macosx_11_0_arm64.whl:

Publisher: publish.yml on libraz/mysql-event-stream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mysql_event_stream-1.3.0-py3-none-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.0-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 93c8d14f4cc0657661a57126a2dfcaa6f5ed8fdf040ad6663abf4798236e0352
MD5 528c4fbe71e14666a14c5e5df9f8de5c
BLAKE2b-256 5358dac6e4e0e8493562f0c25572a9c0c42020887bf38bab662e1f143b929a5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.0-py3-none-macosx_10_15_x86_64.whl:

Publisher: publish.yml on libraz/mysql-event-stream

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page