Содержание
На прошлой неделе у меня был удачи из-за сбоя питания на одном из наших производственных серверов, что привело к повреждению некоторых баз данных InnoDB, хранящихся на сервере MySQL. Как вы, возможно, знаете, большинство повреждений InnoDB связано с аппаратным обеспечением, а поврежденные записи страниц могут быть вызваны сбоями питания или нехваткой памяти.
Хотя были новые резервные копии, я спросил себя, что бы сделал кто-то без резервных копий в случае такого неудачного события. К моему удивлению, многие разработчики утверждают, что восстановить базы данных из InnoDB очень сложно только с папкой данных MySQL, однако я попробовал базовую комбинацию и, к счастью, смог экспортировать практически все базы данных из файлов с дампом MySQL. Сегодня я расскажу вам, как экспортировать файлы .sql из всех файлов idb и frm в папке данных MySQL в Xampp для Windows.
Важная информация
Стоит сказать, что Вы столкнетесь с этой ситуацией и примените это решение только в случае крайней необходимости., где вы были достаточно безответственны, чтобы не делать резервные копии ваших баз данных, или им просто больше месяца. Это означает, что решение не гарантирует 100% целостность ваших баз данных, так как некоторые из них могут оказаться поврежденными, и вы не сможете их сбросить (однако в такой ситуации стоит попробовать).
Требования
Чтобы попытаться восстановить данные старой установки MySQL в новую, вам потребуется:
- Чистая установка XAMPP (с той же или более поздней версией MySQL), которая работает, и вы готовы ее уничтожить.
- Полная копия папки данных mysql с сервера, которую вы пытаетесь восстановить, например
/var/lib/mysql
в Ubuntu с установкой Plesk. Эта копия включает в себя все данные из ваших баз данных, в том числеibdata1
,ib_logfile0
а такжеib_logfile1
файлы. - Много удачи (правда, оно тебе понадобится).
Сказав это, давайте начнем!
1. Сделайте копию содержимого MySQL / данных вашего сервера
Первый шаг, очевидно, имеет копия папки данных MySQL, которую вы хотите восстановить в XAMPP (например, / var / lib / mysql в Linux). Мы предполагаем, что у вас есть все содержимое папки данных mysql, которая не работает на вашем сервере, и мы постараемся восстановить ее.
Эти данные имеют формат папок с именем каждой из ваших баз данных, внутри этих папок вы найдете файлы IDB и FRM, которые теоретически содержат данные ваших баз данных, и вы сможете восстановить их, если они не повреждены. :
Заметка
Также создайте резервную копию исходных данных в папке данных Xampp, на случай, если вы хотите, чтобы все работало, прежде чем начинать работу с этим руководством.
Получив эти данные, перейдите к следующему шагу.
2. Добавить контент в локальную папку mysql / data
Следующим шагом вам нужно создать резервную копию вашей папки mysql / data в xampp на случай, если что-то не получится, поэтому вам нужно будет использовать только старое содержимое mysql / data, и все снова будет нормально. В локальной папке mysql / data XAMPP вам нужно будет удалить весь исходный контент, кроме следующих каталогов (они не могут измениться, поэтому обязательно удалите эти каталоги из данных вашего сервера):
- MySQL (каталог)
- mysql_upgrade_info (файл)
- performance_schema (каталог)
Затем добавьте содержимое с вашего сервера (шаг 1), не заменяя ранее упомянутые файлы и каталоги.
3. Запустите сервер MySQL
После вставки содержимого запустите службу mysql из панели управления:
В случае, если сервер не может запуститься
Если сервер не может запуститься из-за поврежденных таблиц в некоторых ваших базах данных, вы можете принудительно запустить его с помощью восстановления InnoDB. Для этого измените my.cnf
(в Windows my.ini
в C:/xampp7/mysql/bin
) файл MySQL и добавьте 2 новых свойства, а именно innodb_file_per_table
а также innodb_force_recovery
в блоке mysqld:
[mysqld]
# Increment this until the server starts up to a value of 6 if it the
# server can't start after pasting the new /mysql/data content
# See: https://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html
innodb_force_recovery = 2
innodb_file_per_table=1
Это позволит вам запустить MySQL, чтобы сохранить базы данных, которые не повреждены. Сохраните изменения в файле и перезапустите службу mysql, и теперь вы теоретически сможете сбросить базы данных.
4. Дамп базы данных
Используя командную строку, переключитесь на каталог двоичных файлов MySQL при установке Xampp, обычно C:\xampp\mysql\bin
:
cd C:\xampp\mysql\bin
И запустите консоль mysql с правами root или любого другого пользователя, которого вы использовали при установке Xampp:
Заметка
Важно войти в систему как root, чтобы вы могли видеть все базы данных, доступные на движке.
mysql -u root
Это откроет консоль mysql, это означает, что вы можете запускать запросы, в частности тот, который перечисляет все базы данных, доступные на движке (SHOW DATABASES;
):
Наконец, выйдите из процесса mysql в командном процессе и начните с экспорта ваших баз данных с помощью mysqldump
:
mysqldump -u root -p DATABASE_NAME > OUTPUT_DATABASE_BACKUP.sql
Если одна из таблиц вашей базы данных не повреждена, вы сможете экспортировать ее без проблем. Иногда происходит сбой службы mysql, однако перезапуск и повторная попытка будут решением.
Информация
Поскольку вы, возможно, ищете решение для своей проблемы, вы, вероятно, заметили, как трудно найти что-то, что работает, в зависимости от вашего случая, некоторые вещи могут не подойти вам. Вот почему мы также перечислим больше статей, которые могут быть полезны для вас, и дадут вам представление о том, как решить вашу проблему (в случае, если это действительно возможно, в противном случае резервное копирование будет вашим единственным спасением):
- Восстановление поврежденной таблицы InnoDB.
- Как восстановить InnoDB MySQL файлы с помощью MAMP на Mac.
- Как восстановить данные из файлов InnoDB IDB и FRM.
- Восстановить таблицу из файлов frm и idb в InnoDB.
Счастливого выздоровления!