Skip to content

Commit 7fd9252

Browse files
Update the README to include the latest mentions of python-mysql-replication
1 parent ea61cca commit 7fd9252

File tree

1 file changed

+125
-138
lines changed

1 file changed

+125
-138
lines changed

README.md

+125-138
Original file line numberDiff line numberDiff line change
@@ -1,104 +1,93 @@
1-
python-mysql-replication
2-
========================
1+
# python-mysql-replication
32

43
<a href="https://pypi.python.org/pypi/mysql-replication"><img src="http://img.shields.io/pypi/dm/mysql-replication.svg"></a>
54

65
<img src ="https://github.com/julien-duponchelle/python-mysql-replication/blob/main/logo.svg">
76
Pure Python Implementation of MySQL replication protocol build on top of PyMYSQL. This allows you to receive event like insert, update, delete with their datas and raw SQL queries.
87

9-
Use cases
10-
===========
8+
# Use cases
119

12-
* MySQL to NoSQL database replication
13-
* MySQL to search engine replication
14-
* Invalidate cache when something change in database
15-
* Audit
16-
* Real time analytics
10+
- MySQL to NoSQL database replication
11+
- MySQL to search engine replication
12+
- Invalidate cache when something change in database
13+
- Audit
14+
- Real time analytics
1715

18-
Documentation
19-
==============
16+
# Documentation
2017

2118
A work in progress documentation is available here: https://python-mysql-replication.readthedocs.org/en/latest/
2219

2320
Instruction about building documentation is available here:
2421
https://python-mysql-replication.readthedocs.org/en/latest/developement.html
2522

26-
27-
Installation
28-
=============
23+
# Installation
2924

3025
```
3126
pip install mysql-replication
3227
```
3328

34-
Getting support
35-
===============
29+
# Getting support
3630

3731
You can get support and discuss about new features on:
3832
https://github.com/julien-duponchelle/python-mysql-replication/discussions
3933

40-
Project status
41-
================
34+
# Project status
4235

4336
The project is test with:
44-
* MySQL 5.5, 5.6 and 5.7 (v0.1 ~ v0.45)
45-
* MySQL 8.0.14 (v1.0 ~)
46-
* MariaDB 10.6
47-
* Python 3.7, 3.11
48-
* PyPy 3.7, 3.9 (really faster than the standard Python interpreter)
37+
38+
- MySQL 5.5, 5.6 and 5.7 (v0.1 ~ v0.45)
39+
- MySQL 8.0.14 (v1.0 ~)
40+
- MariaDB 10.6
41+
- Python 3.7, 3.11
42+
- PyPy 3.7, 3.9 (really faster than the standard Python interpreter)
4943

5044
MySQL version 8.0.14 and later Set global variable binlog_row_metadata='FULL' and binlog_row_image='FULL'
5145

5246
The project is used in production for critical stuff in some
5347
medium internet corporations. But all use case as not
5448
been perfectly test in the real world.
5549

56-
Limitations
57-
=============
50+
# Limitations
5851

5952
https://python-mysql-replication.readthedocs.org/en/latest/limitations.html
6053

