Skip to main content

MySQL 8.4 CDC engine - Python binding (native ctypes)

Project description

mysql-event-stream — Python Binding

CI PyPI License Python MySQL Platform

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+ — Supports LTS and Innovation releases
  • GTID support — Native BinlogClient with GTID-based replication
  • 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

MySQL Requirements

  • Version: 8.4+
  • 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.1.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.1.0-py3-none-manylinux_2_17_aarch64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.17+ ARM64

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

Uploaded Python 3macOS 11.0+ ARM64

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

File metadata

File hashes

Hashes for mysql_event_stream-1.1.0-py3-none-manylinux_2_17_x86_64.whl
Algorithm Hash digest
SHA256 c03864190a24da68b491d126afaeb6c19b03f20a372e06091965f37dc0eb08c5
MD5 4eaba712e2e4227390eb520b86be3f38
BLAKE2b-256 7f69d18c9d6747b5672f12171579b504bc9f0f1063f7deba62d0a6d35d04bda2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.1.0-py3-none-manylinux_2_17_aarch64.whl
Algorithm Hash digest
SHA256 344fef2bd9cdda700d1feac55f0074ba8fd137fd39084f881a9a767b7711b74d
MD5 93728b9da884c7e3ab6a589ce92e84ec
BLAKE2b-256 4a9b33bd6ce4964085029d124f8daa92208c30f34277ee3b4e0188afeb1c6e47

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1772be87153f17ad173dcdcedcf59eea7b7f9706a4f0f7229aa3c5f9da8eb261
MD5 c780497d1b91296e1036d586a233ba5c
BLAKE2b-256 bd51c5555f3baa7ffcdfbe101cfea86545fa6492536269358c40b06619ba8094

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for mysql_event_stream-1.1.0-py3-none-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 8ae3ba151a37ce2312f4b1c6ae8584b17a86080b157e85dbb4792e688b2c90e8
MD5 6483ccddf39c4ef6f7ec53b600d3fb0b
BLAKE2b-256 d7b98b94480cc46f3c0e39f5a6ab3051816bf0fb97ca49e95f1ae1e69024c724

See more details on using hashes here.

Provenance

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