我有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执行同步更快?
答案 0 :(得分:1)
您确定这不是过早优化的情况。只有当您有大量繁重的查询或大量并发用户时,这种努力才有价值。如果您继续阅读,
mysqldump和import绝对不是要走的路。如果您有大量数据来证明使用multi-db,那么转储将花费很长时间。进口需要更长时间。导入发生时,表将被锁定。这意味着您的所有读取操作都将停止。
这是使用两个数据库的唯一实用方法。
复制启用来自一个MySQL数据库服务器(主服务器)的数据 被复制到一个或多个MySQL数据库服务器(从属服务器)。 默认情况下,复制是异步的奴隶不需要 永久连接以接收来自主服务器的更新。取决于 在配置中,您可以复制所有选定的数据库 数据库,甚至是数据库中的选定表。
http://dev.mysql.com/doc/refman/5.7/en/replication.html
的详细信息这可以与Django数据库路由器同时使用。您可以有一个DB用于阅读,另一个用于写入。在两者之间复制数据由mysql复制以快速有效的方式处理。