我们的magento 1.6.2无法重新索引产品平面数据.它有时也会显示"重建索引过程出现问题".
我从其他用户的经验中尝试了很多解决方案.没有结果.我们进口散装产品,但我们不确定这是重新索引问题的原因.
什么是理想的解决方案?
这是我在shell中使用的命令:
php /usr/local/lsws/fcgi-bin/lsphp5 /home/user/domains/my domain../public_html/shell/indexer.php
Run Code Online (Sandbox Code Playgroud)
这是来自exception.log的错误
2012-08-09T14:55:43+00:00 DEBUG (7): Exception message: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`galagearbox/#sql-1662_1fc419`, CONSTRAINT `FK_CAT_PRD_FLAT_4_ENTT_ID_CAT_PRD_ENTT_ENTT_ID` FOREIGN KEY (`entity_id`) REFERENCES `catalog_product_entity` (`entity_id`) ON DELETE CASCA)
Trace: #0 /home/corecolu/public_html/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /home/corecolu/public_html/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /home/corecolu/public_html/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /home/corecolu/public_html/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /home/corecolu/public_html/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('ALTER TABLE `ca...', Array)
#5 /home/corecolu/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(389): Zend_Db_Adapter_Pdo_Abstract->query('ALTER TABLE `ca...', Array)
#6 /home/corecolu/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(327): Varien_Db_Adapter_Pdo_Mysql->query('ALTER TABLE `ca...')
#7 /home/corecolu/public_html/lib/Varien/Db/Adapter/Pdo/Mysql.php(2548): Varien_Db_Adapter_Pdo_Mysql->raw_query('ALTER TABLE `ca...')
#8 /home/corecolu/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(816): Varien_Db_Adapter_Pdo_Mysql->addForeignKey('FK_CAT_PRD_FLAT...', 'catalog_product...', 'entity_id', 'catalog_product...', 'entity_id', 'CASCADE', 'CASCADE')
#9 /home/corecolu/public_html/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(1390): Mage_Catalog_Model_Resource_Product_Flat_Indexer->prepareFlatTable(4)
#10 /home/corecolu/public_html/app/code/core/Mage/Catalog/Model/Product/Flat/Indexer.php(296): Mage_Catalog_Model_Resource_Product_Flat_Indexer->reindexAll()
#11 /home/corecolu/public_html/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php(336): Mage_Catalog_Model_Product_Flat_Indexer->reindexAll()
#12 /home/corecolu/public_html/app/code/core/Mage/Index/Model/Process.php(207): Mage_Catalog_Model_Product_Indexer_Flat->reindexAll()
#13 /home/corecolu/public_html/app/code/core/Mage/Index/Model/Process.php(253): Mage_Index_Model_Process->reindexAll()
#14 /home/corecolu/public_html/app/code/core/Mage/Index/controllers/Adminhtml/ProcessController.php(124): Mage_Index_Model_Process->reindexEverything()
#15 /home/corecolu/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(420): Mage_Index_Adminhtml_ProcessController->reindexProcessAction()
#16 /home/corecolu/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(250): Mage_Core_Controller_Varien_Action->dispatch('reindexProcess')
#17 /home/corecolu/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#18 /home/corecolu/public_html/app/code/core/Mage/Core/Model/App.php(349): Mage_Core_Controller_Varien_Front->dispatch()
#19 /home/corecolu/public_html/app/Mage.php(640): Mage_Core_Model_App->run(Array)
#20 /home/corecolu/public_html/index.php(83): Mage::run('', 'store')
#21 {main}
Run Code Online (Sandbox Code Playgroud)
在Magento中重新索引错误可能有很多原因,所以我担心永远不会有一个涵盖所有可能错误的"理想"解决方案.
由于您发布了非技术性错误消息,我猜您已尝试使用管理员后端重新索引产品平面数据,并在那里看到错误消息.
我建议再次尝试重新索引,但使用shell/indexer.php这个时间:
/usr/bin/php -f /abs/path/to/shell/indexer.php -- --reindex catalog_product_flat
Run Code Online (Sandbox Code Playgroud)
这样,如果重建索引失败,您将获得更有意义的技术错误消息.
这是一个列表,显示了用于哪个索引的参数:
catalog_product_attribute Product Attributes
catalog_product_price Product Prices
catalog_url Catalog URL Rewrites
catalog_product_flat Product Flat Data
catalog_category_flat Category Flat Data
catalog_category_product Category Products
catalogsearch_fulltext Catalog Search Index
cataloginventory_stock Stock Status
tag_summary Tag Aggregation Data
Run Code Online (Sandbox Code Playgroud)
您添加到帖子中的例外情况告诉我们之间的参照完整性
catalog_product_flat_4.entity_id
Run Code Online (Sandbox Code Playgroud)
和
catalog_product_entity.entity_id
Run Code Online (Sandbox Code Playgroud)
被发现被腐败了.
通常这意味着某些记录包含null字段中的字段catalog_product_entity.entity_id,其中它们应包含现有的entity_ids.
在尝试解决此问题之前,请先备份您的数据库.
现在,要查找损坏的记录,请使用以下命令查询数据库:
SELECT
a.entity_id
FROM
catalog_product_flat_4 AS a
LEFT JOIN
catalog_product_entity AS b ON a.entity_id = b.entity_id
WHERE
ISNULL(b.entity_id)
Run Code Online (Sandbox Code Playgroud)
在entity_id此查询发现s为entity_idS IN的表catalog_product_flat_4,这已损坏,需要被删除.
删除相应的记录catalog_product_flat_4,然后再次尝试重新编制索引.