The chameleon logo was made by Elena Toma
Pg_chameleon is a replication tool from MySQL to PostgreSQL developed in Python 2.7 and 3.6. The system uses on the mysql-replication library to pull the changes from MySQL and covert them into a jsonb object. A plpgsql function decodes the jsonb and replays the changes into the PostgreSQL database.
The tool can initialise the replica pulling out the data from MySQL but this requires the FLUSH TABLE WITH READ LOCK; to work properly.
The tool can pull the data from a cascading replica when the MySQL slave is configured with log-slave-updates.
The latest release is the v1.0-RC.1
This release is available on pypi
The documentation is available on here
Please ensure you are running the latest pip version before installing pg_chameleon.
The full changelog is available here
The branch currently developed is the pgchameleon_v1.
The branch pgchameleon_v2 is currently under development and it works python3 only.
For working properly you should use virtualenv and install it using pip install pg_chameleon.
The replica process should be executed in a cron job in order to keep it running. As the replica detects if there’s already another running process, the cron job can be executed frequently (e.g. every 30 minutes) without issues.
There’s no respawning of the process or failure detection.
DDL and DML mixed in the same transaction are not decoded in the right order. This can affect the replica because of a wrong jsonb descriptor.
A recording of a presentation bout pg_chameleon is available on the Brighton PostgreSQL meetup page.
Unfortunately the audio is suboptimal.