.png)
После того, как мне в конце концов удалось обновить мой виртуальный сервер 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 исправит это.