Postgres database dump and restore
В этой короткой инструкции описывается как сделать бэкап базы данных PostgreSQL и восстановить его (на другом сервере);
Предполагается что PostgreSQL развёрнута в docker контейнере.
Dump
! Осторожно, если для докер-контейнера с БД не настроен volume который сохраняет состояние базы данных при перезапуске контейнера, то есть шанс потерять всё. (Но надюсь он настроен, потому что иначе жить нельзя).
Для начала добавьте в docker-compose.yml
в раздел volumes новый volume чтобы было удобно забрать с сервера дамп базы данных.
volumes:
- ./dumps/:/dumps/
Преезапустите контейнер:
docker compose down
docker compose up -d
Войдите внутрь контейнера с помощью команды (Выйти из контейнера: ctrl+d
):
docker exec -it postgres_db bash
Сделайте дамп вашей базы данных
pg_dump database_name > dumps/db.sql
Перенос
Старый сервер. Файл будет создан в примонтированной директории dumps
. Перенос файла дампа на новый сервер можно выполнить любым удобным способом, scp или winSCP (GUI для scp).
Новый сервер. Проделайте те же действия с docker-compose.yml
для создания volume и перезапустите контейнер. В директории рядом с docker-compose.yml
должна создастся папка dumps
. Перенесите файл дампа туда.
Restore
Войдите внутрь контейнера с помощью команды (Выйти из контейнера: ctrl+d
):
docker exec -it postgres_db bash
Тут существует два варианта.
- Вариант 1. Если база данных чистая, то выполните команду:
psql -d database_name < dumps/db.sql
- Вариант 2. Если база данных не чистая или вы сделали что-то не так и psql не даёт восстановить из дампа. Самый простой способ дропнуть базу и создать её заного.
После чего загрузите базу данных из дампа:psql -c "DROP DATABASE database_name;" psql -c "CREATE DATABASE database_name;"
psql -d database_name < dumps/db.sql
Поздравляю, вы великолепны!
No Comments