【问题标题】:Preserving the ID column in a Magento database migration在 Magento 数据库迁移中保留 ID 列
【发布时间】:2012-02-02 01:05:16
【问题描述】:

我正在将 Magento 1.3 安装迁移到 Magento 1.5 版。由于 1.3 安装的复杂性,数据库正在通过导出/调整/导入过程进行迁移。不幸的是,在导入步骤中,客户、订单和产品的 ID 列与旧版本的 ID 不同,并且差异会导致重大更改(即,不能保证给定订单附加到同一客户)以前,订单不保证包含与以前相同的产品)。

我们如何调整我们的流程以使 ID 列保持不变,或者使新状态在内部保持一致? - 即数据库中的事物可能具有与以前不同的 ID,但给定的订单包含它之前所做的所有相同产品并附加到同一客户。

我的第一个冲动是尝试将自定义属性添加到有问题的行并使其与 ID 匹配,然后在迁移后数据库上运行查询以将 ID 恢复为原始值,但 Magento 的 EAV 数据模型可以做到这一点复杂,而且我不确定这是否会通过将 ID 乱序来破坏添加未来产品、订单等的能力。这个计划可行吗?

【问题讨论】:

  • 我们开发了一些用于导入客户和订单数据的自定义 SQL 脚本,并且我们完全按照以前的方式转储了 ID。然后,我们将任何 id 更新为不同的新 EAV 值。这是一个非常复杂的过程。我们还使用 Rapid Flow 来简化分配工作。
  • 您能否对此进行扩展,也许可以将其作为这个问题的答案?我很想看看你遇到了什么样的 SQL 挑战,或者想知道你是如何使用 uRapidFlow 模块完成任务的。
  • 我需要一个小时来解释我们从导入工具中获得的所有好处。它还帮助我们重新运行导入,并将数据更新为最新信息,而不会填充新数据,因为我们至少运行了 4 次导入,以反映仍在运行的旧站点的最新数据,在我们进行数据导入测试时。如果系统中不存在它们,它会整理出所有 EAV 文件,并动态创建新属性。作为一个 MySQL dba 类型的人,我不准备对 SQL 语句做同样的事情。
  • 我使用一些 SQL 脚本的唯一原因是导入 150,000 个客户需要很长时间。通过 SQL 导入是一件相当容易的事情,因为我们不想带来任何订单。

标签: php mysql magento


【解决方案1】:

我建议使用Unirgy's uRapidFlow tool - 它可以为您节省数小时的麻烦。我们过去曾将它用于大型网站。

它的一些特点是:

  • 原始扩展包括产品导入/导出(有关更多数据类型,请参阅附加组件)
  • 忽略空行或注释掉的行
  • 没有导出/需要内部实体 ID
  • 每个配置文件的 CSV 文件编码
  • 识别并跳过不需要更新的记录
  • 具有详细报告的广泛数据验证
  • 如果行包含多个错误和警告,请将它们全部记录下来
  • 使用 FTP 从/到远程位置导入/导出
  • 稳定的小内存使用率
  • 在不更改数据的情况下验证导入文件的试运行选项
  • 导入产品时,在需要时自动创建类别、属性选项值和属性集(可选)
  • 在配置文件完成时自动重新索引目录区域或刷新不同的缓存类型,以任何顺序
  • 将导入的文件导出为 Excel 电子表格,逐个单元格标记错误和警告,并附上说明
  • 导入/导出图像文件
  • 直接从 HTTP URL 导入图像文件
  • 使用 cronjobs 的单个和批处理计划会话
  • 导入/导出配置文件配置

【讨论】:

  • 这看起来很有趣,但我认为我没有看到直接解决我遇到的问题的方法。您能否更具体地说明哪个功能解决了 ID 列移位问题?
  • uRapidflow 为您处理该位,因此您不必担心会创建孤立数据,它会逐个遍历每个数据行,将数据拉过来,并更新所有ID 使它们保持同步。除非您可以在数据库上进行 DBA 级别的操作,否则我建议使用工具。
  • "更新所有 ID 以保持同步。" - 啊,这就是我要找的,谢谢。
  • 那条线,意味着拔头发的时间减少了 10 小时!