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

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

Ответ 1

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

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

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

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

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

Ответ 2

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

REPAIR TABLE sometable USE_FRM;

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

Ответ 3

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

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

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

Ответ 4

Одно замечание:

В файле .FRM есть своя структура таблицы и специфична для вашей версии MySQL.

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

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

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

Ответ 5

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

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

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

Ответ 6

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

Если вы видите эти сообщения об ошибках MySQL: База данных не удалось выполнить запрос (запрос) 1016: Не удается открыть файл: "sometable.MYI". (errno: 145) Ошибка Msg: 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 |
+------------------+-------+----------+----------+

Ответ 7

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

Ответ 8

Я нашел решение для преобразования файлов в файл .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, создав новую базу данных и нажав "Импортировать" на панели навигации, а затем выполнив шаги по ее импорту.

Ответ 10

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

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;

Ответ 11

Для тех, у кого есть Windows XP и установлен сервер MySQL 5.5, местоположение базы данных - это C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.5\data, если вы не изменили местоположение в пределах Графический интерфейс установки MySql Workbench.