X

Дамп MySQL базы данных

Несколько полезных приемов, которые позволят вам значительно ускорить работу с резервным копированием и восстановлением баз данных. Конечно дамп MySQL можно делать и с помощью стороннего ПО, того же phpMyAdmin, но встроенными утилитами самого сервера БД это удобнее и быстрее.

Делаем резервную копию (он же дамп, он же бекап)

Все данные одной базы

mysqldump -u USER -pPASSWORD DATABASE > dumpname.sql

USER – логин пользователя, PASSWORD – пароль. Обратите внимание, что между -p и PASSWORD нет пробела.

Все данные нескольких определенных баз

Добавляем параметр --databases или -B

mysqldump -u USER -pPASSWORD --databases DATABASE1 DATABASE2 DATABASE3 ... > dumpname.sql

USER – логин пользователя, PASSWORD – пароль. Обратите внимание, что между -p и PASSWORD нет пробела.

Данные всех баз

Указываем ключ --all-databases или -A.

mysqldump -u USER -pPASSWORD --all-databases > dumpname.sql

USER – логин пользователя, PASSWORD – пароль. Обратите внимание, что между -p и PASSWORD нет пробела.

Дамп только структуры базы данных MySQL

За это это отвечает параметр --no-data или -d.

mysqldump --no-data -u USER -pPASSWORD DATABASE > dumpstruct.sql

Дамп определенных таблиц

mysqldump -u USER -pPASSWORD DATABASE TABLENAME1 TABLENAME2 ..  > dumpstruct.sql

Сразу архивируем дамп MySQL

mysqldump -u USER -pPASSWORD DATABASE | gzip > dumpname.sql.gz

Добавляем дату и время к дампу

mysqldump -u USER -pPASSWORD DATABASE | gzip > `date +dumpname.%Y%m%d_%H%M%S.sql.gz`

Восстанавливаем дамп MySQL

Заливаем все данные

mysql -u USER -pPASSWORD < dumpname.sql

Заливаем данные в конкретную базу

mysql -u USER -pPASSWORD DATABASE < dumpname.sql

Заливаем данные из заархивированного дампа

gunzip < dumpfile.sql.gz | mysql -u USER -pPASSWORD DATABASE

Распространенные ошибки, возникающие при создании дампа MySQL

Error 2013: Lost connection to MySQL server during query ...

Ошибка связана с тем, что не хватает времени для выполнения операции. Для исправления в конфигурационном файле /etc/my.cnf в секции [mysqldump] увеличьте значение параметров wait_timeout=600 и interactive_timeout=600. Значение времени подберите под ваши условия.

Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table ...

Ошибка связана с тем, что объем вносимых данных превышает разрешенный. Решается 2-я способами:

  1. добавить параметр --max_allowed_packet=128M к нашим командам
  2. Добавить параметр max_allowed_packet=128M в секцию [mysqldump] конфигурационного файла /etc/my.cnf

Соответственно, размер данных указываем тот, который нам необходим.

Error 2006: MySQL server has gone away

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

hc: