Как восстановить базу MySQL

Обновлено Обновлено: Опубликовано Опубликовано:

Тематические термины: MySQL, MariaDBphpMyAdmin

В данном примере показано восстановление из заранее сделанного dump-файла (с помощью mysqldump). Если нужна инструкция по созданию резервной копии, читайте Как сделать дамп базы MySQL.

Подготовка базы

Подключаемся к командной оболочке mysql:

mysql -uroot -p

* данной командой мы подключимся к СУБД под пользователем root. Опция -p потребует ввода пароля.

Для восстановления базы сначала необходимо ее создать:

> CREATE DATABASE db DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

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

> GRANT ALL PRIVILEGES ON db.* TO dbuser@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;

Подробнее про создание баз читайте на странице Создание и удаление баз в MySQL/MariaDB.

Из файла через командную строку

Команда выполняется из UNIX-shell:

mysql -v -u root -p db < /tmp/dump.sql

* где root — учетная запись, от которой идет подключение к серверу баз данных; db — имя базы, которую необходимо восстановить; /tmp/recovery.sql — файл дампа, из которого восстанавливаем базу.

Если при создании дампа использовалась gzip, сначала распаковываем архив:

gunzip /tmp/dump.sql.gz

С помощью phpMyAdmin

Выбираем базу, которую нужно восстановить. Переходим на вкладку Импорт - кликаем по кнопке Выберите файл:

Восстановление базы при помощи phpMyAdmin

Выбираем файл с резервной копией.

Нажимаем по OK и ждем восстановления данных.

Пропускать ошибки

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

Суть сводится к простому добавлению ключа --force или -f:

mysql -v -u root -p -f db < /tmp/dump.sql

MySQL server has gone away

Во время восстановления базы может выскочить ошибка:

at line xxx: MySQL server has gone away.

Как правило, ее причина в низком значении параметра max_allowed_packet, который отвечает за ограничение выполнения команд из файла. Посмотреть текущее значение можно командой в mysql:

> SHOW VARIABLES LIKE 'max_allowed_packet';

Чтобы увеличить значение параметра, открываем конфигурационный файл my.cnf:

vi /etc/my.cnf

* в некоторых версиях СУБД конфиг может находится по пути /etc/my.cnf.d/server.cnf.

В разделе [mysqld] редактируем или добавляем:

[mysqld]
...
max_allowed_packet = 512M

* значение для данного параметра не обязательно должно быть таким большим.

Перезапускаем mysql:

systemctl restart mariadb || systemctl restart mysql

# Серверы # Базы данных
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет