Як відновити базу даних MySQL з файлів .myd, .myi, .frm


183

Як відновити один з моїх баз даних MySQL з .myd, .myi, .frmфайлів?


10
Хоча я відповів на це, він дійсно належить до сервера Default.
дероберт

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 повинен знати, щоб шукати ці файли?
Zenshai

4
Таблиць information_schema насправді не існує, вони є лише переглядами внутрішнього стану бази даних. Дивіться dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brazil

4
Нічого собі, я почувався брудним, але викинувши весь каталог з того, що, на мою думку, було встановлення MySQL4 в мою MySQL5.1, просто магічно відтворив таблиці. Немає перезавантаження чи нічого (у Windows).
Дейв

4
Для роботи вам просто потрібно перегадати для запуску (для кожної таблиці): check table sometable; а потім запустити ремонт (лише за потреби): repair table sometable;
Nux

3
Це спрацювало чудово! Я поставив файли на місце, але mysql не "бачив" їх, поки я не змінив право власності на "mysql: mysql".
sean.boyer

26

Зауважте, що якщо ви хочете відновити файл MYI, то правильне використання REPAIR TABLE:

РЕМОНТ ТАБЛИЦА деякий USE_FRM;

Інакше ви, ймовірно, просто отримаєте ще одну помилку.


24

Я щойно знайшов рішення для цього. Я використовую MySQL 5.1 або 5.6 в Windows 7.

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

Для цього відновлення не потрібно знаходити файли .MYI та .MYD.


Виконайте ці кроки (після того, як все інше не вдалося) та використали innodb_force_recovery = 4рівень (не впевнений, що це було потрібно в цьому випадку). Дякувати Богові!
Джошуа Стюардсон

6
FYI: ibdata1це InnoDB, а не MyISAM.
дероберт

14

Варто зазначити одне:

У файлі .FRM є структура таблиці та є специфічною для вашої версії MySQL.

Файл .MYD НЕ специфічний для версії, принаймні, не другорядних версій.

Файл .MYI є специфічним, але його можна залишити та відновити, REPAIR TABLEяк говорять інші відповіді.

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


14

Просто! Створити фіктивну базу даних (скажімо, abc)

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

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


найкоротша і точна відповідь
Серак Шиферау

Найкращий спосіб відновити дані ... Я встановив WAMP, потім створив нову базу даних, скопіював файли в новий каталог баз даних C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase відкрийте phpmyadmin і вашу нову базу даних, ви дивіться дані
Олександр Джордж

7

Я думаю, що ви можете відремонтувати всередині 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 |
+------------------+-------+----------+----------+

6

Я знайшов рішення для перетворення файлів у .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, створивши нову базу даних та натиснувши на імпорт панелі навігації клавішу "Імпортувати", виконуючи кроки, щоб імпортувати її


5

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


Якщо у мене немає точної версії MySQL, що робити?
Jo Sprague


2

Вищеописаний опис виявився недостатнім для того, щоб працювати на мене (мабуть, щільно або ліниво), тому я створив цей сценарій, як тільки знайшов відповідь, щоб допомогти мені в майбутньому. Сподіваюся, це допомагає іншим

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

Для тих, хто має Windows XP та встановлений сервер MySQL 5.5 - місце для бази даних: C: \ Документи та налаштування \ Усі користувачі \ Дані програми \ MySQL \ MySQL Server 5.5 \ дані, якщо ви не змінили місцеположення в установці MySql Workbench. GUI.


3
Питання стосується відновлення з певних типів файлів, а не там, де ці файли можна знайти в Windows XP MySQL 5.5.
Данпе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.