【问题标题】:Magento Product Flat Data and Catalog Search Index issueMagento 产品平面数据和目录搜索索引问题
【发布时间】:2013-04-11 14:12:57
【问题描述】:

我们正在运行拥有 8k 产品的 Magento 商店。牵引索引不起作用。抛出一些错误。 产品平面数据错误

Product Flat Data index process unknown error:
exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1005 Can't create table './bofc_magento/#sql-f22_6554c.frm' (errno: 121)' in /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Db/Statement/Pdo.php:228
Stack trace:
#0 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Db/Statement/Pdo.php(228): PDOStatement->execute(Array)
#1 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Varien/Db/Statement/Pdo/Mysql.php(110): Zend_Db_Statement_Pdo->_execute(Array)
#2 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Db/Statement.php(300): Varien_Db_Statement_Pdo_Mysql->_execute(Array)
#3 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Db/Adapter/Abstract.php(479): Zend_Db_Statement->execute(Array)
#4 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('ALTER TABLE `ca...', Array)
#5 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Varien/Db/Adapter/Pdo/Mysql.php(389): Zend_Db_Adapter_Pdo_Abstract->query('ALTER TABLE `ca...', Array)
#6 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Varien/Db/Adapter/Pdo/Mysql.php(327): Varien_Db_Adapter_Pdo_Mysql->query('ALTER TABLE `ca...')
#7 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Varien/Db/Adapter/Pdo/Mysql.php(2548): Varien_Db_Adapter_Pdo_Mysql->raw_query('ALTER TABLE `ca...')
#8 /var/www/vhosts/beadsofcambay.com/httpdocs/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 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Catalog/Model/Resource/Product/Flat/Indexer.php(1390): Mage_Catalog_Model_Resource_Product_Flat_Indexer->prepareFlatTable(1)
#10 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Catalog/Model/Product/Flat/Indexer.php(296): Mage_Catalog_Model_Resource_Product_Flat_Indexer->reindexAll()
#11 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Catalog/Model/Product/Indexer/Flat.php(336): Mage_Catalog_Model_Product_Flat_Indexer->reindexAll()
#12 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Index/Model/Process.php(207): Mage_Catalog_Model_Product_Indexer_Flat->reindexAll()
#13 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Index/Model/Process.php(253): Mage_Index_Model_Process->reindexAll()
#14 /var/www/vhosts/beadsofcambay.com/httpdocs/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#15 /var/www/vhosts/beadsofcambay.com/httpdocs/shell/indexer.php(198): Mage_Shell_Compiler->run()
#16 {main}

目录搜索索引

Catalog Search Index index process unknown error:
exception 'Zend_Cache_Exception' with message 'Could not determine temp directory, please specify a cache_dir manually' in /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Cache.php:209
Stack trace:
#0 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Cache/Backend.php(197): Zend_Cache::throwException('Could not deter...')
#1 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Cache/Backend/File.php(123): Zend_Cache_Backend->getTmpDir()
#2 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Cache.php(153): Zend_Cache_Backend_File->__construct(Array)
#3 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Cache.php(94): Zend_Cache::_makeBackend('File', Array, false, false)
#4 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Locale/Data.php(940): Zend_Cache::factory('Core', 'File', Array, Array)
#5 /var/www/vhosts/beadsofcambay.com/httpdocs/lib/Zend/Locale.php(668): Zend_Locale_Data::getContent('en_US', 'date', NULL)
#6 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php(763): Zend_Locale::getTranslation(NULL, 'date', Object(Zend_Locale))
#7 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php(699): Mage_CatalogSearch_Model_Resource_Fulltext->_getStoreDate(1, NULL)
#8 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php(634): Mage_CatalogSearch_Model_Resource_Fulltext->_getAttributeValue(145, NULL, 1)
#9 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php(230): Mage_CatalogSearch_Model_Resource_Fulltext->_prepareProductIndex(Array, Array, 1)
#10 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php(128): Mage_CatalogSearch_Model_Resource_Fulltext->_rebuildStoreIndex(1, NULL)
#11 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Fulltext.php(83): Mage_CatalogSearch_Model_Resource_Fulltext->rebuildIndex(NULL, NULL)
#12 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/CatalogSearch/Model/Indexer/Fulltext.php(446): Mage_CatalogSearch_Model_Fulltext->rebuildIndex()
#13 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Index/Model/Process.php(207): Mage_CatalogSearch_Model_Indexer_Fulltext->reindexAll()
#14 /var/www/vhosts/beadsofcambay.com/httpdocs/app/code/core/Mage/Index/Model/Process.php(253): Mage_Index_Model_Process->reindexAll()
#15 /var/www/vhosts/beadsofcambay.com/httpdocs/shell/indexer.php(158): Mage_Index_Model_Process->reindexEverything()
#16 /var/www/vhosts/beadsofcambay.com/httpdocs/shell/indexer.php(198): Mage_Shell_Compiler->run()
#17 {main} 

