Назад | Перейти на главную страницу

Recover mysql database - mysql/mysqldump gives “table <database>.<tablename> не существует (1146) »</tablename></database>

Предыстория

Ubuntu умер (не загружался), и я не мог это исправить. Я загрузил живой компакт-диск, чтобы восстановить важные данные, и сохранил его на своем 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 и двоичных данных.

Я облажался или есть способ исправить это?

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

Майк Дакр получил ответ, который решил мою проблему. Проблема заключалась в том, что файлы ib_logfile0 и ib_logfile1 (и, возможно, некоторые другие файлы ib * в корневом каталоге mysql /) несовместимы с моей новой установкой mysql. Вы не можете просто добавить файлы db из старого каталога 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. Надеюсь, у вас либо есть хорошая резервная копия где-то еще, либо таблица архива не очень важна.