Відновлення бази даних MySQL з фізичних файлів


139

Чи можливо відновити базу даних MySQL з фізичних файлів баз даних. У мене є каталог, який містить такі типи файлів:

client.frm
client.MYD
client.MYI

але ще близько 20 таблиць.

Зазвичай я використовую mysqldump або подібний інструмент, щоб отримати все в 1 SQL-файл, тож яким чином можна поводитися з цими типами файлів?


У мене ж проблема: кілька файлів із розширеннями FRM, MYD та MYI. У мене також є файли ib_logfile0, ib_logfile1 та ibdata1. Я не можу отримати доступ до запущеного сервера або створити дамп. Я спробував запустити новий MySQL-сервер і використати файли, але я не вдався ... Хтось має чітку інструкцію?
flo5783

Відповіді:


132

Таблиця MySQL MyISAM - це комбінація трьох файлів:

  • Файл FRM - це визначення таблиці.
  • У файлі MYD зберігаються фактичні дані.
  • У файлі MYI зберігаються індекси, створені в таблиці.

Ви маєте змогу відновити, скопіювавши їх у папку бази даних (У linux - місце за замовчуванням /var/lib/mysql/)

Ви повинні це робити, поки сервер не працює.


64
це справедливо лише для таблиць MyISAM. InnoDB зберігає свої таблиці та індекси в єдиному просторі таблиць *, які за замовчуванням складаються з 3-х файлів ibdata1, ib_logfile0 та ib_logfile1. для відновлення бази даних вам також знадобляться ці файли. * можливі табличні простори за столом, але не за замовчуванням
ax.

21
Він каже, що має файли .frm .myi та .myd. Тоді я припустив, що це таблиці MyISAM.
Вінсент

5
Цінна відповідь, але мені довелося піти на крок далі, щоб все нормально працювало: оскільки я повинен був увійти як root, щоб відновити файли, mysqlкористувач, що запускає mysqldпроцес, не міг отримати доступ до них. Робити в chmod -R mysql:mysql .каталозі даних mysql швидко та просто, але до цього з'ясувалось, чому всі мої перезавантажені БД, схоже, не мають таблиць, зайняли трохи більше часу.
Edurne Pascual

10
herenvardo Я думаю, ти мав на увазі chown не chmod
Олівер М Греч

2
Щоб скласти кілька важливих приміток, вам, можливо, доведеться chownскопіювати такі файли, як:sudo chown -R mysql:mysql /var/lib/mysql
Jacksonkr

50

З відповіді @Vicent я вже відновлюю базу даних MySQL, як показано нижче:

Крок 1. Завершення роботи сервера Mysql

Крок 2. Скопіюйте базу даних у папку вашої бази даних (у Linux Linux за замовчуванням розміщено / var / lib / mysql). Зберігайте те саме ім’я бази даних та те саме ім'я бази даних в режимі mysql.

sudo cp -rf   /mnt/ubuntu_426/var/lib/mysql/database1 /var/lib/mysql/

Крок 3: Змінення власної та зміни режиму папки:

sudo chown -R mysql:mysql /var/lib/mysql/database1
sudo chmod -R 660 /var/lib/mysql/database1
sudo chown  mysql:mysql /var/lib/mysql/database1 
sudo chmod 700 /var/lib/mysql/database1

Крок 4: Скопіюйте ibdata1 у папку бази даних

sudo cp /mnt/ubuntu_426/var/lib/mysql/ibdata1 /var/lib/mysql/

sudo chown mysql:mysql /var/lib/mysql/ibdata1

Крок 5: скопіюйте файли ib_logfile0 та ib_logfile1 у папку бази даних.

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile0 /var/lib/mysql/

sudo cp /mnt/ubuntu_426/var/lib/mysql/ib_logfile1 /var/lib/mysql/

Пам'ятайте про зміну власного та змінення кореня цих файлів:

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile0

sudo chown -R mysql:mysql /var/lib/mysql/ib_logfile1

або

sudo chown -R mysql:mysql /var/lib/mysql

Крок 6 (необов’язково): Мій сайт має конфігурацію для зберігання файлів у певному місці, після чого я точно копіюю їх у відповідне місце.

Крок 7: Запустіть сервер Mysql. Все повертаються і насолоджуються цим.

Це все.

Докладнішу інформацію див. На веб-сторінці : https://biolinh.wordpress.com/2017/04/01/restoring-mysql-database-from-physical-files-debianubuntu/


4
+1 для детальної покрокової інструкції. Але я відредагував деякі заяви, щоб справді відобразити, якими вони повинні бути.
Пітер

Отримала помилку №1932, не в змозі отримати доступ до даних. Бази даних з’являються, але дані недоступні. Запуск XAMPP 7.2.12 на MAC OS X Mojave.
Steve1754a

@ Steve1754a помилка може з багатьох причин 1. Чи переміщуєте ви базу даних з Mac OS в Mac OS? 2. Будь ласка, перевірте дозвіл цих файлів / даних / таблиці
biolinh

Відповіді: 1. Так; 2. Я зробив. Мені довелося провести повну перебудову моєї БД. Не вдалося знайти рішення. Мораль до історії: завжди створюйте резервну копію БД. Я хотів би, щоб у XAMPP був простий спосіб зробити це автоматично.
Steve1754a

1
ти врятував мені життя
SpongePablo

8

Якщо ви відновлюєте папку, не забудьте подавити файли на mysql: mysql

chown -R mysql:mysql /var/lib/mysql-data

інакше ви отримаєте помилки при спробі скинути базу даних або додати новий стовпець тощо.

та перезапустіть MySQL

service mysql restart

2
це насправді не відповідь на питання, але було дуже корисно.
ryantuck

насправді вам не слід вгамовувати все на mysql, папка бази даних mysql повинна зберігати кореневу групу
Гальвані

8

У мене така ж проблема, але не вдалося успішно відновити базу даних, виходячи з інструкцій вище.

Мені вдалося відновити папки бази даних mysql з моєї ОС Ubuntu. Моя проблема полягає в тому, як відновити мою базу даних за допомогою цих нечитабельних папок даних mysql. Тому я переключився на win7 OS для середовища розробки.

* ПРИМІТКА У мене є існуючий сервер бази даних, який працює в win7, і мені потрібно лише кілька файлів баз даних, щоб отримати з відновлених файлів. Для успішного відновлення файлів баз даних з ОС Ubuntu мені потрібно щойно встановити сервер баз даних mysql (та ж версія з Ubuntu OS в моїй ОС Windows 7), щоб відновити все на цьому старому сервері баз даних.

  1. Зробіть ще один новий сервер бази даних mysql із відновлених файлів.

  2. Зупинити сервер mysql

  3. скопіюйте відновлену папку і вставте в (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data) база даних mysql.

  4. скопіюйте файл ibdata1, розташований у встановленій папці linux mysql, і вставте його (C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data). Просто замініть наявні або зробіть резервну копію перед заміною.

  5. запустіть сервер mysql і перевірте, чи успішно ви відновили файли бази даних.

  6. Щоб використовувати відновлену базу даних на моєму використовуваному сервері mysql, просто експортуйте відновлену базу даних та імпортуйте її на мій існуючий сервер mysql.

Сподіваюсь, це допоможе, бо більше нічого для мене не працювало.


1
також працює на ubuntu / debian з файлами ibdata1, ib_logfile0 та ib_logfile1 та папкою баз даних. користувач не буде скопійовано, але тоді ви можете додати нового користувача до бази даних та скинути його.
bokorben

2

З MySql 5.1 (Win7). Для відтворення БД (InnoDbs) я замінив увесь вміст наступних dirs (параметри my.ini):

datadir="C:/ProgramData/MySQL/MySQL Server 5.1/Data/"
innodb_data_home_dir="C:/MySQL Datafiles/"

Після цього я запустив MySql Service і все працює чудово.


1

Так! Просто додайте їх у свою папку баз даних (залежно від ОС) і запустіть команду, таку як "Дозволи на виправлення MySQL". Це знову зберегло базу даних. Також переконайтеся, що правильні дозволи встановлені і для файлів.


Я це зробив, але я його не розпізнає у таблицях. Як я вже говорив у коментарі до попередньої відповіді.
орезвані

0

Одного разу я скопіював ці файли в папку зберігання бази даних для роботи з базою даних mysql, запустив db і дочекався його "ремонту" файлів, а потім витяг їх з mysqldump.


-1

У моєму випадку просто видалити tc.log в / var / lib / mysql було достатньо, щоб знову запустити mariadb / mysql.


це не проблема можливості запуску / перезавантаження сервера mysql.
Олуватумбі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.