как: восстановить данные из MySQL (остались только файлы на жестком диске)

как: восстановить данные из MySQL (остались только файлы на жестком диске)

После того, как мне в конце концов удалось обновить мой виртуальный сервер Debian с Etch до Lenny. (Полную историю читайте здесь:Debian: обновление с etch до lenny не удалось)

Теперь я потерял данные (включая все таблицы) из моей базы данных MySQL. Файлы все еще присутствуют на жестком диске, и phpMyAdmin (далее именуемый PMA) все еще показывает мне все имена баз данных, но без таблиц. Базы данных 'mysql' и ''information_schema' все еще имеют свои таблицы. Но при доступе, например, 'mysql.user' я получаю следующую ошибку:

#1017 - Can't find file: './mysql/user.frm' (errno: 13) 

Конечно (как и любой1337 ПЕБКАЦУ меня нет файла дампа MySQL. (использование F-слова несколько раз)

Кто-нибудь знает инструмент, который мог бы восстановить утерянные данные из файловой структуры?

Заранее спасибо за любую помощь, оказанную в решении проблемы уровня 8, то есть меня.

решение1

ЕСЛИ у вас есть файлы, вы сможете просматривать данные (кроме таблиц innodb). Эта ошибка обычно возникает, когда у вас есть проблема с разрешениями — попробуйте изменить файлы /var/lib/mysql на mysql:mysql и посмотрите, исправит ли это проблему.
chown -R mysql:mysql /var/lib/mysql

решение2

Прежде всего: не паникуйте. Скорее всего, не все потеряно, просто нужно разобраться, что произошло.

  • Изменился ли путь к каталогу данных MySQL во время обновления? (Я так не думаю — если мне не изменяет память, и Etch, и Lenny по умолчанию отдают данные из /var/lib/mysql. Но если вы ранее вручную изменили путь, то что-то могло произойти)

  • Если вы перейдете в /var/lib/mysql, вы найдете каталогmysqlи файлпользователь.frmпод ним? Если не можешь, возвращает find / -iname 'user.frm'что-то?

  • Стоит ли отметить под/var/log, особенно под/var/log/mysql?

Если все остальное не помогает, установите еще одну установку Debian на другой компьютер (или виртуальную машину), установите там Debian Etch, скопируйте туда каталог данных MySQL и посмотрите, работает ли это. Затем запустите надлежащийmysqldumpи восстановите его на вашем новеньком Ленни.

РЕДАКТИРОВАТЬ:Ладно, это просто проблема с разрешением. Я все равно оставлю свой ответ здесь, вдруг он кому-то поможет.

решение3

Ну, пара вещей:

Во-первых, сделайте резервную копию файлов, которые у вас есть в данный момент. Некоторые операции могут вносить в них изменения, поэтому вы не хотите оказаться в худшем положении, чем сейчас.

Я предполагаю, что ваш текущий каталог данных содержит mysql/user.frmфайл. Если это так, то проблема в том, что новая версия MySQL ищет свои данные не в том месте. Проверьтедокументация поmy.cnf, в частности, часть о DATADIR. Вы можете изменить datadir по умолчанию, чтобы он указывал на ваш старый набор файлов. После того, как вы это сделаете, вам нужно будет запустить команду mysql_upgradeдля проверки ваших таблиц и обновления любой структуры таблиц. Смотреть документацию.

Если в вашем каталоге данных нет mysql/user.frmфайла, значит что-то пошло не так. Вам нужно вручную завершить установку еще раз (не переустанавливать, а просто выполнить шаги после установки). Для этого запустите программуmysql_install_db. Это должно восстановить пользовательские таблицы. Обратите внимание, что вы потеряете всю информацию аутентификации (поскольку она уже утеряна, так как user.frm не существует).

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

решение4

это индексные файлы, их можно сгенерироватьремонт mysql

Сделайте резервную копию файлов MySQL и в phpmyadmin введите запрос:

REPAIR TABLE tbl_name [, tbl_name] USE_FRM;

Mysql исправит это.

Связанный контент