Как восстановить одну из моих баз данных 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, создав новую базу данных и нажав "Импортировать" на панели навигации, а затем выполнив шаги по ее импорту.
Ответ 9
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
В нем говорится переименовать файлы ib_ *. Я сделал это, и он дал мне обратно db.
Ответ 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.