django-mysql-replication

MySQL DB change events by reading replication logs


Keywords
django, schedule
License
MIT
Install
pip install django-mysql-replication==0.1.1

Documentation

django-myql-migration

MySQL DB change events by reading replication logs. These are useful when the data is directly inserted into the MySQL database.

Installation

Install via pip

pip install django-myql-migration

Add "django_myql_migration" to your INSTALLED_APPS settings like this:

INSTALLED_APPS = (
    "django_myql_migration",
    ...
)

Edit my.cnf to setup replication, as follows:

[mysqld]
log-bin=mysql-bin
server-id=1
binlog-format=row
gtid_mode=ON
log-slave_updates=true
enforce_gtid_consistency
binlog-row-metadata=FULL
binlog-row-image=FULL

Set these environment variables MYSQL_HOST, MYSQL_PORT, MYSQL_DATABASE, MYSQL_SLAVE_USER, MYSQL_SLAVE_PASSWORD

Add replication user using the following command

mysql -u root -p -h ${MYSQL_HOST} -P ${MYSQL_PORT} ${MYSQL_DATABASE} -e "CREATE USER '${MYSQL_SLAVE_USER}'@'%' IDENTIFIED BY '${MYSQL_SLAVE_PASSWORD}'; GRANT REPLICATION SLAVE, REPLICATION CLIENT, SELECT ON *.* TO '${MYSQL_SLAVE_USER}'@'%';FLUSH PRIVILEGES;"

Usage

There are 3 signals generated by the package: row_inserted, row_deleted and row_updated. You can use the standard Django signal handling mechanism to handle signals. e.g. To know when the user is added to the system, you can create a signals.py file with the following content

from django_mysql_replication.signals import row_inserted
from django.contrib.auth import get_user_model

User = get_user_model()

@receiver(row_inserted, sender=User)
def user_added(sender, instance, *args, **kwargs):
    pass

Run the following command to listen to DB changes

python manage.py listen