Хотя я ответил на это, это действительно относится к Serverfault.
Дероберт
31
@chandrajeet вы действительно должны принять наиболее проголосовавший ответ.
Башня
2
Эй, Чандраджит, почему ты не принимаешь ответ Дероберта? Я подтверждаю, что это работает и для меня. Разве это не для вас? stackoverflow.com/help/someone-answers
Таз
Ответы:
173
Если это таблицы 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]
Будет ли это действительно работать без добавления соответствующих записей в таблицу information_schema? Я имею в виду, MySQL нужно знать, чтобы искать эти файлы правильно?
Ух ты, я чувствовал себя грязно, но удаление всего каталога из того, что я считаю установкой MySQL4 в мой MySQL5.1, просто волшебным образом воссоздало таблицы. Нет перезагрузки или что-нибудь (на окнах).
Дейв
4
Это работает, вам просто нужно запомнить, чтобы запустить (для каждой таблицы): check table sometable; и затем запустить ремонт (только при необходимости): repair table sometable;
Nux
3
Это сработало отлично! Я поместил файлы на место, но mysql не «видел» их, пока я не сменил владельца на «mysql: mysql».
sean.boyer
26
Обратите внимание, что если вы хотите перестроить файл MYI, тогда правильное использование REPAIR TABLE:
REPAIR TABLE sometable USE_FRM;
В противном случае вы, вероятно, просто получите еще одну ошибку.
Выполнили эти шаги (после того, как все остальное не удалось) и использовали innodb_force_recovery = 4уровень (не уверен, что было необходимо в этом случае). Слава Богу!
Джошуа Стюардсон
6
К вашему сведению: ibdata1это InnoDB, а не MyISAM.
Дероберт
14
Стоит отметить:
Файл .FRM содержит структуру вашей таблицы и зависит от вашей версии MySQL.
Файл .MYD НЕ относится к версии, по крайней мере, к второстепенным версиям.
Файл .MYI специфичен, но его можно пропустить и восстановить, REPAIR TABLEкак говорят другие ответы.
Цель этого ответа - дать вам знать, что если у вас есть дамп схемы ваших таблиц, вы можете использовать его для создания структуры таблицы, а затем заменить эти файлы .MYD своими резервными копиями, удалить файлы MYI и восстановить их. все. Таким образом, вы можете восстановить ваши резервные копии в другой версии MySQL или полностью переместить базу данных без использования mysqldump. Я нашел это супер полезным при перемещении больших баз данных.
Лучший способ восстановить данные ... Я установил WAMP, затем создал новую базу данных, скопировал файлы в новый каталог базы данных C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase, откройте phpmyadmin и вашу новую базу данных. посмотреть данные
Александр Жорж
7
Я думаю, что .myi вы можете восстановить изнутри MySQL.
Если вы видите сообщения об ошибках такого типа из MySQL: База данных не смогла выполнить запрос (запрос) 1016: Невозможно открыть файл: 'sometable.MYI'. (errno: 145) Сообщение об ошибке: 1034: неверный ключевой файл для таблицы: 'sometable'. Попробуйте починить его, тогда у вас, вероятно, разбитый или поврежденный стол.
Вы можете проверить и восстановить таблицу из командной строки mysql следующим образом:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis marked as crashed || yourdb.sometable |check| status | OK |+------------------+-------+----------+----------------------------+
repair table sometable;+------------------+--------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+--------+----------+----------+ | yourdb.sometable | repair | status | OK |+------------------+--------+----------+----------+
и теперь ваш стол должен быть в порядке:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
Я нашел решение для преобразования файлов в .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, создав новую базу данных и нажав «Импорт» на панели навигации, а затем следуя инструкциям по ее импорту.
Вы можете скопировать файлы в соответствующий каталог подкаталога папки данных, если это ТОЧНАЯ версия mySQL и вы сохранили все связанные файлы в этом каталоге. Если у вас нет всех файлов, я уверен, что у вас будут проблемы.
Приведенного выше описания было недостаточно, чтобы все работало на меня (возможно, плотно или лениво), поэтому я создал этот сценарий, как только нашел ответ, который поможет мне в будущем. Надеюсь, что это помогает другим
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.
Ответы:
Если это таблицы 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;
Обратите внимание, что если вы хотите перестроить файл MYI, тогда правильное использование REPAIR TABLE:
REPAIR TABLE sometable USE_FRM;
В противном случае вы, вероятно, просто получите еще одну ошибку.
источник
Я только что нашел решение для этого. Я использую 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 следующим образом:
и теперь ваш стол должен быть в порядке:
источник
Я нашел решение для преобразования файлов в
.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_ *. Я сделал это, и это вернуло мне БД.
источник
Приведенного выше описания было недостаточно, чтобы все работало на меня (возможно, плотно или лениво), поэтому я создал этот сценарий, как только нашел ответ, который поможет мне в будущем. Надеюсь, что это помогает другим
источник
Для тех, у кого Windows XP и установлен MySQL сервер 5.5 - расположение базы данных C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, если только вы не изменили расположение в установке MySql Workbench. GUI.
источник