Команды для создания и развёртывания бэкапов баз.
Создание бэкапа базы db_name
сразу в архив base_backup.sql.gz
:
mysqldump -u root db_name | gzip > base_backup.sql.gz
То же самое, только отключаем любой сдвиг времени для данных типа TIMESTAMP
, в дампе будут именно те значения времени, которые записаны в базе:
mysqldump -u root --skip-tz-utc db_name | gzip > base_backup.sql.gz
Удаление и создание базы db_name
:
mysql -u root -D db_name -e "DROP DATABASE db_name"
mysql -u root -e "CREATE DATABASE db_name"
Обратный процесс, распаковка и восстановление бэкапа в базу:
zcat base_backup.sql.gz | mysql -u 'root' db_name
Чтобы не вводить каждый раз пароль следует создать файл .my.cnf
в каталоге пользователя:
[mysql]
user = root
password = пароль
[mysqldump]
user = root
password = пароль
У файла должны быть ограниченные права:
chmod 0600 ~/.my.cnf
Docker
При использовании образа MySQL создание бэкапа:
docker exec контейнер_mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" название_базы' > бэкап.sql
docker exec контейнер_mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" название_базы | gzip' > бэкап.sql.gz
docker exec контейнер_mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --skip-tz-utc название_базы | gzip' > бэкап.sql.gz
Удаление и создание базы:
docker exec -i контейнер_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -D название_базы -e "DROP DATABASE название_базы"'
docker exec -i контейнер_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e "CREATE DATABASE название_базы"'
Восстановление бэкапа:
docker exec -i контейнер_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" название_базы' < бэкап.sql
zcat < бэкап.sql.gz | docker exec -i контейнер_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" название_базы'