Skip to content

waqqas/django-mysql-replication

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

MySQL DB change events by reading replication logs

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages