### 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`
Raw data
{
"_id": null,
"home_page": "https://github.com/waqqas/django-mysql-replication",
"name": "django-mysql-replication",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "django, schedule",
"author": "Waqqas Jabbar",
"author_email": "waqqas.jabbar@egmail.com",
"download_url": "https://files.pythonhosted.org/packages/c8/23/01f2a63b23ed9d64318e07c187a58972a65895b7c0db353be493e554e792/django-mysql-replication-0.1.3.tar.gz",
"platform": null,
"description": "### django-myql-migration\nMySQL DB change events by reading replication logs. These are useful when the data is directly inserted into the MySQL database.\n\n### Installation\n\nInstall via `pip`\n\n`pip install django-myql-migration`\n\nAdd `\"django_myql_migration\"` to your `INSTALLED_APPS` settings like this:\n\n```\nINSTALLED_APPS = (\n \"django_myql_migration\",\n ...\n)\n```\n\nEdit `my.cnf` to setup replication, as follows:\n```\n[mysqld]\nlog-bin=mysql-bin\nserver-id=1\nbinlog-format=row\ngtid_mode=ON\nlog-slave_updates=true\nenforce_gtid_consistency\nbinlog-row-metadata=FULL\nbinlog-row-image=FULL\n```\n\nSet these environment variables `MYSQL_HOST`, `MYSQL_PORT`, `MYSQL_DATABASE`, `MYSQL_SLAVE_USER`, `MYSQL_SLAVE_PASSWORD`\n\nAdd replication user using the following command\n\n`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;\"`\n\n\n### Usage\n\nThere 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\n\n```\nfrom django_mysql_replication.signals import row_inserted\nfrom django.contrib.auth import get_user_model\n\nUser = get_user_model()\n\n@receiver(row_inserted, sender=User)\ndef user_added(sender, instance, *args, **kwargs):\n pass\n\n```\n\nRun the following command to listen to DB changes\n\n`python manage.py listen`\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "MySQL DB change events by reading replication logs",
"version": "0.1.3",
"project_urls": {
"Homepage": "https://github.com/waqqas/django-mysql-replication"
},
"split_keywords": [
"django",
" schedule"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "60f1dd490d55281407908ef3933470343c1b37ac94daec5f39727a834343c7d9",
"md5": "aa11cb0b7c6bd8d9ae8cf9665442d958",
"sha256": "9da32b926705c1b85ccaac49812a3b10ddb63334336b7342de187bcd2e8228ed"
},
"downloads": -1,
"filename": "django_mysql_replication-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "aa11cb0b7c6bd8d9ae8cf9665442d958",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 6891,
"upload_time": "2024-05-12T14:53:07",
"upload_time_iso_8601": "2024-05-12T14:53:07.093568Z",
"url": "https://files.pythonhosted.org/packages/60/f1/dd490d55281407908ef3933470343c1b37ac94daec5f39727a834343c7d9/django_mysql_replication-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "c82301f2a63b23ed9d64318e07c187a58972a65895b7c0db353be493e554e792",
"md5": "2cfc0764944d0a6e1490e430c62aac50",
"sha256": "fc8ffb2f8366ff98f3a7dff2c92de86e499b1087a7f6cdd63d9833f5b2e1d892"
},
"downloads": -1,
"filename": "django-mysql-replication-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "2cfc0764944d0a6e1490e430c62aac50",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 5795,
"upload_time": "2024-05-12T14:53:08",
"upload_time_iso_8601": "2024-05-12T14:53:08.648399Z",
"url": "https://files.pythonhosted.org/packages/c8/23/01f2a63b23ed9d64318e07c187a58972a65895b7c0db353be493e554e792/django-mysql-replication-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-12 14:53:08",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "waqqas",
"github_project": "django-mysql-replication",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "django-mysql-replication"
}