使用 Rails 3.2 和 MySQL。我有一个实现问题:
我的应用数据库abc
,其中包含表products
、users
等
第 3 方数据库 xyz
,其中包含表:products
、product_images
等
- 数据库
xyz
每周通过从第三方服务器下载进行刷新,并替换现有的xyz
。该数据库为 2GB。 xyz.products
导入到abc.products
中进行列表和搜索。- 当调用
abc.products
中的一行时,它将查找xyz.product_images
来列出图像。
问题:每次更新xyz
(数据库转储和导入)时,都会找不到一些abc.product_images
。我怎样才能实现这一点以使我的应用程序不停机?每次刷新xyz
,需要2-3小时才能完成。
我什至想过下载新的xyz
并导入xyz_new
,将xyz.products
导入abc.products
,然后删除xyz
并将xyz_new
重命名为xyz
,但这本身需要很长时间,因为MySQL没有重命名功能。
最佳答案
这可能不是最好的答案,但暂时这是我的解决方法:
xyz
是定期更新的数据库。abc
是要根据xyz
更新的应用数据库。- 将
xyz.products
的表结构复制到xyz.products_new
。向其中导入新数据。 - 将
xyz.product_images
的表结构复制到xyz.product_images_new
。向其中导入新数据。 - 删除
xyz.products
,将xyz.products_new
重命名为xyz.products
。 - 删除
xyz.product_images
,将xyz.product_images_new
重命名为xyz.product_images
。 - 运行脚本将
xyz.products
与abc.proucts
进行比较。如有必要,创建/删除/更新。
停机时间非常短,因为我正在重命名表而不是数据库。
关于mysql - Rails 3rd 方大型数据库更新无需停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21409121/