mysql - Rails 3rd 方大型数据库更新无需停机

标签 mysql ruby-on-rails database

使用 Rails 3.2 和 MySQL。我有一个实现问题:

我的应用数据库abc,其中包含表productsusers

第 3 方数据库 xyz,其中包含表:productsproduct_images

  1. 数据库xyz每周通过从第三方服务器下载进行刷新,并替换现有的xyz。该数据库为 2GB。
  2. xyz.products 导入到 abc.products 中进行列表和搜索。
  3. 当调用 abc.products 中的一行时,它将查找 xyz.product_images 来列出图像。

问题:每次更新xyz(数据库转储和导入)时,都会找不到一些abc.product_images。我怎样才能实现这一点以使我的应用程序不停机?每次刷新xyz,需要2-3小时才能完成。

我什至想过下载新的xyz并导入xyz_new,将xyz.products导入abc.products,然后删除xyz并将xyz_new重命名为xyz,但这本身需要很长时间,因为MySQL没有重命名功能。

最佳答案

这可能不是最好的答案,但暂时这是我的解决方法:

  1. xyz是定期更新的数据库。
  2. abc 是要根据 xyz 更新的应用数据库。
  3. xyz.products的表结构复制到xyz.products_new。向其中导入新数据。
  4. xyz.product_images的表结构复制到xyz.product_images_new。向其中导入新数据。
  5. 删除 xyz.products,将 xyz.products_new 重命名为 xyz.products
  6. 删除 xyz.product_images,将 xyz.product_images_new 重命名为 xyz.product_images
  7. 运行脚本将xyz.productsabc.proucts 进行比较。如有必要,创建/删除/更新。

停机时间非常短,因为我正在重命名表而不是数据库。

关于mysql - Rails 3rd 方大型数据库更新无需停机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21409121/

相关文章:

php - 如果有的话,我需要做什么来确保 $mdb2->lastInsertID() 返回该连接的自动增量值?

javascript - 发送实时数据到mysql?

mysql - 论坛MySQL查询

php - Twitter Bootstrap - 将唯一 ID 传递给模态框

ruby-on-rails - Rails 中有条件地更改 link_to 位置的简洁方法

mysql - 计算字符串中唯一字符的数量

php - 宠物数据库设计

ruby-on-rails - 无法将符号转换为整数

ruby-on-rails - TypeError:在Rails 3.2项目中使用模型对象时,Proc的分配器未定义

c# - 查询的多个要求