Неудачная ручная чистка баз данных

Главные вкладки

Аватар пользователя TV-Child TV-Child 23 июля 2013 в 23:08

Недавно решил почистить MySQL. В phpMyAdmin нажал "очистить" на нескольких таблицах, начинающихся на "cache". Заодно поставил модуль db_maintenance и в нём выбрал несколько таблиц для оптимизации. В итоге на главной страницы вместо контента выдаётся следующее: "warning: Invalid argument supplied for foreach() in /home/***/public_html/***/modules/cck/content.module on line 1284." Однако, вновь созданный материал прекрасно себе отображается. Помогите пожалуйста исправить ошибку.
З.Ы.
Знаю, что сильно затупил, так безрассудно поступая с базами данных, но всё же смею надеяться на помощь форумчан в решении вопроса =/.

Комментарии

Аватар пользователя TV-Child TV-Child 24 июля 2013 в 22:19

Запускал крон, но не помогло. Удалил все не одобренные комменты (тонны спама). Ничего не изменилось.
В таблице content_type_story есть куча строк, в графе "field_orig_value" которых написано "edit-field-orig-0-value". Причем таких срок около ста тысяч. Не знаю, может, когда запускал db_maintenance, побились данные в этих ячейках...
Еще решил проверить чем отличается опубликовавшийся материал (который без глюков публикуется после "чистки") и старый материал, который был опубликован до "чистки" и который не отображается.
Для этого я поискал поиском по всей базе данных часть материала. Получилось следующее:

Найденые соответсвия для части текста сообщения, которое было опубликовано после "чистки" (фраза "ОЯЕ*УНДЕСТАГ"):

1 соответствие в таблице cache_content Обзор Удалить
1 соответствие в таблице cache_filter Обзор Удалить
1 соответствие в таблице content_type_story Обзор Удалить
1 соответствие в таблице node Обзор Удалить
1 соответствие в таблице node_revisions Обзор Удалить
1 соответствие в таблице watchdog Обзор Удалить

Найденые соответсвия для для длинной части текста сообщения, которое не отображается:
2 соответствия в таблице cache_content Обзор Удалить
3 соответствия в таблице cache_filter Обзор Удалить
4 соответствия в таблице comments Обзор Удалить
22 соответствия в таблице content_type_story Обзор Удалить
4 соответствия в таблице locales_target Обзор Удалить
3 соответствия в таблице node Обзор Удалить
20 соответствий в таблице search_dataset Обзор Удалить
26 соответствий в таблице search_index Обзор Удалить
13 соответствий в таблице search_total Обзор Удалить
1 соответствие в таблице term_data Обзор Удалить

Как видно, разница ощутимая. Может эта информация поможет решить проблему?

Аватар пользователя TV-Child TV-Child 25 июля 2013 в 22:22

q2_faith wrote:
восстанавливайте из бэкапа.
а вообще гуглить пробовали? https://drupal.org/node/716878[/quote]
Спасибо за отклик!

Эх, пробовал. Там пишут, что на 1284 строчке нужно удалить
"else {"
вместе с
"else if (count($type['fields'])>0) {"

Но в файле .../modules/cck/content.module на 1284 строчке у меня находится "foreach ($type['fields'] as $field) {". Часть кода "else {" находится строчкой выше, а "else if (count($type['fields'])>0) {" вообще не встречается в коде.
Вот код, с 183ей строки:

else {
foreach ($type['fields'] as $field) {
$items = isset($node->$field['field_name']) ? $node->$field['field_name'] : array();
$result = content_field($op, $node, $field, $items, $teaser, $page);
if (is_array($result)) {
$return = array_merge($return, $result);
}
else if (isset($result)) {
$return[] = $result;
}
if (isset($node->$field['field_name'])) {
$node->$field['field_name'] = $items;
}
}
}

Хотя, может, я чего не понял... Делаю, как сказано вот здесь https://drupal.org/files/issues/cck-invalid_arg_foreach-716878-5.patch. Ошибки исчезли. Старый контент не появился. Остался только лишь новый пост и подпись внизу блока материала "нет данных".
=(.

Бэкап - самый край. Файл очень большой и пока нет возможности его залить.

Аватар пользователя sanita sanita 25 июля 2013 в 22:35

Я бытак сделала:

Отключите из базы модуль CCK и посмотрите, вернулся ли и в каком виде старый контент (хотя это и в базе можно посмотреть). Если контента нет никакого - придется возвращать бекап. Если контент есть, то надо дальше копать в ССК.

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 25 июля 2013 в 23:29

"sanita" wrote:
Отключите из базы модуль CCK и посмотрите, вернулся ли и в каком виде старый контент (хотя это и в базе можно посмотреть). Если контента нет никакого - придется возвращать бекап. Если контент есть, то надо дальше копать в ССК.

У вас вечер советов не в тему?

Что-то кажется мне, что автор зацепил чисткой field_instance или вторую таблицу, запамятовал.
В таком случае разворачивать бекап полностью не требуется.

Аватар пользователя sanita sanita 26 июля 2013 в 0:19

RxB wrote:
У вас вечер советов не в тему?

Что-то кажется мне, что автор зацепил чисткой field_instance или вторую таблицу, запамятовал.
В таком случае разворачивать бекап полностью не требуется.

Автор мог зацепить все, что угодно, поэтому я и написала, что я бы сначала проверила проблема только в field's или еще и в другом есть. И да, я бы залила полный бекап, имея в виду, что в базе уже всячески ковырялись.

А у вас, RxB, вечер "мочи всех, кто под руку попался?"

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 26 июля 2013 в 0:25

"sanita" wrote:
Автор мог зацепить все, что угодно, поэтому я и написала, что я бы сначала проверила проблема только в field's или еще и в другом есть. И да, я бы залила полный бекап, имея в виду, что в базе уже всячески ковырялись.

Начнём с того, что ваш совет про отключение CCK никоим боком автору не поможет.
Единственное ценное в вашем комменте - совет восстановить бекап, но это автор и так знает.
Что было зацеплено при чистке, довольно быстро локализуется по тексту ошибки.

Аватар пользователя FORTIS FORTIS 27 июля 2013 в 21:22

дак поставьте бекап в другую базу и визуально пробегитесь по таблицам, может вы таблицу опустошили которая к полям относится, тогда 0 размер вы сразу заметите и просто перебросите содержимое таблицы из бекапа