两个索引都是从命令行运行的。我用谷歌搜索了这两个错误,但没有找到任何合适的解决方案。

【问题讨论】:

    标签: php mysql magento


    【解决方案1】:

    几天前我遇到了同样的问题。

    1 - 请进行数据库备份

    2 - 在 Magento 中关闭使用平面产品和类别选项,并将索引模式从产品平面数据切换到手动更新;

    3 - 现在进入你的数据库。删除 catalog_product_flat_xx 表;

    4 - 您必须通过 SSH 重新索引目录。它应该是这样的:

    usr/local/bin/php public_html/shell/indexer.php --reindex catalog_product_flat
    

    Magento 将为每个商店创建新表。我可能需要一点时间。

    完成后,您可以激活 Flat products 选项并检查 Magento 是否可以自行重新索引。

    【讨论】:

    • 我尝试了这些步骤,但没有成功。不知道 Magento 索引器出了什么问题
    • 嗯,这个解决方案应该可以解决你上面描述的问题。
    【解决方案2】:

    截断产品平面数据,然后再次运行此脚本。 应该是外键约束问题。

    【讨论】:

    • 1005 无法创建表:当外键指向非 innodb 引擎类型的表时会发生这种情况。我经历过一次。因此请检查每个表的 Db 引擎。
    • catalog_product_flat_1 表引擎类型是innodb。
    • 只检查所有外键相关的表,而不仅仅是一个特定的表。
    • addForeignKey('FK_CAT_PRD_FLAT...', 'catalog_product...', 'entity_id', 'catalog_product...', 'entity_id', 'CASCADE', 'CASCADE') 也是哪个表这个外键是否指向。你确定它指向的表是 innodb 加上主表列和键列中的字段长度/其他特征是相同的
    • 你能不能只删除你的 sql 中规定的约束并重新运行代码并检查。由于以下原因,未创建表。用户权限不足,空间不足,外键问题。所以放弃外键约束并检查。
    【解决方案3】:

    当我尝试手动更改具有 FK(关系)的列时,我看到了该错误。 截断平面索引表应该让它消失——如果失败,也可以尝试 DELETE FROM 而不是 TRUNCATE。

    有多少属性设置为在前端可见(并添加到平面表中)? MySQL 每行有 64k 的限制,如果你破坏它可能会发生坏事(比如损坏的表......)

    第二个错误看起来只是缓存设置错误 (local.xml) 或 var 文件夹的文件权限问题。

    【讨论】:

    • 我已经多次截断产品平板。仍然得到同样的错误。对于缓存错误 - /var/cache 是可写的。
    • 平表问题,据我从回溯中可以看出,与平表的创建有关。尝试启用 SQL 调试(在 lib/Varien/DB/Adapter/Pdo/Mysql.php L:103 和 L:117 中)并查看 magento 在 (var)/debug/*.log 中真正想要做什么。至于缓存,shell用户是否可以访问var/cache——取决于web服务器设置,php代码可能在不同的用户下运行……或者找不到local.xml/config,这很奇怪。
    【解决方案4】:

    我无法重新索引catalog_product_flat 索引进程。花了一天时间在互联网上尝试了几种解决方案。我能够解决这个问题。 以下是步骤。

    1. 创建面临索引问题的 Magento Db 的克隆。
    2. 将数据库转储到新创建的数据库中。
    3. 为单个存储截断表catalog_product_flat_1,对于多个存储将有多个表catalog_product_flat_*,其中* 是存储ID。此处截断所有表格。
    4. 将mangento运行实例指向新创建的数据库并配置数据库,使站点正常运行。
    5. 现在运行命令php document_root/shell/indexer.php --reindex catalog_product_flat 或尝试从管理员重新索引。 php document_root/shell/indexer.php --reindexall 重新索引所有进程。

    【讨论】:

      【解决方案5】:

      我在目录搜索中重新索引时遇到了同样的问题...... 10 天后我找到了解决方案。

      我得到的目录搜索索引错误:

      带有消息“SQLSTATE[HY000]”的异常“PDOException”:一般错误: 1785 当@@GLOBAL.ENFORCE_GTID_CONSISTEN CY = 1 时,更新为 非事务表只能在自动提交中完成 语句或单语句事务,并且永远不会在同一个 语句作为事务表的更新。'

      解决办法是:

      1. 删除表catalogsearch_fulltext
      2. 使用现有结构再次创建catalogsearch_fulltext 表。
      3. 使用打击提到的查询更新表catalogsearch_query

        UPDATE catalogsearch_query SET is_processed = 0

      然后打开您的 SSH 并运行命令使其再次工作:

      [~/public_html/shell]# php indexer.php reindexall
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-08-11
        • 1970-01-01
        • 2021-07-07
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多