【问题标题】:Magento 1.4.1.1 -> 1.7 upgrade: foreign key constraint failsMagento 1.4.1.1 -> 1.7 升级:外键约束失败
【发布时间】:2012-12-02 21:16:00
【问题描述】:

似乎更新magento真的很难:)

我有 magento 1.4.1.1,我想将它更新到最新的 magento 1.4.2。

我遵循本指南: How to upgrade magento 1.4 1.1 to 1.7.0.2

我当然会做什么: - 禁用和清除缓存 - 清除会话 - 更新前禁用所有扩展 - 备份备份备份:D

当我从 1.4.1.1 更新到 1.4.2 时,我会触发主页以进行 mysql 更改。这就是问题的开始。

我收到此错误:

a:5:{i:0;s:435:"Error in file: "/var/www/vhosts/dev/docs/app/code/core/Mage/Sales/sql/sales_setup/mysql4-upgrade-1.4.0.20-1.4.0.21.php" - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dev`.<result 2 when explaining filename '#sql-20eb_3d66'>, CONSTRAINT `FK_PRODUCT_ORDERED_AGGREGATED_MONTHLY_PRODUCT_ID` FOREIGN KEY (`product_id`) REFERENCES `catalog_product_entity` (`entit)";i:1;s:974:"#0 /var/www/vhosts/dev/docs/app/code/core/Mage/Core/Model/Resource/Setup.php(390): Mage::exception('Mage_Core', 'Error in file: ...')

我还尝试直接升级到 1.7,这会导致许多其他类似的错误。我当然可以注释掉所有导致问题的部分,但我认为这不明智:)

您知道我可以做些什么来避免/修复这些错误吗?

非常感谢:)

问候

【问题讨论】:

  • 我要添加“更新 Magento 真的很烦人”...(这里是橡胶房间里的秃头、疯狂笑脸的图片)

标签: upgrade magento-1.4 magento


【解决方案1】:

是的,升级 Magento 几乎从来都不是一帆风顺的。

要诊断此特定问题,您必须比较类型 sales_bestsellers_aggregated_monthly.product_idcatalog_product_entity.entity_id 字段。

您可以在我专门针对此主题的文章中找到有关导致此问题的原因以及解决方案的更多详细信息。

英文:How 3rd Party Extensions Can Ruin Your Magento Upgrade

Auf Deutsch:Wie Externe Extensions Dein Magento-Upgrade Ruinieren Können

【讨论】:

  • 感谢您的帖子!我很快就会在鲁本的位置上,试图找出所有升级都出错的地方,外键的隐现幽灵让我大吃一惊。
  • 你好蒂姆,非常感谢你第一次提示如何解决我的问题 :)
  • @Fiasco Labs,如果您在处理过程中有任何问题,请随时询问。
  • 我比较了这两个字段,发现在这两个表中甚至没有两个product_id字段。在 catalog_product_entity 只有一个 entity_id 字段。在 sales_bestsellers_aggregated_monthly 中有一个 product_id 字段。我怎么解决这个问题?我是否必须在 catalog_product_entity 表中重命名甚至创建 product_id 字段?问候并非常感谢你:)
  • 哦,这是我的错字。 sales_bestsellers_aggregated_monthly.product_id 引用 catalog_product_entity.entity_id。所以你必须比较这两者。
【解决方案2】:

如果您已经备份了数据库并且可以重新启动该过程,我建议您采用另一种方式,但是在这里您必须迁移到 1.5 而不是 1.6 而不是 1.7:

首先,您必须从托管服务提供商处获得 SSH 访问权限,并通过 SSH 协议连接到您的服务器。 那么,

1 – 将 lib/pear 文件夹的权限更改为可写(递归): chmod -R 777 lib/梨

2 – 执行此命令准备 Magento 进行升级: ./pear 法师设置

您很可能会在命令执行后看到以下结果: 频道“connect.magentocommerce.com/core”已经初始化 从 Magento 1.4.1.x 升级到 Magento 1.4.2.0 即使您将 Magento 商店升级到 1.5 或 1.6 版本,此步骤也是必要的。

3 – 执行 Magento 升级命令: ./pear upgrade -f magento-core/Mage_All_Latest-stable 该命令的输出将显示升级了哪些核心包: 升级正常:channel://connect.magentocommerce.com/core/Interface_Adminhtml_Default-1.4.2.0

