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.1-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.1-py3-none-manylinux_2_17_aarch64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

mysql_event_stream-1.3.1-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.1-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.1-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c7296fcaafeac8006e2f399230223bf623320f539286642d34859ec92fb3c357
MD5 a67724a7aa3a72b0eb3d22fb51d05dd9
BLAKE2b-256 d9b72991e124b03b1fd05e00d8b3ce5e4b4a0d4bf8b363de809886a7308274e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.1-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.1-py3-none-manylinux_2_17_aarch64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.1-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 5de8cc679b0cbd621afaeedcb44b11a6fd62108641b9b2b6d98953b30ae0855f
MD5 555300763ea451298843421da200d6bb
BLAKE2b-256 0505c1eea85f436c0240e6119061b3c66414a5bd85502b0ba579ffeba7d1b6e8

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.1-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.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad0cfbf57730c760c5b5b74b8fa365195b495bd88650f549bc0e596522a5b206
MD5 6028b3e6505a7944a0387dff099dc648
BLAKE2b-256 6b8d76a3134af44848a26797a0d1565bc3b9b3dca448bc3c29a7ccdc2dcdbf99

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.1-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.1-py3-none-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.3.1-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 a30227f2033d16b323367f31a1a5d459b43f183a07188eaaa00ab950be2b02ea
MD5 6c03627844c6b7b1b095a8eb433e5461
BLAKE2b-256 9b4280034b407d6e8db6cba5dacd68f841dc66c0425a10f7528982ef60d35a95

See more details on using hashes here.

Provenance

The following attestation bundles were made for mysql_event_stream-1.3.1-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