Восстановление базы данных PostgreSQL
Восстановление базы данных PostgreSQL состоит из следующих этапов:
Проверка соединения утилиты wal-g
Чтобы проверить соединение:
-
Установите переменные подключения к S3-совместимому хранилищу, если они не были заданы на этапе настройки Backup Wrapper. Для этого выполните команды:
export WALG_S3_PREFIX="<walg_s3_prefix>" export AWS_ACCESS_KEY_ID="<aws_access_key>" export AWS_SECRET_ACCESS_KEY="<aws_secret_key>" export AWS_ENDPOINT="<aws_endpoint>" export AWS_S3_FORCE_PATH_STYLE=true export AWS_REGION="<aws_region>"Здесь:
-
<walg_s3_prefix>— путь к хранилищу, в котором будут храниться резервные копии, например,s3://backups/postgresql/wal. -
<aws_access_key>— идентификатор ключа доступа к S3-совместимому хранилищу. -
<aws_secret_key>— секретный ключ доступа к S3-совместимому хранилищу. -
<aws_endpoint>— URL-адрес S3-совместимого хранилища, например,http://minio:9000 -
<aws_region>— код региона, в котором развернуты и выполняются ваши сервисы и функции AWS, например,ru-central1-a.
-
-
Проверьте доступ утилиты wal-g к S3-совместимому хранилищу, выполнив команду:
wal-g backup-list
Восстановление базы данных
Возможные сценарии восстановления базы данных PostgreSQL:
Полное восстановление из последней резервной копии
Чтобы восстановить базу данных:
-
Остановите сервис PostgreSQL, выполнив команду:
systemctl stop postgresql -
Очистите директорию с данными PostgreSQL (PGDATA), выполнив команду:
rm -rf /<path_to_pgdata>/*После очистки все текущие данные в PostgreSQL будут утеряны. Предварительно проверьте восстановление из выбранной резервной копии в тестовой среде. Это снизит риск полной потери данных. Здесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Восстановите базу данных из последней резервной копии, выполнив команду:
wal-g backup-fetch /<path_to_pgdata> LATESTЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Создайте файл
recovery.signalдля применения WAL-архивации, выполнив команду:touch /<path_to_pgdata>/recovery.signalЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Настройте параметр
restore_commandв файле конфигурацииpostgresql.conf, выполнив команду:echo "restore_command = 'wal-g wal-fetch %f %p'" >> /<path_to_pgdata>/postgresql.confЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Запустите сервис PostgreSQL, выполнив команду:
systemctl start postgresql -
Дождитесь окончания процесса восстановления. Для отслеживания логов восстановления в командной строке можно выполнить команду:
tail -f /var/log/postgresql/postgresql-*.log | grep -i recoveryДождитесь появления записи:
database system is ready to accept connections
Восстановление из конкретной резервной копии
Чтобы восстановить базу данных:
-
Остановите сервис PostgreSQL, выполнив команду:
systemctl stop postgresql -
Очистите директорию с данными PostgreSQL (PGDATA), выполнив команду:
rm -rf /<path_to_pgdata>/*После очистки все текущие данные в PostgreSQL будут утеряны. Предварительно проверьте восстановление из выбранной резервной копии в тестовой среде. Это снизит риск полной потери данных. Здесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Посмотрите список резервных копий, выполнив команду:
wal-g backup-listПример вывода
name last_modified wal_segment_backup_start base_000000010000000000000005 2026-01-27T10:00:00Z 000000010000000000000005 base_000000010000000000000010 2026-01-28T10:00:00Z 000000010000000000000010
-
Восстановите базу данных из нужной резервной копии, выполнив команду:
wal-g backup-fetch /<path_to_pgdata> <backup_name>Здесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data. -
<backup_name>— название резервной копии, например,base_000000010000000000000010.
-
-
Настройте параметр
restore_commandв файле конфигурацииpostgresql.conf, выполнив команду:echo "restore_command = 'wal-g wal-fetch %f %p'" >> /<path_to_pgdata>/postgresql.confЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Запустите сервис PostgreSQL, выполнив команду:
systemctl start postgresql -
Дождитесь окончания процесса восстановления. Для отслеживания логов восстановления в командной строке можно выполнить команду:
tail -f /var/log/postgresql/postgresql-*.log | grep -i recoveryДождитесь появления записи:
database system is ready to accept connections
Откат базы данных на определенный момент времени (PITR)
Чтобы восстановить базу данных:
-
Остановите сервис PostgreSQL, выполнив команду:
systemctl stop postgresql -
Очистите директорию с данными PostgreSQL (PGDATA), выполнив команду:
rm -rf /<path_to_pgdata>/*После очистки все текущие данные в PostgreSQL будут утеряны. Предварительно проверьте восстановление из выбранной резервной копии в тестовой среде. Это снизит риск полной потери данных. Здесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Восстановите базу данных из резервной копии, которая была создана до нужного момента времени. Для этого выполните команду:
wal-g backup-fetch /<path_to_pgdata> <backup_name>Здесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data. -
<backup_name>— название резервной копии, например,base_000000010000000000000010.
-
-
Настройте PITR в файле конфигурации
postgresql.conf, выполнив команду:cat >> /<path_to_pgdata>/postgresql.conf << 'EOF' restore_command = 'wal-g wal-fetch %f %p' recovery_target_time = '<target_time>' recovery_target_action = 'promote' EOFЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data. -
<target_time> — дата и время, до которых необходимо откатить базу данных, например,
2026-01-28 10:00:00.
-
-
Создайте файл
recovery.signalдля применения WAL-архивации, выполнив команду:touch /<path_to_pgdata>/recovery.signalЗдесь:
-
<path_to_pgdata>— путь к директории с данными PostgreSQL, например,/var/lib/pgsql/16/data.
-
-
Запустите сервис PostgreSQL, выполнив команду:
systemctl start postgresql -
Дождитесь окончания процесса восстановления. Для отслеживания логов восстановления в командной строке можно выполнить команду:
tail -f /var/log/postgresql/postgresql-*.log | grep -i recoveryДождитесь появления записи:
database system is ready to accept connections
Проверка после восстановления
Чтобы проверить, что восстановление базы данных прошло корректно:
-
Проверьте логи на наличие ошибок. Для вывода логов с ошибками выполните команду:
grep -i error /var/log/postgresql/postgresql-*.log -
Проверьте статус репликации при наличии реплик баз данных. Для этого выполните команду:
psql -c "SELECT * FROM pg_stat_replication;" -
Проверьте целостность данных, выполнив команду:
psql -c "SELECT count(*) FROM <table_name>;"Здесь:
-
<table_name>— название таблицы базы данных.
-
-
Проверьте, что параметр резервного копирования
archive_commandвключен для будущих восстановлений, с помощью команды:psql -c "SHOW archive_mode; SHOW archive_command;"
Была ли полезна эта страница?