Skip to main content

MySQL 8.4 CDC engine - Python binding (native ctypes)

Project description

mysql-event-stream — Python Binding

CI License

A lightweight MySQL 8.4 CDC (Change Data Capture) engine for Python. 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 — Built for the latest MySQL LTS release
  • GTID support — Native BinlogClient with GTID-based replication
  • Row-level events — Full before/after column values for INSERT, UPDATE, DELETE
  • 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

MySQL Requirements

  • Version: 8.4
  • Binary log format: ROW (binlog_format=ROW)
  • GTID mode enabled (for BinlogClient)
  • 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.0.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.0.1-py3-none-manylinux_2_17_aarch64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

mysql_event_stream-1.0.1-py3-none-macosx_11_0_arm64.whl (2.5 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

mysql_event_stream-1.0.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.0.1-py3-none-manylinux_2_17_x86_64.whl.

File metadata

File hashes

Hashes for mysql_event_stream-1.0.1-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 2930df0aefeecef24958a1a05eae0652868be48323e2dbd8d1aecc194007eede
MD5 fd644579510246d5295bea96819b105f
BLAKE2b-256 ad0e5ed274e5f1809a4546497a6e25d2676cc7a250897105ef7295cb5db2084c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.0.1-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 1274a592d0b08e3cd06ab877f3d07f04ab23bc0095747afa7dd300f904c75309
MD5 aae2dfb47a887fd088f8df6b03fcb65d
BLAKE2b-256 34fed04e2d64f63a5646aa4f675e0e76d399e422ffbe6ffb67acecb1d8264084

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.0.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f652e7a04d4bfc6ea54647c72db4c1ac0797cc42a4459a9a59212ab888db8626
MD5 b643b9cc0c0ee2b338fff8aedddcca98
BLAKE2b-256 7885b5431ac8d7d4e3d320cd146f73c66ab1f0d53c3907344d2d61378d230d4c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.0.1-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 b796cb4a6f09e8a00b8b65fdf5b70af7eb3289c2436c826c205b31192f1bf98e
MD5 54640e65f2ca92ea850680900816e860
BLAKE2b-256 5f1359ea49a5106cfe853e3ef89afd0427bcd9f91a916a9c7c82cdff3e8c9ffd

See more details on using hashes here.

Provenance

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