Как бэкапить данные в MySQL

Что такое дамп базы данных и как его создать

Дамп (англ. dump – сбрасывать) – файл, включающий в себя содержимое памяти компьютера или базы данных. В нашем случае это файл с расширением .sql. Он содержит особые данные, благодаря которым можно легко воссоздать копию БД.

Копирование базы данных может быть полезно, когда нужно выполнить:

  • Перенос данных на другой хостинг. Не нужно повторно создавать БД и вносить в нее все данные руками. Достаточно создать дамп и импортировать его в новый проект.
  • Резервное копирование. Отличный способ для экспериментов с веб-сайтом или сервером: вносите корректировки в базу данных и не бойтесь, что произойдет сбой. В случае неисправности всегда можно будет все восстановить из дампа.

Существует несколько способов создания дампов: через консоль или с помощью phpMyAdmin. Ниже рассмотрим создание дампа БД, при помощи консольной утилиты mysqldump.

mysqldump --all --add-drop-table [--all-databases] --force [--no-data]
[-c] --password=password --user=user [база] [таблицы] > backup_file

Пример. Бекап всех БД

mysqldump --all-databases -c --password=password --user=root >> bak`date +%Y%m%d`.sql

Пример. Бекап только одной БД

mysqldump -u root -p database > database.sql
mysqldump -u root -p database > database_`date "+%Y-%m-%d"`.sql

Пример. Бекап некольких БД

mysqldump -u root -p -B database1 database2 database3 > databases.sql
  • -c - формировать в виде полных INSERT
  • –all-databases (или сокращенно -A) - бекап всех баз
  • –databases (или сокращенно -B) для бекапа перечисленных БД
  • –no-data - бэкап только структуры таблиц в базах
    mysqldump --no-data -u root -p database > database_only_scheme.sql
  • [таблицы] - бэкапить только указанные таблицы.)
mysql -u root -p [database] < database_dump.sql

Для прямой вставки из текстового файла можно воспользоваться mysqlimport. Для анализа структуры базы, например, списка таблиц: mysqlshow <база>.

При возникновении ошибки ERROR 1153 (08S01) at line 15872: Got a packet bigger than 'max_allowed_packet' bytes. Нужно в my.cnf увеличить параметры net_buffer_length=1000000 и max_allowed_packet=1000000000
mysql --max_allowed_packet=100M -u root -p [database] < database_dump.sql