Восстановление базы MySQL: подробное руководство

Восстановление базы MySQL: подробное руководство

Потеря данных в MySQL — один из самых неприятных сценариев для владельцев сайтов и системных администраторов. Аварийное отключение электричества, сбой оборудования, ошибки в новой версии CMS — всё это может привести к повреждению таблиц и остановке сервиса. Чтобы быстро вернуть проект в продакшен и минимизировать потери, важно уметь правильно восстанавливать базу данных и заранее подготовить надёжную систему резервного копирования.

В этом материале мы расскажем, как действовать при сбое, разберём особенности восстановления таблиц разных форматов и покажем, как настроить автоматический бекап на VPS и хостинге AdminVPS.

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Причины повреждения MySQL

MySQL логотип

MySQL — стабильная СУБД, но и у неё бывают сбои. Вот наиболее частые причины:

  • Аварийное отключение питания — особенно критично при записи в InnoDB.
  • Повреждение железа — сбои на SSD/HDD, перегрев, проблемы с контроллером.
  • Ошибки в обновлениях CMS или модулей — могут затронуть структуру таблиц.
  • Неправильное завершение работы MySQL — принудительное завершение процесса.

Если нет резервной копии

Восстановление базы данных

Отсутствие актуального бекапа означает, что стандартное восстановление из сохранённой копии невозможно. Придётся работать с тем, что осталось на диске. В этой ситуации важно действовать последовательно и максимально аккуратно, чтобы не усугубить повреждения.

Вот что нужно сделать.

Остановите сервер MySQL. Сначала необходимо остановить MySQL, чтобы исключить дальнейшую запись в повреждённые файлы и не потерять больше данных:

systemctl stop mysql

Или:

service mysql stop

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

