Как восстановить базу данных MySQL из файлов .myd, .myi, .frm - PullRequest
175 голосов
/ 18 мая 2009

Как восстановить одну из моих баз данных MySQL из .myd, .myi, .frm файлов?

Ответы [ 11 ]

164 голосов
/ 18 мая 2009

Если это таблицы MyISAM, то добавление файлов .FRM, .MYD и .MYI в каталог базы данных (например, /var/lib/mysql/dbname) сделает эту таблицу доступной. Это не обязательно должна быть та же база данных, с которой они пришли, тот же сервер, та же версия MySQL или та же архитектура. Вам также может понадобиться сменить владельца папки (например, chown -R mysql:mysql /var/lib/mysql/dbname)

Обратите внимание, что разрешения (GRANT и т. Д.) Являются частью базы данных mysql. Таким образом, они не будут восстановлены вместе со столами; вам может потребоваться выполнить соответствующие операторы GRANT для создания пользователей, предоставления доступа и т. д. (Восстановление базы данных mysql возможно, но вы должны быть осторожны с версиями MySQL и любыми необходимыми запусками утилиты mysql_upgrade. ) * +1010 *

На самом деле вам, вероятно, просто нужны .FRM (структура таблицы) и .MYD (данные таблицы), но вам придется восстановить таблицу, чтобы перестроить .MYI (индексы).

Единственное ограничение заключается в том, что если вы выполняете понижение рейтинга, вам лучше проверить примечания к выпуску (и, вероятно, запустить таблицу исправлений). Более новые версии MySQL добавляют функции, конечно.

[Хотя это должно быть очевидно, если вы смешиваете и сопоставляете таблицы, целостность отношений между этими таблицами - ваша проблема; MySQL не волнует, но ваше приложение и ваши пользователи могут. Кроме того, этот метод не работает вообще для таблиц InnoDB. Только MyISAM, но учитывая ваши файлы, у вас есть MyISAM]

23 голосов
/ 21 мая 2010

Обратите внимание, что если вы хотите перестроить файл MYI, то правильное использование REPAIR TABLE:

REPAIR TABLE sometable USE_FRM;

В противном случае вы, вероятно, просто получите еще одну ошибку.

22 голосов
/ 27 июня 2012

Я только что нашел решение для этого. Я использую MySQL 5.1 или 5.6 на Windows 7.

  1. Скопируйте файл .frm и ibdata1 из старого файла, который находился в "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data"
  2. Остановить экземпляр сервера SQL в текущем экземпляре SQL
  3. Перейдите в папку данных, расположенную в "C: \ Program Data \ MySQL \ MSQLServer5.1 \ Data"
  4. Вставьте ibdata1 и папку вашей базы данных, которая содержит файл .frm из файла, который вы хотите восстановить.
  5. Запустите экземпляр MySQL.

Нет необходимости искать файлы .MYI и .MYD для этого восстановления.

14 голосов
/ 11 апреля 2010

Стоит отметить:

Файл .FRM содержит структуру вашей таблицы и соответствует вашей версии MySQL.

Файл .MYD НЕ относится к версии, по крайней мере, к второстепенным версиям.

Файл .MYI специфичен, но его можно пропустить и восстановить с помощью REPAIR TABLE, как говорят другие ответы.

Смысл этого ответа в том, чтобы сообщить вам, что если у вас есть дамп схемы ваших таблиц, вы можете использовать его для создания структуры таблицы, затем заменить эти файлы .MYD своими резервными копиями, удалить файлы MYI, и починить их всех. Таким образом, вы можете восстановить резервные копии в другой версии MySQL или полностью переместить базу данных без использования mysqldump. Я нашел это супер полезным при перемещении больших баз данных.

12 голосов
/ 25 мая 2011

Simple! Создать фиктивную базу данных (скажем, abc)

Скопируйте все эти файлы .myd, .myi, .frm в mysql \ data \ abc, где mysql \ data \ - место, где хранятся .myd, .myi, .frm для всех баз данных.

Затем перейдите в phpMyadmin, перейдите в db abc, и вы найдете свою базу данных.

7 голосов
/ 08 ноября 2009

Я думаю, что .myi вы можете восстановить изнутри MySQL.

Если вы видите такие сообщения об ошибках из MySQL: База данных не смогла выполнить запрос (запрос) 1016: Невозможно открыть файл: 'sometable.MYI'. (ошибка: 145) Сообщение об ошибке: 1034: неверный ключевой файл для таблицы: 'sometable'. Попробуй починить тогда у вас, вероятно, разбитая или поврежденная таблица.

Вы можете проверить и восстановить таблицу из командной строки mysql следующим образом:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

и теперь ваш стол должен быть в порядке:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+
5 голосов
/ 18 мая 2009

Вы можете копировать файлы в соответствующий каталог подкаталога папки данных, если это ТОЧНАЯ версия mySQL и вы сохранили все связанные файлы в этом каталоге. Если у вас нет всех файлов, я уверен, что у вас будут проблемы.

4 голосов
/ 28 января 2016

Я нашел решение для преобразования файлов в файл .sql (затем вы можете импортировать файл .sql на сервер и восстановить базу данных), без необходимости доступа к каталогу /var, поэтому вы не делаете для этого нужно быть администратором сервера.

Требуется XAMPP или MAMP, установленный на вашем компьютере.

  • После того, как вы установили XAMPP, перейдите в каталог установки (обычно C:\XAMPP) и в подкаталог mysql\data. Полный путь должен быть C:\XAMPP\mysql\data
  • Внутри вы увидите папки любых других баз данных, которые вы создали. Скопируйте и вставьте туда папку, полную файлов .myd, .myi и .frm. Путь к этой папке должен быть

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Затем посетите localhost/phpmyadmin в браузере. Выберите базу данных, которую вы только что вставили в папку mysql\data, и нажмите «Экспорт» на панели навигации. Выбирает экспорт в виде файла .sql. Затем появится всплывающее окно с вопросом, где сохранить файл

И это все! У вас (должен) теперь есть файл .sql, содержащий базу данных, которая изначально была файлами .myd, .myi и .frm. Затем вы можете импортировать его на другой сервер через phpMyAdmin, создав новую базу данных и нажав «Импорт» на панели навигации, а затем выполнив шаги по ее импорту

2 голосов
/ 27 января 2015

Приведенного выше описания было недостаточно, чтобы заставить меня работать (возможно, плотно или лениво), поэтому я создал этот сценарий, как только нашел ответ, который поможет мне в будущем. Надеюсь, что это помогает другим

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;
2 голосов
/ 21 августа 2010

http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html

В нем говорится, чтобы переименовать файлы ib_ *. Я сделал это, и это вернуло мне БД.

...