Восстановить базу данных mysql - mysql/mysqldump выдает "таблица <база данных>.<Имя таблицы> не существует (1146)"

Предыстория

Ubuntu умерла (не загружалась), и я не мог это исправить. Я загрузил live cd, чтобы восстановить важные вещи, и сохранил их на своем NAS. Одна из вещей, которые я скопировал, была /var/lib/mysql.

Переустановленный с Linux Mint, потому что я был на Ubuntu 10.0.4, это была хорошая возможность попробовать новый дистрибутив (и мне не нравится Unity). Теперь я хочу восстановить мой старый MediaWiki, поэтому я закрыл демон MySQL, cp -R /media/NAS/Backup/mysql/mediawiki@002d1_19_1 /var/lib/mysql/, правильно установите права доступа к файлам и запустите mysql.

проблема

Теперь я пытаюсь экспортировать базу данных, чтобы я мог восстановить базу данных, но когда я выполняю mysqldump, я получаю сообщение об ошибке:

$ mysqldump -u mediawikiuser -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz
Enter password:
mysqldump: Got error: 1146: Table 'mediawiki-1_19_1.archive' doesn't exist when using LOCK TABLES

Вещи, которые я пробовал

Я пытался с помощью --skip-lock-tables но я получаю это:

Error: Couldn't read status information for table archive ()
mysqldump: Couldn't execute 'show create table `archive`': Table 'mediawiki-1_19_1.archive' doesn't exist (1146)

Я попытался войти в MySQL, и я могу перечислить таблицы, которые должны быть там, но пытаюсь describe или же select из них ошибки выводятся так же, как и дамп:

mysql> show tables;
+----------------------------+
| Tables_in_mediawiki-1_19_1 |
+----------------------------+
| archive                    |
| category                   |
| categorylinks              |

...

| user_properties            |
| valid_tag                  |
| watchlist                  |
+----------------------------+
49 rows in set (0.00 sec)

mysql> describe archive;
ERROR 1146 (42S02): Table 'mediawiki-1_19_1.archive' doesn't exist

Я считаю, что MediaWiki был установлен с использованием innodb и двоичных данных.

Я ввернут или есть способ это восстановить?

2 ответа

Решение

Нашел кого-то, задавшего похожий вопрос: MySQL> Таблица не существует. Но это так (или должно).

У Майка Дакра был ответ, который решил мою проблему. Проблема заключалась в том, что ib_logfile0 и ib_logfile1 (и, возможно, некоторые из других файлов ib * в каталоге mysql / root) были несовместимы с моей новой установкой mysql. Вы не можете просто поместить файлы базы данных из старого каталога mysql / и ожидать, что он будет работать.

Для восстановления базы данных я сделал резервную копию моей текущей / var / lib / mysql / на новой установке:

$ sudo service mysql stop # Stop mysql. Command could be different on different distros
$ sudo mv /var/lib/mysql ~/mysql.bku

Затем скопируйте каталог аварийного резервного копирования в / var / lib

$ sudo cp -R /media/NAS/Backup/mysql /var/lib/

Затем установите разрешения соответствующим образом (обратитесь к ~ / mysql.bku / для справки, если это необходимо). Для этого могут быть более эффективные команды, но я включаю то, что знаю, для полноты на тот случай, если это понадобится кому-то с меньшим опытом.

$ sudo chown -R mysql:mysql /var/lib/mysql
$ sudo find /var/lib/mysql/ -type d -exec chmod 700 {} \;
$ sudo find /var/lib/mysql/ -type f -exec chmod 660 {} \;
$ sudo chmod 644 /var/lib/mysql/debian-5.1.flag # Not sure what this is but the permissions were a bit different so include it just in case

И начать MySQL снова

$ sudo service mysql start # Again command might be different on different distros

Затем я сделал резервную копию нужных мне баз данных:

$ mysqldump -u root -p mediawiki-1_19_1 -c | gzip -9 > wiki.2012-11-15.sql.gz

Когда я закончил, я положил обратно каталог mysql /, а затем импортировал базы данных из файлов дампа.

$ sudo service mysql stop
$ sudo mv /var/lib/mysql ~/mysql-discard # Too nervous to start typing "sudo rm -r /" for /var/lib/mysql, so move it away instead
$ sudo mv ~/mysql.bku /var/lib/mysql
$ sudo service mysql start

Проблема решена, у меня теперь правильный экспорт базы данных, и mysql тоже работает правильно. Все, что осталось, это следовать Восстановлению вики из руководства по резервному копированию.

Ты можешь попробовать:

  1. Убедиться, что файлы данных для таблицы действительно существуют в /var/db/mysql или куда вы их помещаете.
  2. Просматривайте журнал ошибок mysql, обычно в вышеуказанном каталоге.
  3. использование mysqlcheck --repair,
  4. Переведите mySQL в автономный режим и запустите myisamchk,
  5. Надеюсь, у вас либо есть хорошая резервная копия где-то еще, либо таблица архивов не была супер важной.
Другие вопросы по тегам