После того, как мне удалось обновить мой виртуальный сервер 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 PEBKAC есть) У меня нет файла дампа mySQL. (используя F-слово несколько раз)
Кто-нибудь знает инструмент, который может восстановить потерянные данные из файловой структуры?
Заранее благодарим за любую помощь, предоставленную для решения этой проблемы уровня 8, также известной как я.
Перво-наперво: не паникуйте. Скорее всего еще не все потеряно, нужно просто разобраться, что произошло.
Изменился ли путь к каталогу данных MySQL во время обновления? (Я так не думаю - если мне не изменяет память, и Etch, и Lenny по умолчанию обслуживают файлы из / var / lib / mysql. Но если вы ранее изменили путь вручную, то что-то могло случиться)
Если вы cd в свой / var / lib / mysql, сможете ли вы найти каталог mysql и файл user.frm под ним? Если не можешь, неужели find / -iname 'user.frm'
что-то вернуть?
Стоит отметить под / var / журнал, особенно под / вар / журнал / mysql?
Если ничего не помогает, установите еще одну установку Debian на другой компьютер (или виртуальную машину), установите там Debian Etch, скопируйте туда каталог данных MySQL и посмотрите, работает ли это. Затем запустите правильный mysqldump и восстановите это вашему новому Ленни.
РЕДАКТИРОВАТЬ: Хорошо, это просто проблема с разрешением. Я все равно оставлю здесь свой ответ на случай, если он поможет кому-то другому.
ЕСЛИ у вас есть файлы, вы сможете просматривать данные (кроме таблиц innodb). Эта ошибка обычно возникает, когда у вас есть проблема с разрешениями - попробуйте изменить файлы / var / lib / mysql на mysql: mysql и посмотрите, исправит ли он это.
chown -R mysql:mysql /var/lib/mysql
это индексные файлы, они могут быть сгенерированы ремонт mysql
Сделайте резервную копию файлов mysql и введите запрос в phpmyadmin:
REPAIR TABLE tbl_name [, tbl_name] USE_FRM;
Mysql исправит это.
Ну и пара вещей:
Во-первых, сделайте резервную копию файлов, которые у вас есть. Некоторые операции могут изменять их, поэтому вы не хотите, чтобы вам было хуже, чем сейчас.
Я предполагаю, что в вашем текущем каталоге данных есть mysql/user.frm
файл. Если это так, проблема в том, что новая версия MySQL ищет свои данные не в том месте. Проверьте документация по my.cnf
, в частности, часть о DATADIR
. Вы можете изменить каталог данных по умолчанию, чтобы он указывал на ваш старый набор файлов. Как только вы это сделаете, вы захотите запустить команду mysql_upgrade
чтобы проверить свои таблицы и обновить любую структуру таблиц. См. Документацию.
Если нет mysql/user.frm
файл в каталоге данных, то что-то пошло не так. Вам нужно будет снова вручную завершить установку (не переустанавливая, а только шаги после установки). Для этого запустите программу mysql_install_db
. Это должно восстановить пользовательские таблицы. Обратите внимание, что вы потеряете всю информацию для аутентификации (поскольку она уже ушла, поскольку user.frm не существует).
Я пока оставлю все как есть, учитывая, что пока вы не выберете один из этих маршрутов, я ничем не могу больше помочь. Дайте мне знать, что вы выберете, и я постараюсь продолжать помогать, насколько могу.