Предыстория
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 тоже работает правильно. Все, что осталось, это следовать Восстановление вики из резервной копии руководство.
Можешь попробовать:
/var/db/mysql
или туда, куда их помещает ваша конкретная установка / дистрибутив.mysqlcheck --repair
.myisamchk
.