Как восстановить только данные (слишком сильно все попортилось)

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

Аватар пользователя treusp treusp 8 ноября 2014 в 0:29

Здравствуйте!
После переноса сайта на другой хостинг вылезла проблема. Все показывается, но залогиниться невозможно.
Шаманством типа "удалить все модули" залогиниться удалось, но войти в меню администрирования - нет: "На сайте произошла непредвиденная ошибка. Пожалуйста, повторите попытку позже."
Извращался типа сначала удалил все модули, залогинился (это видно по появлению надписий "Выйти" вместо полей ввода имени/пароля), потом подложил модули обратно. Получилось войти.
Есть куча ошибок типа
DOException: SQLSTATE[HY000]: General error: 1364 Field 'mlid' doesnt have a default value: INSERT INTO {menu_links} (menu_name, plid, link_path, hidden, external, has_children, expanded, weight, module, link_title, options, customized, updated) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10, :db_insert_placeholder_11, :db_insert_placeholder_12); Array ( [:db_insert_placeholder_0] => management [:db_insert_placeholder_1] => 127 [:db_insert_placeholder_2] => admin/structure/taxonomy/%/display [:db_insert_placeholder_3] => -1 [:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => 0 [:db_insert_placeholder_6] => 0 [:db_insert_placeholder_7] => 2 [:db_insert_placeholder_8] => system [:db_insert_placeholder_9] => Manage display [:db_insert_placeholder_10] => a:0:{} [:db_insert_placeholder_11] => 0 [:db_insert_placeholder_12] => 0 ) в функции menu_link_save() (строка 3135 в файле /var/www/vhosts/xxx.ru/httpdocs/includes/menu.inc).
Начал их лечить типа "ALTER TABLE `fw_menu_links` MODIFY COLUMN mlid int(11) NOT NULL DEFAULT 0"
Толку нет, ибо сперва ошибки пропадают, а потом появляются, мол дубликат primary key.

Смотрел на ту же таблицу menu_links на чистой установке - никакой разницы не заметил.

CREATE TABLE IF NOT EXISTS `fw_menu_links` (
  `menu_name` varchar(32) NOT NULL <strong>DEFAULT</strong> '' COMMENT 'The menu name. All links with the same menu name (such as ’navigation’) are part of the same menu.',
`<strong>mlid</strong>` int(10) unsigned NOT NULL COMMENT 'The menu link ID (mlid) is the integer primary key.',

Т.е. для mlid и в чистой таблице не предусмотрен параметр по умолчанию (код обязан его задавать уникальным).

Соответственно идея - сделать совершенно чистую установку, но вместо тупой подмены всей базы восстановить только содержимое таблиц.
Но какие действительно необходимы, а какие не трогать? У меня ведь и типы данных созданы, и поля, и panels со views используются...
Даже если я умудрюсь завести в таком корявом виде копию, может и получится что-то руками по-новой создать (типа у меня /blogs сделано через views с фильтрами и т.п.), но посты и комментарии я точно перебивать не буду Smile

Что посоветуете? Может есть какая "лечилка"?

Комментарии

Аватар пользователя vicccy vicccy 8 ноября 2014 в 2:44

Можно скопировать только пару таблиц в май админе (node и node revision). Если нестандартных полей нет, должно на чистом двиге заработать.

Аватар пользователя treusp treusp 8 ноября 2014 в 21:24

Нестандартные поля есть, типы материалов созданы. Так что в принципе так и делал, копировал потаблично по чуть-чуть.
Почти все восстановил.
А нет ли все-таки какого-то экспорта не тупо на уровне SQL таблиц, а типа как Wordpress умеет в XML экспортироваться вместе с настройками? Так было бы легче разобраться и что-то поправить вручную...

Аватар пользователя Orion76 Orion76 8 ноября 2014 в 23:03

Поле mlid в таблице menu_links - AUTO_INCREMENT..
А у Вас в БД - нет.. И скорее всего еще много таких полей..
Так бывает при некорректном экспорте БД..

Могу дать простенький скриптик(PHP) с несложной документацией - как все поправить.
Если уверены, что справитесь - черкните мне приватное сообщение с мылом.
Вышлю...

UPD.. Если есть возможность снять дамп с оригинала повторно, то просто снимите корректный дамп (c AUTO_INCREMENT)
и импортируйте заново..