Проблемы с индексированием Category Flat Data после переноса

[16 июля 2019 г.]    Российская сборка Magento 2.52.2
Magento 2: модули и услуги
magereport.com: составление перечня необходимых для установки заплаток SUPEE
#1 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 01:30

*************************************************
Отныне решать проблему «Cannot initialize the indexer process» / «There was a problem with reindexing process»
способна Российская сборка Magento.
*************************************************


Проблема выглядит так:
Есть рабочий магазин Magento 1.4.1.1 на выделенном сервере с Debian, PHP 5.2.6, MySQL 5.0.51
С этого сервера сливается бэкап: корневая директоря мадженты + mysqldump базы
При востановлении бэкапа на сервер все работает как часы.

Когда я закидываю бэкап на домашний комп с WinXP SP3, PHP 5.3.0, MySQL 5.1.36, все работает отлично, кроме переиндексации "Category Flat Data" (Reorganize EAV category structure to flat structure). Выдает ошибку "There was a problem with reindexing process." и статус стоит "обработка".
Прикрепленное изображение: 2627.png

В логах мадженты:

Цитата

2010-12-10T21:33:22+00:00 DEBUG (7): Exception message: SQLSTATE[HY000]: General error: 1005 Can't create table 'magic.catalog_category_flat_store_1' (errno: 150)
Trace: #0 {трали-вали}\htdocs\magento\lib\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 {трали-вали}\htdocs\magento\lib\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 {трали-вали}\htdocs\magento\lib\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('CREATE TABLE `c...', Array)
#3 {трали-вали}\htdocs\magento\lib\Varien\Db\Adapter\Pdo\Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('CREATE TABLE `c...', Array)
#4 {трали-вали}\htdocs\magento\app\code\core\Mage\Catalog\Model\Resource\Eav\Mysql4\Category\Flat.php(523): Varien_Db_Adapter_Pdo_Mysql->query('CREATE TABLE `c...')
#5 {трали-вали}\htdocs\magento\app\code\core\Mage\Catalog\Model\Resource\Eav\Mysql4\Category\Flat.php(430): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat->_createTable('1')
#6 {трали-вали}\htdocs\magento\app\code\core\Mage\Catalog\Model\Category\Indexer\Flat.php(237): Mage_Catalog_Model_Resource_Eav_Mysql4_Category_Flat->rebuild()
#7 {трали-вали}\htdocs\magento\app\code\core\Mage\Index\Model\Process.php(139): Mage_Catalog_Model_Category_Indexer_Flat->reindexAll()
#8 {трали-вали}\htdocs\magento\app\code\core\Mage\Index\Model\Process.php(167): Mage_Index_Model_Process->reindexAll()
#9 {трали-вали}\htdocs\magento\app\code\core\Mage\Index\controllers\Adminhtml\ProcessController.php(124): Mage_Index_Model_Process->reindexEverything()
#10 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Controller\Varien\Action.php(418): Mage_Index_Adminhtml_ProcessController->reindexProcessAction()
#11 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Controller\Varien\Router\Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('reindexProcess')
#12 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Controller\Varien\Front.php(177): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#13 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#14 {трали-вали}\htdocs\magento\app\Mage.php(596): Mage_Core_Model_App->run(Array)
#15 {трали-вали}\htdocs\magento\index.php(78): Mage::run('', 'store')
#16 {main}


Таблица catalog_category_flat_store_1, я так понимаю, в начале процесса индексации удаляется из базы, но потом почему-то не создается.

Корневой URL сайта, естественно поменял.
Пробовал сливать дамп базы средствами мадженты - тот же результат.
Закопался в официальных форумах мадженты, но пока ничего, что могло мне помочь, не нашел.
Трюк с удалением фсех файлов в папке var/locks, с удалением папки locks и папки var не прокатывает.
Кэш мадженты удалил в первую очередь.
magento-db-repair-tool ошибок не находит.

