Closed twistmind closed 9 months ago
У нас не воспроизводится:
fuxx@s ~ $ ls /tmp/restore/
ls: cannot access '/tmp/restore/': No such file or directory
fuxx@s ~ $ pg_probackup restore -B /tmp/xxx --instance=dba1 -d postgres -D /tmp/restore --no-validate
WARNING: Backup S5754P is used without validation.
INFO: Restoring the database from backup at 2023-12-05 16:50:49+03
INFO: Start restoring backup files. PGDATA size: 52MB
INFO: Backup files are restored. Transferred bytes: 52MB, time elapsed: 0
INFO: Restore incremental ratio (less is better): 100% (52MB/52MB)
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapsed: 0
INFO: Restore of backup S5754P completed.
fuxx@s ~ $ ls /tmp/restore
backup_label global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf
base pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf
fuxx@s ~ $ pg_probackup restore -B /tmp/xxx --instance=dba1 -d postgres -D /tmp/restore --no-validate
ERROR: Restore destination is not empty: "/tmp/restore"
fuxx@s ~ $ ls /tmp/restore
backup_label global pg_dynshmem pg_ident.conf pg_multixact pg_replslot pg_snapshots pg_stat_tmp pg_tblspc PG_VERSION pg_xact postgresql.conf
base pg_commit_ts pg_hba.conf pg_logical pg_notify pg_serial pg_stat pg_subtrans pg_twophase pg_wal postgresql.auto.conf
Как видите, работает как ожидается - после первого восстановления всё в порядке и повторное восстaновление невозиожно.
Думаю, причина проблемы - тестовое восстановление в рабочую директорию /var/lib/postgresql/15/
. Возможно, какой-то софт поддержания целостности прод системы удаляет неизвестную ему и потенциально опасную директорию test_restoring.
Попробуйте восстанавливать например в /tmp. Воспроизведётся ли проблема?
Пробовал в /tmp - тоже самое.
И вот ошибка, будто бы папка уже существует, но ее там нет:
ОС: Ubuntu 22.04.3 LTS
А если сделать ls /tmp/test_restoring
?
Нет такого файла или каталога
И при этом ls /pg_arch/
говорит, что /pg_arch/ найден?
Да, конечно. С этой папкой все в порядке.
Какая у Вас операционка? Какая версия пробэкапа? Какая версия постгреса? Вы ставили пробэкап из пакета или из исходников?
ОС: Ubuntu 22.04.3 LTS pg_probackup: pg_probackup-15 2.5.13 (PostgreSQL 15.4) postgresql: PostgreSQL 15.5 (Ubuntu 15.5-1.pgdg22.04+1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit
Ставил из пакета.
Разобрался. Это моя ошибка - неправильно понял контекст сервера восстановления. Ожидал почему-то (точнее, я знаю почему), что восстановление будет на том сервере, откуда запускалась команда восстановления. Все эти "пропавшие" папки лежат на удаленном сервере, а не на локальном.
Прошу прощения. Закрываю.
Здравствуйте.
Вот используемая команда для восстановления из бекапа с целью дополнительной проверки последнего выполненного бекапа - так называемое, тестирование восстановления из бекапа:
pg_probackup-15 restore -B /pg_arch/ --instance test -D /var/lib/postgresql/15/test_restoring -j 4 --no-validate
Если команда выполняется первый раз с таким местом назначения (параметр -D), то восстановление проходит успешно, однако папка test_restoring пропадает.
Если выполнить ту же команду еще раз, то возникает ошибка сразу же:
ERROR: Restore destination is not empty: "/var/lib/postgresql/15/test_restoring"
Однако папки там нет, поэтому что-то странное происходит.
Соответственно два вопроса: