Восстановление базы данных MySQL из физических файлов - PullRequest
118 голосов
/ 27 января 2009

Возможно ли восстановить базу данных MySQL из физических файлов базы данных. У меня есть каталог, который имеет следующие типы файлов:

client.frm
client.MYD
client.MYI

, но еще около 20 таблиц.

Обычно я использую mysqldump или аналогичный инструмент, чтобы получить все в 1 файле SQL, так как же обращаться с файлами такого типа?

Ответы [ 8 ]

119 голосов
/ 27 января 2009

MySQL-таблица MySQL представляет собой комбинацию из трех файлов:

  • Файл FRM является определением таблицы.
  • В файле MYD хранятся фактические данные.
  • В файле MYI хранятся индексы, созданные в таблице.

Вы сможете восстановить, скопировав их в папку базы данных (в linux по умолчанию используется /var/lib/mysql/)

Вы должны сделать это, пока сервер не работает.

29 голосов
/ 03 апреля 2017

Из ответа @Vicent я уже восстановил базу данных MySQL, как показано ниже:

Шаг 1. Завершение работы сервера Mysql

Шаг 2. Скопируйте базу данных в папку базы данных (в 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/

7 голосов
/ 27 февраля 2015

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

Я получил только восстановленные папки базы данных mysql с моей ОС Ubuntu. Моя проблема в том, как восстановить мою базу данных с этими нечитаемыми папками данных mysql. Теперь я переключаюсь обратно на ОС win7 для среды разработки.

* Примечание У меня есть существующий сервер баз данных, работающий в win7, и мне нужно всего несколько файлов базы данных, чтобы извлечь из восстановленных файлов. Чтобы успешно восстановить файлы базы данных из ОС Ubuntu, мне нужно обновить установленный сервер базы данных mysql той же версии из ОС Ubuntu в моей ОС win7, чтобы восстановить все на этом старом сервере базы данных.

  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 сервер.

Надеюсь, это поможет, потому что я не нашел решения своей проблемы.

7 голосов
/ 29 июня 2014

Если вы восстанавливаете папку, не забудьте добавить файлы в mysql: mysql

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

, иначе вы получите ошибки при попытке удалить базу данных или добавить новую столбец и т.д ..

и перезапустите MySQL

service mysql restart
2 голосов
/ 01 марта 2012

С MySql 5.1 (Win7). Для воссоздания БД (InnoDbs) я заменил все содержимое следующих директорий (my.ini params):

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

После этого я запустил MySql Service и все работает нормально.

1 голос
/ 27 января 2009

Да, это так! Просто добавьте их в папку базы данных (в зависимости от ОС) и выполните команду, например «Разрешения на исправление MySQL». Это заново сохранило базу данных. Также проследите, чтобы для файлов были установлены правильные права доступа.

0 голосов
/ 08 февраля 2019

В моем случае простого удаления tc.log из / var / lib / mysql было достаточно, чтобы снова запустить mariadb / mysql.

0 голосов
/ 27 января 2009

Однажды я скопировал эти файлы в папку хранилища базы данных для базы данных mysql, которая работала, запустил базу данных и подождал, пока она "восстановит" файлы, затем извлек их с помощью mysqldump.

...