Что посоветуете? Куда копать? Какие конфиги выложить? У меня уже закончились идеи :(

#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 02:04

Читайте документацию к MySQL:

Цитата

If you re-create a table that was dropped, it must have a definition that conforms to the foreign key constraints referencing it. It must have the right column names and types, and it must have indexes on the referenced keys, as stated earlier. If these are not satisfied, MySQL returns error number 1005 and refers to error 150 in the error message.


Я так понимаю, вам может помочь отключение проверок внешних ключей.
В начале скрипта SQL напишите:

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;


#3 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 02:07

В начале дампа, среди прочих параметров стоит:
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

Это тоже самое?

#4 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 02:11

Не совсем. Такой синтаксис, как у вас, не всегда работает.

#5 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 02:25

Не помогло :(

#6 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 02:31

Попробуйте во всём скрипте SQL заменить все команды типа

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;


на команды типа:
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;


Другими словами, удалить обрамляющие символы "/*!40014" и " */"

И ещё убедитесь, что для созданных в процессе импорта таблиц выбран движок InnoDB, а не MyISAM.
phpMyAdmin это показывает.

#7 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 02:47

Похожие конструкции встречались только 2 раза, в начале и в конце, удаление служебных символов не помогло.
По-умолчанию стоит MyISAM, как и на сервере.

#8 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 02:49

И таблицы после импорта у вас действительно InnoDB?

#9 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 02:53

Только сейчас обратил внимание, все таблицы получились MyISAM, + несколько MEMORY. И на сервере все точно так же. Вроде должны были быть и таблицы InnoDB. :blink:
Но на сервере пока все работает :)

#10 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 02:55

А вы попробуйте в скрипте SQL заменить вхождения слова MyISAM на InnoDB, и после этого заново импортируйте этот скрипт в чистую базу.

#11 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 03:09

так вообще все убилось :(

Цитата

a:5:{i:0;s:96:"SQLSTATE[42S02]: Base table or view not found: 1146 Table 'magic.core_url_rewrite' doesn't exist";i:1;s:2192:"#0 {трали-вали}\htdocs\magento\lib\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 {трали-вали}\htdocs\magento\lib\Zend\Db\Adapter\Abstract.php(468): Zend_Db_Statement->execute(Array)
#2 {трали-вали}\htdocs\magento\lib\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query('SELECT `core_ur...', Array)
#3 {трали-вали}\htdocs\magento\lib\Varien\Db\Adapter\Pdo\Mysql.php(333): Zend_Db_Adapter_Pdo_Abstract->query('SELECT `core_ur...', Array)
#4 {трали-вали}\htdocs\magento\lib\Zend\Db\Adapter\Abstract.php(725): Varien_Db_Adapter_Pdo_Mysql->query(Object(Varien_Db_Select), Array)
#5 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\Mysql4\Abstract.php(352): Zend_Db_Adapter_Abstract->fetchRow(Object(Varien_Db_Select))
#6 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\Abstract.php(225): Mage_Core_Model_Mysql4_Abstract->load(Object(Mage_Core_Model_Url_Rewrite), 'admin/process/l...', 'request_path')
#7 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\Url\Rewrite.php(85): Mage_Core_Model_Abstract->load('admin/process/l...', 'request_path')
#8 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\Url\Rewrite.php(215): Mage_Core_Model_Url_Rewrite->loadByRequestPath(Array)
#9 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Controller\Varien\Front.php(166): Mage_Core_Model_Url_Rewrite->rewrite()
#10 {трали-вали}\htdocs\magento\app\code\core\Mage\Core\Model\App.php(304): Mage_Core_Controller_Varien_Front->dispatch()
#11 {трали-вали}\htdocs\magento\app\Mage.php(596): Mage_Core_Model_App->run(Array)
#12 {трали-вали}\htdocs\magento\index.php(78): Mage::run('', 'store')
#13 {main}";s:3:"url";s:75:"/magento/index.php/admin/process/list/key/ca677fff4533fc00b3342b0913eba800/";s:11:"script_name";s:18:"/magento/index.php";s:4:"skin";s:7:"default";}


#12 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 03:13

Вы посмотрите, создает ли скрипт импорта таблицу core_url_rewrite

#13 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 03:17

Логично :)
Таблицы такой нет. И вообще в базе получилось только 110 таблиц, вместо 312.

#14 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 03:31

А в скрипте присутствует команда создания этой таблицы?

#15 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 03:33

угу
DROP TABLE IF EXISTS `core_url_rewrite`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `core_url_rewrite` (
  `url_rewrite_id` int(10) unsigned NOT NULL auto_increment,
  `store_id` smallint(5) unsigned NOT NULL default '0',
  `category_id` int(10) unsigned default NULL,
  `product_id` int(10) unsigned default NULL,
  `id_path` varchar(255) NOT NULL default '',
  `request_path` varchar(255) NOT NULL default '',
  `target_path` varchar(255) NOT NULL default '',
  `is_system` tinyint(1) unsigned default '1',
  `options` varchar(255) NOT NULL default '',
  `description` varchar(255) default NULL,
  PRIMARY KEY  (`url_rewrite_id`),
  UNIQUE KEY `UNQ_REQUEST_PATH` (`request_path`,`store_id`),
  UNIQUE KEY `UNQ_PATH` (`id_path`,`is_system`,`store_id`),
  KEY `FK_CORE_URL_REWRITE_STORE` (`store_id`),
  KEY `IDX_ID_PATH` (`id_path`),
  KEY `IDX_TARGET_PATH` (`target_path`,`store_id`),
  KEY `FK_CORE_URL_REWRITE_PRODUCT` (`product_id`),
  KEY `IDX_CATEGORY_REWRITE` (`category_id`,`is_system`,`product_id`,`store_id`,`id_path`)
) ENGINE=MyISAM AUTO_INCREMENT=4234 DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client; 


#16 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 03:34

1) Нужно не MyISAM, а InnoDB
2) Посредством какого инструмента вы выполняете скрипт?