61-
Featured
62-
=============
63-
64-
[Data Pipelines Pocket Reference](https://www.oreilly.com/library/view/data-pipelines-pocket/9781492087823/) (by James Densmore, O'Reilly): Introduced and exemplified in Chapter 4: Data Ingestion: Extracting Data.
65-
66-
[Streaming Changes in a Database with Amazon Kinesis](https://aws.amazon.com/blogs/database/streaming-changes-in-a-database-with-amazon-kinesis/) (by Emmanuel Espina, Amazon Web Services)
67-
68-
[Near Zero Downtime Migration from MySQL to DynamoDB](https://aws.amazon.com/ko/blogs/big-data/near-zero-downtime-migration-from-mysql-to-dynamodb/) (by YongSeong Lee, Amazon Web Services)
69-
70-
[Enable change data capture on Amazon RDS for MySQL applications that are using XA transactions](https://aws.amazon.com/ko/blogs/database/enable-change-data-capture-on-amazon-rds-for-mysql-applications-that-are-using-xa-transactions/) (by Baruch Assif, Amazon Web Services)
71-
72-
Projects using this library
73-
===========================
74-
75-
* pg_chameleon: Migration and replica from MySQL to PostgreSQL https://github.com/the4thdoctor/pg_chameleon
76-
* Yelp Data Pipeline: https://engineeringblog.yelp.com/2016/11/open-sourcing-yelps-data-pipeline.html
77-
* Singer.io Tap for MySQL (https://github.com/singer-io/tap-mysql)
78-
* MySQL River Plugin for ElasticSearch: https://github.com/scharron/elasticsearch-river-mysql
79-
* Ditto: MySQL to MemSQL replicator https://github.com/memsql/ditto
80-
* ElasticMage: Full Magento integration with ElasticSearch https://github.com/ElasticMage/elasticmage
81-
* Cache buster: an automatic cache invalidation system https://github.com/rackerlabs/cache-busters
82-
* Zabbix collector for OpenTSDB https://github.com/OpenTSDB/tcollector/blob/master/collectors/0/zabbix_bridge.py
83-
* Meepo: Event sourcing and event broadcasting for databases. https://github.com/eleme/meepo
84-
* Python MySQL Replication Blinker: This package read events from MySQL binlog and send to blinker's signal. https://github.com/tarzanjw/python-mysql-replication-blinker
85-
* aiomysql_replication: Fork supporting asyncio https://github.com/jettify/aiomysql_replication
86-
* python-mysql-eventprocessor: Daemon interface for handling MySQL binary log events. https://github.com/jffifa/python-mysql-eventprocessor
87-
* mymongo: MySQL to mongo replication https://github.com/njordr/mymongo
88-
* pg_ninja: The ninja elephant obfuscation and replica tool https://github.com/transferwise/pg_ninja/ (http://tech.transferwise.com/pg_ninja-replica-with-obfuscation/)
89-
* MySQLStreamer: MySQLStreamer is a database change data capture and publish system https://github.com/Yelp/mysql_streamer
90-
* binlog2sql: a popular binlog parser that could convert raw binlog to sql and also could generate flashback sql from raw binlog (https://github.com/danfengcao/binlog2sql)
91-
* Streaming mysql binlog replication to Snowflake/Redshift/BigQuery (https://github.com/trainingrocket/mysql-binlog-replication)
92-
* MySQL to Kafka (https://github.com/scottpersinger/mysql-to-kafka/)
93-
* Aventri MySQL Monitor (https://github.com/aventri/mysql-monitor)
94-
* BitSwanPump: A real-time stream processor (https://github.com/LibertyAces/BitSwanPump)
95-
* clickhouse-mysql-data-reader: https://github.com/Altinity/clickhouse-mysql-data-reader
96-
* py-mysql-elasticsearch-sync: https://github.com/jaehyeonpy/py-mysql-elasticsearch-sync
97-
* synch: Sync data from other DB to ClickHouse (https://github.com/long2ice/synch)
98-
* sb-osc: Online schema change tool created by Sendbird (https://github.com/sendbird/sb-osc)
99-
100-
MySQL server settings
101-
=========================
54+
# Featured
55+
56+
- [Data Pipelines Pocket Reference](https://www.oreilly.com/library/view/data-pipelines-pocket/9781492087823/) (by James Densmore, O'Reilly): Introduced and exemplified in Chapter 4: Data Ingestion: Extracting Data.
57+
- [Streaming Changes in a Database with Amazon Kinesis](https://aws.amazon.com/blogs/database/streaming-changes-in-a-database-with-amazon-kinesis/) (by Emmanuel Espina, Amazon Web Services)
58+
- [Near Zero Downtime Migration from MySQL to DynamoDB](https://aws.amazon.com/ko/blogs/big-data/near-zero-downtime-migration-from-mysql-to-dynamodb/) (by YongSeong Lee, Amazon Web Services)
59+
- [Enable change data capture on Amazon RDS for MySQL applications that are using XA transactions](https://aws.amazon.com/ko/blogs/database/enable-change-data-capture-on-amazon-rds-for-mysql-applications-that-are-using-xa-transactions/) (by Baruch Assif, Amazon Web Services)
60+
- [Reading MySQL Binlog with Python](https://medium.com/@mahadir.ahmad/reading-mysql-binlog-with-python-c85a8ece3b28)
61+
- [Using python-mysql-replication with Dolt](https://www.dolthub.com/blog/2024-08-08-python-mysql-replication-works-with-dolt/)
62+
63+
# Projects using this library
64+
65+
- pg_chameleon: Migration and replica from MySQL to PostgreSQL https://github.com/the4thdoctor/pg_chameleon
66+
- Yelp Data Pipeline: https://engineeringblog.yelp.com/2016/11/open-sourcing-yelps-data-pipeline.html
67+
- Singer.io Tap for MySQL (https://github.com/singer-io/tap-mysql)
68+
- MySQL River Plugin for ElasticSearch: https://github.com/scharron/elasticsearch-river-mysql
69+
- Ditto: MySQL to MemSQL replicator https://github.com/memsql/ditto
70+
- ElasticMage: Full Magento integration with ElasticSearch https://github.com/ElasticMage/elasticmage
71+
- Cache buster: an automatic cache invalidation system https://github.com/rackerlabs/cache-busters
72+
- Zabbix collector for OpenTSDB https://github.com/OpenTSDB/tcollector/blob/master/collectors/0/zabbix_bridge.py
73+
- Meepo: Event sourcing and event broadcasting for databases. https://github.com/eleme/meepo
74+
- Python MySQL Replication Blinker: This package read events from MySQL binlog and send to blinker's signal. https://github.com/tarzanjw/python-mysql-replication-blinker
75+
- aiomysql_replication: Fork supporting asyncio https://github.com/jettify/aiomysql_replication
76+
- python-mysql-eventprocessor: Daemon interface for handling MySQL binary log events. https://github.com/jffifa/python-mysql-eventprocessor
77+
- mymongo: MySQL to mongo replication https://github.com/njordr/mymongo
78+
- pg_ninja: The ninja elephant obfuscation and replica tool https://github.com/transferwise/pg_ninja/ (http://tech.transferwise.com/pg_ninja-replica-with-obfuscation/)
79+
- MySQLStreamer: MySQLStreamer is a database change data capture and publish system https://github.com/Yelp/mysql_streamer
80+
- binlog2sql: a popular binlog parser that could convert raw binlog to sql and also could generate flashback sql from raw binlog (https://github.com/danfengcao/binlog2sql)
81+
- Streaming mysql binlog replication to Snowflake/Redshift/BigQuery (https://github.com/trainingrocket/mysql-binlog-replication)
82+
- MySQL to Kafka (https://github.com/scottpersinger/mysql-to-kafka/)
83+
- Aventri MySQL Monitor (https://github.com/aventri/mysql-monitor)
84+
- BitSwanPump: A real-time stream processor (https://github.com/LibertyAces/BitSwanPump)
85+
- clickhouse-mysql-data-reader: https://github.com/Altinity/clickhouse-mysql-data-reader
86+
- py-mysql-elasticsearch-sync: https://github.com/jaehyeonpy/py-mysql-elasticsearch-sync
87+
- synch: Sync data from other DB to ClickHouse (https://github.com/long2ice/synch)
88+
- sb-osc: Online schema change tool created by Sendbird (https://github.com/sendbird/sb-osc)
89+
90+
# MySQL server settings
10291

10392
In your MySQL server configuration file you need to enable replication:
10493

@@ -113,12 +102,10 @@ In your MySQL server configuration file you need to enable replication:
113102

114103
reference: https://dev.mysql.com/doc/refman/8.0/en/replication-options-binary-log.html
115104

116-
Examples
117-
=========
105+
# Examples
118106

119107
All examples are available in the [examples directory](https://github.com/noplay/python-mysql-replication/tree/main/examples)
120108

121-
122109
This example will dump all replication events to the console:
123110

124111
```python
@@ -282,94 +269,94 @@ Output will be:
282269
Read bytes: 8
283270
Transaction ID: 14099
284271

272+
# Tests
285273

286-
287-
Tests
288-
========
289274
When it's possible we have a unit test.
290275

291276
More information is available here:
292277
https://python-mysql-replication.readthedocs.org/en/latest/developement.html
293278

294-
Changelog
295-
==========
279+
# Changelog
280+
296281
https://github.com/julien-duponchelle/python-mysql-replication/blob/main/CHANGELOG
297282

298-
Similar projects
299-
==================
300-
* Kodoma: Ruby-binlog based MySQL replication listener https://github.com/y310/kodama
301-
* MySQL Hadoop Applier: C++ version http://dev.mysql.com/tech-resources/articles/mysql-hadoop-applier.html
302-
* Java: https://github.com/shyiko/mysql-binlog-connector-java
303-
* GO: https://github.com/siddontang/go-mysql
304-
* PHP: Based on this this project https://github.com/krowinski/php-mysql-replication and https://github.com/fengxiangyun/mysql-replication
305-
* .NET: https://github.com/SciSharp/dotnet-mysql-replication
306-
* .NET Core: https://github.com/rusuly/MySqlCdc
283+
# Similar projects
284+
285+
- Kodoma: Ruby-binlog based MySQL replication listener https://github.com/y310/kodama
286+
- MySQL Hadoop Applier: C++ version http://dev.mysql.com/tech-resources/articles/mysql-hadoop-applier.html
287+
- Java: https://github.com/shyiko/mysql-binlog-connector-java
288+
- GO: https://github.com/siddontang/go-mysql
289+
- PHP: Based on this this project https://github.com/krowinski/php-mysql-replication and https://github.com/fengxiangyun/mysql-replication
290+
- .NET: https://github.com/SciSharp/dotnet-mysql-replication
291+
- .NET Core: https://github.com/rusuly/MySqlCdc
307292

308-
Special thanks
309-
================
310-
* MySQL binlog from Jeremy Cole was a great source of knowledge about MySQL replication protocol https://github.com/jeremycole/mysql_binlog
311-
* Samuel Charron for his help https://github.com/scharron
293+
# Special thanks
312294

313-
Contributors
314-
==============
295+
- MySQL binlog from Jeremy Cole was a great source of knowledge about MySQL replication protocol https://github.com/jeremycole/mysql_binlog
296+
- Samuel Charron for his help https://github.com/scharron
297+
298+
# Contributors
315299

316300
Major contributor:
317-
* Julien Duponchelle Original author https://github.com/noplay
318-
* bjoernhaeuser for his bugs fixing, improvements and community support https://github.com/bjoernhaeuser
319-
* Arthur Gautier gtid, slave report... https://github.com/baloo
301+
302+
- Julien Duponchelle Original author https://github.com/noplay
303+
- bjoernhaeuser for his bugs fixing, improvements and community support https://github.com/bjoernhaeuser
304+
- Arthur Gautier gtid, slave report... https://github.com/baloo
320305

321306
Maintainer:
322-
* Julien Duponchelle Original author https://github.com/noplay
323-
* Sean-k1 https://github.com/sean-k1
324-
* dongwook-chan https://github.com/dongwook-chan
307+
308+
- Julien Duponchelle Original author https://github.com/noplay
309+
- Sean-k1 https://github.com/sean-k1
310+
- dongwook-chan https://github.com/dongwook-chan
325311

326312
Other contributors:
327-
* Dvir Volk for bug fix https://github.com/dvirsky
328-
* Lior Sion code cleanup and improvements https://github.com/liorsion
329-
* Lx Yu code improvements, primary keys detections https://github.com/lxyu
330-
* Young King for pymysql 0.6 support https://github.com/youngking
331-
* David Reid checksum checking fix https://github.com/dreid
332-
* Alex Gaynor fix smallint24 https://github.com/alex
333-
* lifei NotImplementedEvent https://github.com/lifei
334-
* Maralla Python 3.4 fix https://github.com/maralla
335-
* Daniel Gavrila more MySQL error codes https://github.com/danielduduta
336-
* Bernardo Sulzbach code cleanup https://github.com/mafagafogigante
337-
* Darioush Jalali Python 2.6 backport https://github.com/darioush
338-
* Jasonz bug fixes https://github.com/jasonzzz
339-
* Bartek Ogryczak cleanup and improvements https://github.com/vartec
340-
* Wang, Xiaozhe cleanup https://github.com/chaoslawful
341-
* siddontang improvements https://github.com/siddontang
342-
* Cheng Chen Python 2.6 compatibility https://github.com/cccc1999
343-
* Jffifa utf8mb4 compatibility https://github.com/jffifa
344-
* Romuald Brunet bug fixes https://github.com/romuald
345-
* Cédric Hourcade Don't fail on incomplete dates https://github.com/hc
346-
* Giacomo Lozito Explicit close stream connection on exception https://github.com/giacomolozito
347-
* Giovanni F. MySQL 5.7 support https://github.com/26fe
348-
* Igor Mastak intvar event https://github.com/mastak
349-
* Xie Zhenye fix missing update _next_seq_no https://github.com/xiezhenye
350-
* Abrar Sheikh: Multiple contributions https://github.com/abrarsheikh
351-
* Keegan Parker: secondary database for reference schema https://github.com/kdparker
352-
* Troy J. Farrell Clear table_map if RotateEvent has timestamp of 0 https://github.com/troyjfarrell
353-
* Zhanwei Wang Fail to get table informations https://github.com/wangzw
354-
* Alexander Ignatov Fix the JSON literal
355-
* Garen Chan Support PyMysql with a version greater than 0.9.3 https://github.com/garenchan
356-
* Mike Ascah: Add logic to handle inlined ints in large json documents ttps://github.com/mascah
357-
* Hiroaki Kawai: PyMySQL 1.0 support (https://github.com/hkwi)
358-
* Dongwook Chan: Support for ZEROFILL, Correct timedelta value for negative MySQL TIME datatype, Fix parsing of row events for MySQL8 partitioned table, Parse status variables in query event, Parse status variables in query event , Fix parse errors with MariaDB (https://github.com/dongwook-chan)
359-
* Paul Vickers: Add support for specifying an end log_pos (https://github.com/paulvic)
360-
* Samira El Aabidi: Add support for MariaDB GTID (https://github.com/Samira-El)
361-
* Oliver Seemann: Handle large json, github actions,
362-
Zero-pad fixed-length binary fields (https://github.com/oseemann)
363-
* Mahadir Ahmad: Handle null json payload (https://github.com/mahadirz)
364-
* Axel Viala: Removal of Python 2.7 (https://github.com/darnuria)
365-
* Etern: Add XAPrepareEvent, parse last_committed & sequence_number of GtidEvent (https://github.com/etern)
366-
* Jason Fulghum: typo in ident variable name (https://github.com/fulghum)
313+
314+
- Dvir Volk for bug fix https://github.com/dvirsky
315+
- Lior Sion code cleanup and improvements https://github.com/liorsion
316+
- Lx Yu code improvements, primary keys detections https://github.com/lxyu
317+
- Young King for pymysql 0.6 support https://github.com/youngking
318+
- David Reid checksum checking fix https://github.com/dreid
319+
- Alex Gaynor fix smallint24 https://github.com/alex
320+
- lifei NotImplementedEvent https://github.com/lifei
321+
- Maralla Python 3.4 fix https://github.com/maralla
322+
- Daniel Gavrila more MySQL error codes https://github.com/danielduduta
323+
- Bernardo Sulzbach code cleanup https://github.com/mafagafogigante
324+
- Darioush Jalali Python 2.6 backport https://github.com/darioush
325+
- Jasonz bug fixes https://github.com/jasonzzz
326+
- Bartek Ogryczak cleanup and improvements https://github.com/vartec
327+
- Wang, Xiaozhe cleanup https://github.com/chaoslawful
328+
- siddontang improvements https://github.com/siddontang
329+
- Cheng Chen Python 2.6 compatibility https://github.com/cccc1999
330+
- Jffifa utf8mb4 compatibility https://github.com/jffifa
331+
- Romuald Brunet bug fixes https://github.com/romuald
332+
- Cédric Hourcade Don't fail on incomplete dates https://github.com/hc
333+
- Giacomo Lozito Explicit close stream connection on exception https://github.com/giacomolozito
334+
- Giovanni F. MySQL 5.7 support https://github.com/26fe
335+
- Igor Mastak intvar event https://github.com/mastak
336+
- Xie Zhenye fix missing update \_next_seq_no https://github.com/xiezhenye
337+
- Abrar Sheikh: Multiple contributions https://github.com/abrarsheikh
338+
- Keegan Parker: secondary database for reference schema https://github.com/kdparker
339+
- Troy J. Farrell Clear table_map if RotateEvent has timestamp of 0 https://github.com/troyjfarrell
340+
- Zhanwei Wang Fail to get table informations https://github.com/wangzw
341+
- Alexander Ignatov Fix the JSON literal
342+
- Garen Chan Support PyMysql with a version greater than 0.9.3 https://github.com/garenchan
343+
- Mike Ascah: Add logic to handle inlined ints in large json documents ttps://github.com/mascah
344+
- Hiroaki Kawai: PyMySQL 1.0 support (https://github.com/hkwi)
345+
- Dongwook Chan: Support for ZEROFILL, Correct timedelta value for negative MySQL TIME datatype, Fix parsing of row events for MySQL8 partitioned table, Parse status variables in query event, Parse status variables in query event , Fix parse errors with MariaDB (https://github.com/dongwook-chan)
346+
- Paul Vickers: Add support for specifying an end log_pos (https://github.com/paulvic)
347+
- Samira El Aabidi: Add support for MariaDB GTID (https://github.com/Samira-El)
348+
- Oliver Seemann: Handle large json, github actions,
349+
Zero-pad fixed-length binary fields (https://github.com/oseemann)
350+
- Mahadir Ahmad: Handle null json payload (https://github.com/mahadirz)
351+
- Axel Viala: Removal of Python 2.7 (https://github.com/darnuria)
352+
- Etern: Add XAPrepareEvent, parse last_committed & sequence_number of GtidEvent (https://github.com/etern)
353+
- Jason Fulghum: typo in ident variable name (https://github.com/fulghum)
367354

368355
Thanks to GetResponse for their support
369356

370-
Licence
371-
=======
372-
Copyright 2012-2023 Julien Duponchelle
357+
# Licence
358+
359+
Copyright 2012-2024 Julien Duponchelle
373360

374361
Licensed under the Apache License, Version 2.0 (the "License");
375362
you may not use this file except in compliance with the License.

0 commit comments

Comments
 (0)