Как восстановить один из моих баз данных MySQL из .myd
, .myi
, .frm
файлов?
Как восстановить один из моих баз данных MySQL из .myd
, .myi
, .frm
файлов?
Ответы:
Если это таблицы 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]
check table sometable;
и затем запустить ремонт (только при необходимости): repair table sometable;
Я только что нашел решение для этого. Я использую MySQL 5.1 или 5.6 на Windows 7.
Нет необходимости искать файлы .MYI и .MYD для этого восстановления.
innodb_force_recovery = 4
уровень (не уверен, что было необходимо в этом случае). Слава Богу!
ibdata1
это InnoDB, а не MyISAM.
Стоит отметить:
Файл .FRM содержит структуру вашей таблицы и зависит от вашей версии MySQL.
Файл .MYD НЕ относится к версии, по крайней мере, к второстепенным версиям.
Файл .MYI специфичен, но его можно пропустить и восстановить, REPAIR TABLE
как говорят другие ответы.
Цель этого ответа - дать вам знать, что если у вас есть дамп схемы ваших таблиц, вы можете использовать его для создания структуры таблицы, а затем заменить эти файлы .MYD своими резервными копиями, удалить файлы MYI и восстановить их. все. Таким образом, вы можете восстановить ваши резервные копии в другой версии MySQL или полностью переместить базу данных без использования mysqldump
. Я нашел это супер полезным при перемещении больших баз данных.
Просто! Создать фиктивную базу данных (скажем, abc)
Скопируйте все эти файлы .myd, .myi, .frm в mysql \ data \ abc, где mysql \ data \ - это место, где хранятся .myd, .myi, .frm для всех баз данных.
Затем перейдите к phpMyadmin, перейдите в db abc, и вы найдете свою базу данных.
Я думаю, что .myi вы можете восстановить изнутри MySQL.
Если вы видите сообщения об ошибках такого типа из MySQL: База данных не смогла выполнить запрос (запрос) 1016: Невозможно открыть файл: 'sometable.MYI'. (errno: 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 |
+------------------+-------+----------+----------+
Я нашел решение для преобразования файлов в .sql
файл (вы можете затем импортировать .sql
файл на сервер и восстановить базу данных) без необходимости доступа к /var
каталогу, поэтому вам не нужно быть администратором сервера, чтобы сделать это.
Требуется XAMPP или MAMP, установленный на вашем компьютере.
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, создав новую базу данных и нажав «Импорт» на панели навигации, а затем следуя инструкциям по ее импорту.
Вы можете скопировать файлы в соответствующий каталог подкаталога папки данных, если это ТОЧНАЯ версия mySQL и вы сохранили все связанные файлы в этом каталоге. Если у вас нет всех файлов, я уверен, что у вас будут проблемы.
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Там написано переименовать файлы ib_ *. Я сделал это, и это вернуло мне БД.
Приведенного выше описания было недостаточно, чтобы все работало на меня (возможно, плотно или лениво), поэтому я создал этот сценарий, как только нашел ответ, который поможет мне в будущем. Надеюсь, что это помогает другим
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;
Для тех, у кого Windows XP и установлен MySQL сервер 5.5 - расположение базы данных C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, если только вы не изменили расположение в установке MySql Workbench. GUI.