Несколько полезных приемов, которые позволят вам значительно ускорить работу с резервным копированием и восстановлением баз данных. Конечно дамп 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-я способами:
- добавить параметр
--max_allowed_packet=128M
к нашим командам - Добавить параметр
max_allowed_packet=128M
в секцию [mysqldump] конфигурационного файла /etc/my.cnf
Соответственно, размер данных указываем тот, который нам необходим.
Error 2006: MySQL server has gone away
Данная ошибка может быть связана, как с недостаточным значение параметра wait_timeout
, так и с маленьким размером max_allowed_packet
. Решения собственно уже приведены.