4 – 当这部分升级完成时,输入以下命令: chmod 550 ./法师 ./mage 法师设置 . 命令执行后你会看到这个结果: 添加成功:connect20.magentocommerce.com/community 说明 Magento connect 2.0 频道已成功添加到频道列表中。

5 – 接下来,输入以下命令: ./法师同步 在这里你应该看到:: … 添加成功:community/Mage_Locale_en_US-1.4.2.0

添加成功:community/Interface_Install_Default-1.4.2.0

成功添加:community/Phoenix_Moneybookers-1.2.3

添加成功:community/Mage_Downloader-1.5.0.0

成功添加:community/Lib_Google_Checkout-1.4.2.0

升级到 Magento 1.4.2.0 已完成,现在您可以继续升级到 Magento 1.5.1.0 或 1.6.0.0。 在继续进行 Magento 升级的这一部分之前,查看 Magento 升级脚本将升级您的商店的版本非常重要。输入此命令以检查: ./mage 列表升级 如果你会看到这个结果:

社区更新:

Mage_All_Latest:1.4.2.1 => 1.6.0.0

Lib_Js_Mage: 1.4.2.0 => 1.6.0.0

Lib_Varien: 1.4.2.0 => 1.6.0.0

Lib_Phpseclib: 1.4.2.0 => 1.5.0.0

这意味着您的 Magento 将升级到 1.6.0.0 版本。如果这不是您需要的,您可以将升级通道更改为“稳定”并将您的 Magento 升级到版本 1.5.1.0。

6 – 输入此命令将升级通道更改为稳定: ./mage config-set preferred_state 稳定 在此之后,“./mage list-upgrades”命令将显示以下结果: 社区更新:

Mage_All_Latest:1.4.2.1 => 1.5.1.0.1

Lib_Js_Mage: 1.4.2.0 => 1.5.1.0

Lib_Varien:1.4.2.0 => 1.5.1.0

Lib_Phpseclib: 1.4.2.0 => 1.5.0.0

Mage_Core_Adminhtml: 1.4.2.0 => 1.5.1.0

Mage_Core_Modules:1.4.2.0 => 1.5.1.0

7 – 选择频道后,您可以使用以下命令将 Magento 升级到 1.5.1.0(或 Magento 1.6.0.0): ./mage upgrade-all –force

您将在屏幕上看到升级的软件包:

… 升级包:community/Mage_Locale_en_US 1.6.0.0

升级包:community/Lib_Mage 1.6.0.0

包升级:community/Lib_ZF 1.11.1.0

包升级:community/Lib_Js_Prototype 1.7.0.0.1

包升级:community/Lib_ZF_Locale 1.11.1.0

现在升级完成。如果一切都正确升级,您将在浏览器中看到升级的商店。 在管理面板中,您可以查看商店的版本。

如果您全新安装了 Magento 版本,并且您不会进行手动数据传输,因为这需要几天甚至几周的时间。如何将数据库直接从 1.4 迁移到新的 Magento 1.7,您可以使用自动化服务。

【讨论】:

    【解决方案3】:

    我有类似的问题:

    app\code\core\Mage\Sales\sql\sales_setup\mysql4-upgrade-1.4.0.20-1.4.0.21.php" - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails ..
    

    但我的情况是,此键出现错误:

    FK_PRODUCT_ORDERED_AGGREGATED_DAILY_PRODUCT_ID
    

    解决方案很简单,我只是从表中删除条目:
    sales_bestsellers_aggregated_daily
    sales_bestsellers_aggregated_monthly
    sales_bestsellers_aggregated_yearly
    其中 product_id 与 catalog_product_entity 表中的 entity_id 不对应。

    此查询可帮助您检测无用的 product_id:

    SELECT product_id FROM sales_bestsellers_aggregated_yearly where product_id not in  
    (select entity_id from catalog_product_entity)
    

    【讨论】:

    • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。
    • 这是问题的正确答案。我上面给出的步骤使我能够执行无缝升级。问题中的问题几乎和我的一样,一个区别是我有3个有问题的表。
    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 2013-05-29
    • 1970-01-01
    • 2013-03-04
    • 2016-08-17
    • 2011-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多