Django的多个数据库和路由可用于跨数据库同步数据

时间:2016-06-14 19:39:23

标签: mysql django

我有2个不同的mysql数据库(OLD和NEW)在不同的服务器上运行。 OLD数据库有大约10个表,我想要同步3个表数据库NEW。因此,如果在这3个表上发生任何添加/删除/更新,则应在数据库NEW上更新这些条目。我使用mysql转储创建了新数据库。

通过使用django多数据库和路由可以实现上述目的吗? 我正计划:

DATABASES = {
'default': {},
'OLD': {
    'NAME': 'user_data',
    'ENGINE': 'django.db.backends.mysql',
    'USER': 'mysql_user',
    'PASSWORD': 'superS3cret'
},
'NEW': {
    'NAME': 'customer_data',
    'ENGINE': 'django.db.backends.mysql',
    'USER': 'mysql_cust',
    'PASSWORD': 'veryPriv@ate'
}

}

然后有一个类似于https://docs.djangoproject.com/en/1.9/topics/db/multi-db/

中定义的PrimaryReplicaRouter

然后我可以查询来自OLD的数据,这些数据在上次合并时间后有变化,然后保存到NEW。我不确定这是否适用于sycning数据?如果它比在cron中每1小时使用mysqldump执行同步更快?

1 个答案:

答案 0 :(得分:1)

值得吗?

您确定这不是过早优化的情况。只有当您有大量繁重的查询或大量并发用户时,这种努力才有价值。如果您继续阅读,

不要转储和导入

mysqldump和import绝对不是要走的路。如果您有大量数据来证明使用multi-db,那么转储将花费很长时间。进口需要更长时间。导入发生时,表将被锁定。这意味着您的所有读取操作都将停止。

mysql复制

这是使用两个数据库的唯一实用方法。

  

复制启用来自一个MySQL数据库服务器(主服务器)的数据   被复制到一个或多个MySQL数据库服务器(从属服务器)。   默认情况下,复制是异步的奴隶不需要   永久连接以接收来自主服务器的更新。取决于   在配置中,您可以复制所有选定的数据库   数据库,甚至是数据库中的选定表。

http://dev.mysql.com/doc/refman/5.7/en/replication.html

的详细信息

这可以与Django数据库路由器同时使用。您可以有一个DB用于阅读,另一个用于写入。在两者之间复制数据由mysql复制以快速有效的方式处理。