Metadata-Version: 2.1
Name: django-mysql-replication
Version: 0.1.3
Summary: MySQL DB change events by reading replication logs
Home-page: https://github.com/waqqas/django-mysql-replication
Author: Waqqas Jabbar
Author-email: waqqas.jabbar@egmail.com
License: MIT
Keywords: django,schedule
Platform: UNKNOWN
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Web Environment
Classifier: Framework :: Django
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Provides-Extra: dev
License-File: LICENSE

### 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`

