В данном разделе показано как сделать дамп базы данных PostgreSQL в консоли при подключении по SSH с помощью утилит pg_dump и pg_dumpall.
В PostgreSQL есть встроенный инструмент для создания резервных копий — утилита pg_dump. Утилита имеет простой синтаксис:
# pg_dump <параметры> <имя базы> > <файл для сохранения копии> |
В простейшем случае достаточно указать имя базы данных, которую в дальнейшем нужно будет восстановить. Резервная копия создается следующей командой:
# pg_dump -U vitrodbuser -W vitrodb > /tmp/vitrodb.dump # pg dump u postgres |
Ключ -U определяет пользователя, а -W обязывает ввести пароль.
Чтобы сэкономить место на диске, можно сразу же сжимать дамп:
# pg_dump -U vitrodbuser -W vitrodb | gzip > /tmp/vitrodb.gz |
Для выполнения резервного копирования по расписанию, например, можно использовать скрипт. Нижеприведённый пример скрипта выполняет бэкап и удаляет все файлы старше 31 дня:
#!/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin #Устанавливает переменную PATH для определения путей поиска исполняемых файлов PGPASSWORD=vitrodbuser_password #Устанавливает переменную PGPASSWORD для установки пароля для доступа к базе данных PostgreSQL export PGPASSWORD #Экспортирует переменную PGPASSWORD, чтобы она была доступна в дочерних процессах pathB=/mnt/backup #Устанавливает переменную pathB для определения пути к каталогу резервных копий dbUser=vitrodbuser #Устанавливает переменную dbUser для определения имени пользователя базы данных database=vitrodb #Устанавливает переменную database для определения имени базы данных find $pathB \( -name "*-[0123]?.*" \) -ctime +31 -delete #Поиск резервных копий, соответствующих заданным критериям и были изменены более 31 дня назад, после чего удаляет их pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date "+%Y-%m-%d").sql.gz #Создает резервную копии БД, сжимает её с помощью gzip и сохраняет в указанном каталоге с именем, содержащим текущую дату unset PGPASSWORD #Сбрасывает переменную PGPASSWORD |
Для настройки работы данного скрипта по расписанию нужно настроить планировщик crontab:
# crontab -e 3 0 * * * /etc/scripts/pgsql_dump.sh # postgres pg dump |
Данная команда добавляет задание в cron, которое запускает скрипт /etc/scripts/pgsql_dump.sh и будет выполняться каждый день в 3:00.
Более подробное описание работы и параметров утилиты pg_dump см по ссылке.
Утилита pg_dumpall реализует резервное копирование всего экземпляра (кластера или инстанса) базы данных без указания конкретной базы данных на инстансе:
# pg_dumpall > /tmp/instance.bak |
Чтобы сразу сжать резервную копию экземпляра базы данных, нужно передать вывод на архиватор gzip:
# pg_dumpall | gzip > /tmp/instance.tar.gz |
Более подробное описание работы и параметров утилиты pg_dump см по ссылке.