#17 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 03:36

mysql -hlocalhost -uroot -pPASS magic < мой_скрипт.sql


#18 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 03:37

И что, эта команда молча срабатывает, не выдает никаких ошибок, и в то же время не создаёт таблицу?

#19 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 03:44

Цитата

1) Нужно не MyISAM, а InnoDB

На сервере стоит MyISAM, как ни странно...

Для импорта у меня написан bat-файл и там не видно ошибок, сечас запустил просто в консоли, выдало ошибку:

Цитата

ERROR 1214 (HY000) at line 3316: The used table type doesn't support FULLTEXT indexes


DROP TABLE IF EXISTS `catalogsearch_fulltext`;
SET @saved_cs_client     = @@character_set_client;
SET character_set_client = utf8;
CREATE TABLE `catalogsearch_fulltext` (
  `product_id` int(10) unsigned NOT NULL,  <<<<<< ---------- 3316
  `store_id` smallint(5) unsigned NOT NULL,
  `data_index` longtext NOT NULL,
  PRIMARY KEY  (`product_id`,`store_id`),
  FULLTEXT KEY `data_index` (`data_index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
SET character_set_client = @saved_cs_client;


#20 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 03:49

Верно.
InnoDB не поддерживает FULLTEXT.
Поэтому 2 таблицы Magento должны работать на движке MyISAM:
catalogsearch_fulltext и sendfriend_log

#21 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 04:06

Аллилуйя!!!

Цитата

Category Flat Data index was rebuilt.

Что делал:
Поменял во всех таблицах, где стоял движок MyISAM, в исходном файле дампа на ENGINE=InnoDB
В таблицах catalogsearch_fulltext и sendfriend_log поставил ENGINE=MyISAM
Ипортировал и все заработало!

Возникает другой вопрос, как мне теперь все таблицы на сервере перевести на движок InnoDB? Могу я слить дамп, сделать с ним такие же манипуляции и залить обратно? Будет ли после этого все работать?

И самое главное, почему на сервере все работает на движке MyISAM???

#22 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 04:09

Должно работать. Только проверьте, поддерживает ли сервер InnoDB.

#23 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 04:13

Дмитрий Федюк, спасибо за помощь.
Почему же на сервере все работает на движке MyISAM?

#24 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 04:14

И индексация тоже работает на MyISAM?

#25 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

11.12.2010 04:16

ну да, только что еще раз проверил.

#26 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

11.12.2010 04:19

Magento официально не поддерживает MyISAM.
Т.е. их разработчики изначально пишут код под InnoDB, и под MyISAM не тестируют.
Но InnoDB и MyISAM решают схожие задачи, так что до поры до времени Magento может и работать, просто нет гарантии, что при выполнении какой-либо функции не произойдёт сбой.

#27 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

12.02.2011 01:51

Просмотр сообщенияMr.Devil (11.12.2010 04:06) писал:

Возникает другой вопрос, как мне теперь все таблицы на сервере перевести на движок InnoDB? Могу я слить дамп, сделать с ним такие же манипуляции и залить обратно? Будет ли после этого все работать?

Можно сделать проще. Копируем из базы названия всех таблиц, которые работают на MyISAM, убираем из списка catalogsearch_fulltext и sendfriend_log, и готовим скрипт sql для перевода таблиц на движок InnoDB вида:

SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
ALTER TABLE `adminnotification_inbox` ENGINE = InnoDB;
ALTER TABLE `admin_assert` ENGINE = InnoDB;
ALTER TABLE `admin_role` ENGINE = InnoDB;
ALTER TABLE `admin_rule` ENGINE = InnoDB;
...
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; 

и выполняем его на базе мадженты.

прикрепляю скрипт для Magento 1.4.1.1 (в других версиях Magento названия таблиц могут отличаться или их может быть больше или меньше)

Прикрепленные файлы



#28 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

12.02.2011 02:47

Очень хорошо, когда посетители не только спрашивают, но и пополняют базу знаний форума.

#29 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

12.02.2011 03:26

Приятно, когда на форуме можно найти готовый ответ на свой вопрос :rolleyes:

#30 Владимир Кузьменко
  • Группа: Клиент
  • Сообщений: 119
  • Регистрация: 28.11.2010

13.02.2012 09:27

Сможете помочь в подобной теме. Стоит версия magento 1.6.1.0 . При очередной индексации произошла ошибка:
Cannot initialize the indexer process.
До этого решил в атрибуте цвет кое что поменять, то есть поставить сортировку 1 вместо 0. Сохранил атрибут и мадженто запросила переиндексацию. После чего эта ошибка никак не уходит.
Из вышесказанной переписки пробовал:
"Поменял во всех таблицах, где стоял движок MyISAM, в исходном файле дампа на ENGINE=InnoDB
В таблицах catalogsearch_fulltext и sendfriend_log стоит ENGINE=MyISAM"

И уже читал на иностранных форумах, но так ни к чему хорошему не привело. И базу данных лечил при помощи программы repair от magento. Были провда ошибки, но repair все исправила. Сейчас база нормальная.
Что же все таки посмотреть?

Прикрепленные изображения

  • Прикрепленное изображение: cant initialisate.jpg


#31 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

13.02.2012 09:28

Опубликуйте ваше объявление в разделе Биржа проектов.

#32 Mr.Devil
  • Группа: Пользователь
  • Сообщений: 28
  • Регистрация: 23.10.2010

13.02.2012 21:59

vdmr,
0. А если в атрибуте цвет вернуть все как было, индексация работает?
1. Что в логах мадженты?
2. Трюк с удалением всех файлов в папке var/locks, или с удалением папки locks пробовали?
3. Кэш мадженты чистили?
4. Что еще пробовали?

#33 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8995
  • Регистрация: 20.02.2010

26.08.2012 08:15

Отныне решать проблему «Cannot initialize the indexer process» способна Российская сборка Magento.

Поделиться темой: