{"library":"mysql-replication","title":"MySQL Replication Client","description":"mysql-replication is a pure Python implementation of the MySQL replication protocol, built on top of PyMYSQL. It enables real-time streaming of binlog events from a MySQL server, facilitating tasks such as change data capture (CDC), data synchronization, and auditing. The current version is 1.0.15, and the project maintains an active release cadence, addressing bugs and adding support for newer Python versions.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install mysql-replication"],"cli":null},"imports":["from mysql.replication import BinLogStreamReader","from mysql.replication.row_event import UpdateRowsEvent","from mysql.replication.row_event import DeleteRowsEvent","from mysql.replication.row_event import WriteRowsEvent","from mysql.replication.event import QueryEvent"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import os\nfrom mysql.replication import BinLogStreamReader\nfrom mysql.replication.row_event import UpdateRowsEvent, DeleteRowsEvent, WriteRowsEvent\n\n# Configure your MySQL connection details. Use environment variables for production.\nMYSQL_HOST = os.environ.get('MYSQL_HOST', 'localhost')\nMYSQL_PORT = int(os.environ.get('MYSQL_PORT', 3306))\nMYSQL_USER = os.environ.get('MYSQL_USER', 'replication_user')\nMYSQL_PASSWORD = os.environ.get('MYSQL_PASSWORD', 'password') # Ensure user has REPLICATION SLAVE/CLIENT\n\ntry:\n    stream = BinLogStreamReader(\n        connection_settings={\n            \"host\": MYSQL_HOST,\n            \"port\": MYSQL_PORT,\n            \"user\": MYSQL_USER,\n            \"passwd\": MYSQL_PASSWORD,\n            \"charset\": \"utf8\"\n        },\n        server_id=101, # IMPORTANT: Must be a unique ID > 0 within your replication topology\n        blocking=True, # Wait for new events if no more are available\n        resume_stream=True, # Resume from last position if possible\n        log_file=None, # Start from current position\n        log_pos=None   # Start from current position\n    )\n\n    print(f\"Connected to MySQL binlog stream on {MYSQL_HOST}:{MYSQL_PORT}. Listening for events...\")\n\n    for event in stream:\n        if isinstance(event, (UpdateRowsEvent, DeleteRowsEvent, WriteRowsEvent)):\n            print(f\"\\n---\")\n            print(f\"[{type(event).__name__}] Database: {event.schema}, Table: {event.table}\")\n            for row in event.rows:\n                if isinstance(event, WriteRowsEvent):\n                    print(f\"  Inserted: {row['values']}\")\n                elif isinstance(event, UpdateRowsEvent):\n                    print(f\"  Before: {row['before_values']}\")\n                    print(f\"  After:  {row['after_values']}\")\n                elif isinstance(event, DeleteRowsEvent):\n                    print(f\"  Deleted: {row['values']}\")\n        # Add more event types (e.g., QueryEvent, RotateEvent, XidEvent) as needed\n\nexcept Exception as e:\n    print(f\"An error occurred: {e}\")\nfinally:\n    if 'stream' in locals() and stream:\n        stream.close()\n        print(\"\\nBinLogStreamReader closed.\")","lang":"python","description":"This quickstart demonstrates how to connect to a MySQL server's binlog stream and process various row-based replication events (INSERT, UPDATE, DELETE). Ensure your MySQL server is configured for replication, and the provided user has sufficient privileges (`REPLICATION SLAVE`, `REPLICATION CLIENT`). Remember to set a unique `server_id`.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"1.0.15","pypi_latest":"1.0.15","is_stale":false,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":1.7,"avg_import_s":null,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.8M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.6,"import_time_s":null,"mem_mb":null,"disk_size":"20M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"22.1M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.8,"import_time_s":null,"mem_mb":null,"disk_size":"23M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"13.8M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.6,"import_time_s":null,"mem_mb":null,"disk_size":"14M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"13.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.6,"import_time_s":null,"mem_mb":null,"disk_size":"14M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"19.2M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"mysql-replication","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":1.9,"import_time_s":null,"mem_mb":null,"disk_size":"20M"}]}}