Скопируйте текущие файлы базы данных. Перед любой попыткой восстановления обязательно создайте резервную копию текущего состояния (даже если база повреждена):

    каталога базы данных (обычно /var/lib/mysql/имя_базы);

    • файлов ibdata1, ib_logfile0, ib_logfile1 (если используется InnoDB);
    • конфигурационного файла my.cnf.

    Скопировать можно командой:

    sudo cp -r /var/lib/mysql/имя_базы /home/username/mysql_backup_повреждено

    Это позволит откатиться, если что-то пойдёт не так в процессе восстановления.

    Определите тип таблиц: MyISAM или InnoDB. В каталоге базы данных найдите файлы таблиц. По расширениям можно понять, какой движок используется:

    • MyISAM: файлы .frm, .MYD, .MYI;
    • InnoDB: файлы .frm, плюс ibdata1, ib_logfile* и, возможно, .ibd.

    Также можно проверить движок таблицы через SHOW TABLE STATUS в другом экземпляре MySQL, если он запускается.

    Оцените степень повреждения. Попробуйте запустить MySQL в обычном режиме и подключиться к базе. Если это невозможно — используйте параметры восстановления (innodb_force_recovery для InnoDB или myisamchk для MyISAM).

    Задачи на этом этапе:

    • понять, какие таблицы доступны;
    • какие — повреждены;
    • какие можно экспортировать (например, через mysqldump или SELECT INTO OUTFILE).

    Итак, MySQL использует два популярных формата таблиц: MyISAM и InnoDB. От формата зависит способ восстановления:

    Восстановление MyISAM

    Для MyISAM-восстановления достаточно встроенных средств:

    1. Зайдите в phpMyAdmin.
    2. Выберите нужную базу → таблицу → вкладка Операции.
    3. Нажмите Восстановить таблицу.

    Если это не помогает — используйте команду myisamchk:

    myisamchk -r /var/lib/mysql/имя_базы/имя_таблицы.MYI

    Восстановление InnoDB с помощью innodb_force_recovery

    Сложнее обстоит дело с InnoDB: формат более надёжный, но и восстановление сложнее. Поможет параметр innodb_force_recovery.

    Если стандартный запуск MySQL невозможен, действуйте по следующему алгоритму:

    Откройте файл конфигурации MySQL. Обычно это /etc/my.cnf или /etc/mysql/my.cnf (для Linux).

    Добавьте параметр в секцию [mysqld]:

    innodb_force_recovery = 1

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

    systemctl restart mysql

    Проверьте доступ к данным. Если база открылась — создайте дамп (mysqldump) и сохраните его.

    Если нет — увеличьте значение до 2, 3 и так далее, вплоть до 6:

    • 1 — минимальный уровень восстановления;
    • 2 — блокировка фоновых задач;
    • 3 — отключение отката транзакций;
    • 4–6 — использовать осторожно: может привести к потере данных.

    Не используйте innodb_force_recovery > 3, если не уверены в последствиях. Это инструмент для экспертов с опытом администрирования.

    После восстановления удалите параметр и перезапустите MySQL.

    Обязательные файлы для восстановления InnoDB

    Для успешного восстановления нужны:

    • .ibd и ibdata1 — файлы данных InnoDB;
    • *.frm — структура таблиц;
    • ib_logfile0 и ib_logfile1 — журналы транзакций;
    • Файл конфигурации my.cnf.

    Если хотя бы один из них повреждён или отсутствует — восстановление будет сильно осложнено.

    Настройка резервного копирования

    Регулярный бекап — это единственный надёжный способ защитить данные от потерь при сбоях, ошибках пользователей, обновлениях CMS и аппаратных неисправностях. Даже минимальная автоматизация резервного копирования способна сэкономить часы восстановления и сохранить критически важную информацию.

    Вот как организовать систему бекапов на сервере.

    Определите, что нужно сохранять. Перед настройкой важно понять, какие именно данные нужно включать в бекап:

    • базы данных MySQL (в формате дампа .sql);
    • файлы сайта (например, содержимое /var/www/html);
    • конфигурационные файлы (например, /etc/nginx/, /etc/mysql/my.cnf);
    • пользовательские загрузки, если они хранятся вне CMS.

    Выберите способ создания бекапа. Есть два основных способа:

    • mysqldump — логическая копия базы данных. Подходит для небольших и средних по объёму баз. Генерирует .sql файл с инструкциями на восстановление:
    mysqldump -u root -p'ваш_пароль' имя_базы > /home/backup/db_$(date +%F).sql
    • rsync или tar — копия файловой системы. Используется для бекапа файлов сайта, базы данных в бинарном виде или всех данных разом:
    rsync -avz /var/www/html /home/backup/site_$(date +%F)

    Или архивирование:

    tar -czf /home/backup/full_backup_$(date +%F).tar.gz /var/www /etc /var/lib/mysql

    Настройте автоматизацию через cron. Для автоматизации бекапа откройте crontab через crontab -e от пользователя root или создайте планировщик через systemd timer. Пример строки для ежедневного бекапа:

    0 2 * * * /usr/bin/mysqldump -u root -p'пароль' имя_базы > /home/backup/db_$(date +\%F).sql

    Для комплексного архивного бекапа:

    30 2 * * * /usr/bin/tar -czf /home/backup/full_$(date +\%F).tar.gz /var/www /etc /var/lib/mysql

    Важно: используйте cron от root или создайте пользователя с правами доступа к нужным каталогам.

    Храните бекапы на другом носителе. Хранить резервные копии на том же VPS или сервере, где находится сайт — небезопасно.

    Рекомендуется:

    • копировать бекапы на удалённый FTP/SFTP-сервер;
    • использовать облачные хранилища;
    • настроить синхронизацию через rclone или scp.

    Пример копирования на удалённый сервер:

    scp /home/backup/db_*.sql user@remote-server:/backups/

    Бекап у AdminVPS

    Условия резервного копирования зависят от типа хостинга.

    Виртуальный хостинг AdminVPS:

    • Резервное копирование — ежедневно;
    • Включено по умолчанию, без доплат;
    • Восстановление выполняется по запросу в поддержку.

    VPS от AdminVPS:

    • Автоматический бекап — раз в неделю;
    • Предоставляется отдельное место под резервные копии;
    • Техническая поддержка бесплатно помогает настроить rsync, mysqldump, cron и другие инструменты.

    Рекомендуем дополнительно настраивать автоматическое резервное копирование с периодичностью не реже одного раза в сутки и хранить копии в стороннем месте (например, на внешнем FTP или облаке).

    Заключение

    Сбой MySQL может привести к остановке сервиса, но при наличии бекапа восстановление займёт считанные минуты. Используйте это руководство, чтобы быстро вернуть систему в рабочее состояние и минимизировать потери. А чтобы не оказаться в такой ситуации снова — настройте автоматическое резервное копирование и регулярно проверяйте его работоспособность.

    В компании AdminVPS ежедневное резервное копирование данных осуществляется на услугах виртуального хостинга. В то же время на VPS серверах резервное копирование осуществляется автоматически только раз в неделю, но администрация предоставляет бесплатное место под бекап, а также наша техническая поддержка поможет настроить создание резервных копий так, как это необходимо клиенту.

    Клиенты AdminVPS могут рассчитывать на помощь в этом вопросе — наши специалисты настроят надёжную систему бекапов под ваши задачи.

    Читайте в блоге:

    Loading spinner
    0 Комментарий
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии

    VPN на VPS-сервере

    Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

    Что будем искать? Например,VPS-сервер

    Мы в социальных сетях