Magento 1.4.1.1 - > 1.7升级:外键约束失败

时间:2012-12-02 21:16:00

标签: upgrade magento-1.4 magento

似乎更新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,这导致了许多其他类似的错误。我当然可以评论所有导致问题的部分,但我认为这不会是明智的:)

你知道我能做些什么来避免/修复这些错误吗?

非常感谢:)

迎接

3 个答案:

答案 0 :(得分:2)

是的,升级Magento几乎不会顺利。

要诊断此特定问题,您必须比较类型sales_bestsellers_aggregated_monthlyproduct_idcatalog_product_entityentity_id字段。

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

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

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

答案 1 :(得分:0)

如果你已经备份了数据库并且可以重新开始这个过程,我会建议你采取另一种方式,但在这里你将不得不转向1.5而不是1.6而不是1.7:

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

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

2 - 执行此命令以准备Magento进行升级: ./pear mage-setup

在命令执行后,您很可能会看到此结果: 频道“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 输出命令将显示升级的核心包: 升级ok:channel://connect.magentocommerce.com/core/Interface_Adminhtml_Default-1.4.2.0

4 - 完成升级的这一部分后,输入以下命令: chmod 550 ./mage ./mage mage-setup。 您将在命令执行后看到此结果: 成功添加:connect20.magentocommerce.com/community 这意味着Magento connect 2.0频道已成功添加到频道列表中。

5 - 接下来,输入以下命令: ./mage sync 在这里你应该看到:: ... 成功添加:community / Mage_Locale_en_US-1.4.2.0

成功添加:community / Interface_Install_Default-1.4.2.0

成功添加:社区/ Phoenix_Moneybookers-1.2.3

成功添加:community / Mage_Downloader-1.5.0.0

成功添加:社区/ Lib_Google_Checkout-1.4.2.0

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

社区更新:

Mage_All_Latest:1.4.2.1 =&gt; 1.6.0.0

Lib_Js_Mage:1.4.2.0 =&gt; 1.6.0.0

Lib_Varien:1.4.2.0 =&gt; 1.6.0.0

Lib_Phpseclib:1.4.2.0 =&gt; 1.5.0.0

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

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

Mage_All_Latest:1.4.2.1 =&gt; 1.5.1.0.1

Lib_Js_Mage:1.4.2.0 =&gt; 1.5.1.0

Lib_Varien:1.4.2.0 =&gt; 1.5.1.0

Lib_Phpseclib:1.4.2.0 =&gt; 1.5.0.0

Mage_Core_Adminhtml:1.4.2.0 =&gt; 1.5.1.0

Mage_Core_Modules:1.4.2.0 =&gt; 1.5.1.0

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

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

... 包升级:社区/ Mage_Locale_en_US 1.6.0.0

包升级:community / Lib_Mage 1.6.0.0

包升级:社区/ 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,您可以使用自动服务。

答案 2 :(得分:0)

我有类似的问题:

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)