Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Automating backups to Hetzner Object Storage (S3 bucket) #898

Merged
merged 4 commits into from
Feb 20, 2025
Merged

Conversation

vitabaks
Copy link
Owner

@vitabaks vitabaks commented Feb 20, 2025

Issue: #794

  • Create Hetzner Object Storage (S3 bucket)
  • Automatic configuration of pgBackRest for backups to Hetzner Object Storage
  • Automatic configuration of WAL-G for backups to Hetzner Object Storage

New variables:

  • hetzner_object_storage_create
    • Note: Applicable if 'pgbackrest_install' or 'wal_g_install' is 'true'
    • default: true
  • hetzner_object_storage_name
    • Name of the Object Storage (S3 bucket).
    • default: {{ patroni_cluster_name }}-backup
  • hetzner_object_storage_region
    • The region where the Object Storage (S3 bucket) will be created.
    • default: {{ server_location }}
    • Note: Currently, the following regions are supported: fsn1, nbg1, hel1. If an unsupported region is specified, the error “Invalid endpoint provided” will be displayed. See Available endpoints
      • However, you can deploy a database cluster in one region and create a bucket in another (which is recommended).
  • hetzner_object_storage_endpoint
    • default: https://{{ hetzner_object_storage_region }}.your-objectstorage.com
  • hetzner_object_storage_access_key
    • (required) Object Storage ACCESS KEY
    • default: ""
  • hetzner_object_storage_secret_key
  • hetzner_object_storage_absent
    • Allow to delete Object Storage when deleting a cluster servers using the 'state=absent' variable.
    • default: false

@vitabaks vitabaks added enhancement Improvement of the current functionality automation Automation functionality using Ansible labels Feb 20, 2025
@vitabaks vitabaks self-assigned this Feb 20, 2025
@vitabaks vitabaks changed the title Create Hetzner Object Storage (S3 bucket) Automating backups to Hetzner Object Storage (S3 bucket) Feb 20, 2025
@vitabaks
Copy link
Owner Author

vitabaks commented Feb 20, 2025

Test (pgBackRest)

    ansible-playbook deploy_pgcluster.yml --extra-vars \
      "ansible_user=root \
       cloud_provider='hetzner' \
       cloud_load_balancer=false \
       server_count=1 \
       server_type='CPX11' \
       server_image='ubuntu-24.04' \
       server_location='fsn1' \
       system_volume_size=50 \
       volume_size=50 \
       ssh_key_name='vitaliy' \
       postgresql_version=17 \
       patroni_cluster_name=vitaliy-test \
       pgbackrest_install=true \
       hetzner_object_storage_access_key='***********' \
       hetzner_object_storage_secret_key='****************'"

Result:

PLAY [Deploy PostgreSQL HA Cluster (based on "Patroni")] *******************************************************************************************************************************************************
...

TASK [cloud-resources : Hetzner Cloud: Create Object Storage (S3 bucket) 'vitaliy-test-backup'] ****************************************************************************************************************
ok: [localhost]

TASK [cloud-resources : Hetzner Cloud: Create or modify server] ************************************************************************************************************************************************
changed: [localhost] => (item=vitaliy-test-pgnode01)

TASK [cloud-resources : Hetzner Cloud: Add server to network 'postgres-cluster-network-eu-central'] ************************************************************************************************************
ok: [localhost] => (item=vitaliy-test-pgnode01)

TASK [cloud-resources : Hetzner Cloud: Create or modify volume] ************************************************************************************************************************************************
changed: [localhost] => (item=vitaliy-test-pgnode01-storage)

TASK [cloud-resources : Hetzner Cloud: Gather information about Load Balancers] ********************************************************************************************************************************
ok: [localhost]

TASK [cloud-resources : Wait for host to be available via SSH] *************************************************************************************************************************************************
ok: [localhost] => (item=49.13.75.159)

TASK [cloud-resources : Server info] ***************************************************************************************************************************************************************************
ok: [localhost] => (item=49.13.75.159) => {
    "msg": {
        "id": "60370053",
        "image": "ubuntu-24.04",
        "name": "vitaliy-test-pgnode01",
        "private_ip": "10.0.1.1",
        "public_ip": "49.13.75.159",
        "type": "cpx11",
        "volume_size": "50 GB"
    }
}
...

PLAY [deploy_pgcluster.yml | Install and configure pgBackRest] *************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [Include main variables] **********************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [Include OS-specific variables] ***************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [pgbackrest : Set variable 'pgbackrest_conf' for backup in Hetzner Object Storage (S3 bucket)] ************************************************************************************************************
ok: [10.0.1.1 -> localhost]

TASK [pgbackrest : Make sure the gnupg, apt-transport-https and python3-debian packages are present] ***********************************************************************************************************
ok: [10.0.1.1]

TASK [pgbackrest : Add pgdg repository and signing key] ********************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [pgbackrest : Update apt cache] ***************************************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [pgbackrest : Install pgbackrest] *************************************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [pgbackrest : Ensure log directory exists] ****************************************************************************************************************************************************************
changed: [10.0.1.1] => (item=/var/log/pgbackrest)

TASK [pgbackrest : Ensure repo directory exists] ***************************************************************************************************************************************************************
changed: [10.0.1.1] => (item=/pgbackrest)

TASK [pgbackrest : Ensure spool directory exists] **************************************************************************************************************************************************************
ok: [10.0.1.1] => (item=/var/spool/pgbackrest)

TASK [pgbackrest : Ensure config directory exists] *************************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [pgbackrest : Generate conf file /etc/pgbackrest/pgbackrest.conf] *****************************************************************************************************************************************
changed: [10.0.1.1]

TASK [pgbackrest : Make sure that the cron package is installed] ***********************************************************************************************************************************************
ok: [10.0.1.1]

TASK [pgbackrest : Add pgbackrest cron jobs on database server] ************************************************************************************************************************************************
changed: [10.0.1.1] => (item={'name': 'pgBackRest: Full Backup', 'file': '/etc/cron.d/pgbackrest-vitaliy-test', 'user': 'postgres', 'minute': '00', 'hour': '3', 'day': '*', 'month': '*', 'weekday': '0', 'job': 'pgbackrest --stanza=vitaliy-test --type=full backup'})
changed: [10.0.1.1] => (item={'name': 'pgBackRest: Diff Backup', 'file': '/etc/cron.d/pgbackrest-vitaliy-test', 'user': 'postgres', 'minute': '00', 'hour': '3', 'day': '*', 'month': '*', 'weekday': '1-6', 'job': 'pgbackrest --stanza=vitaliy-test --type=diff backup'})

PLAY [deploy_pgcluster.yml | PostgreSQL Cluster Deployment] ****************************************************************************************************************************************************
...


TASK [deploy-finish : Postgres Cluster info] *******************************************************************************************************************************************************************
ok: [10.0.1.1] => {
    "msg": [
        "+ Cluster: vitaliy-test (7473397463224298352) --------+----+-----------+",
        "| Member                | Host     | Role   | State   | TL | Lag in MB |",
        "+-----------------------+----------+--------+---------+----+-----------+",
        "| vitaliy-test-pgnode01 | 10.0.1.1 | Leader | running |  1 |           |",
        "+-----------------------+----------+--------+---------+----+-----------+"
    ]
}

TASK [deploy-finish : Connection info] *************************************************************************************************************************************************************************
ok: [10.0.1.1] => {
    "msg": {
        "address": "10.0.1.1",
        "password": "Ool9HpYeLTvoOPiotSWtDOLHgKVRU2zv",
        "port": 6432,
        "superuser": "postgres"
    }
}

PLAY RECAP *****************************************************************************************************************************************************************************************************
10.0.1.1                   : ok=156  changed=79   unreachable=0    failed=0    skipped=434  rescued=0    ignored=0   
localhost                  : ok=26   changed=4    unreachable=0    failed=0    skipped=217  rescued=0    ignored=0   

  • TASK [cloud-resources : Hetzner Cloud: Create Object Storage (S3 bucket) 'vitaliy-test-backup']
  • TASK [pgbackrest : Set variable 'pgbackrest_conf' for backup in Hetzner Object Storage (S3 bucket)]
  • TASK [pgbackrest/stanza-create : Create stanza "vitaliy-test"]

Check:

postgres@vitaliy-test-pgnode01:~$ cat /etc/pgbackrest/pgbackrest.conf
[global]
log-level-file=detail
log-path=/var/log/pgbackrest
repo1-type=s3
repo1-path=/pgbackrest
repo1-s3-key=*********
repo1-s3-key-secret=*************
repo1-s3-bucket=vitaliy-test-backup
repo1-s3-endpoint=https://fsn1.your-objectstorage.com
repo1-s3-region=fsn1
repo1-s3-uri-style=path
repo1-retention-full=4
repo1-retention-archive=4
repo1-retention-archive-type=full
repo1-bundle=y
repo1-block=y
start-fast=y
stop-auto=y
link-all=y
resume=n
archive-async=y
archive-get-queue-max=1GiB
spool-path=/var/spool/pgbackrest
process-max=1
backup-standby=n

[vitaliy-test]
log-level-console=info
recovery-option=recovery_target_action=promote
pg1-path=/pgdata/17/main
postgres@vitaliy-test-pgnode01:~$ pgbackrest --stanza=vitaliy-test check
2025-02-20 07:22:39.137 P00   INFO: check command begin 2.54.2: --backup-standby=n --exec-id=11875-51622d28 --log-level-console=info --log-level-file=detail --log-path=/var/log/pgbackrest --pg1-path=/pgdata/17/main --repo1-path=/pgbackrest --repo1-s3-bucket=vitaliy-test-backup --repo1-s3-endpoint=https://fsn1.your-objectstorage.com --repo1-s3-key=<redacted> --repo1-s3-key-secret=<redacted> --repo1-s3-region=fsn1 --repo1-s3-uri-style=path --repo1-type=s3 --stanza=vitaliy-test
2025-02-20 07:22:39.148 P00   INFO: check repo1 configuration (primary)
2025-02-20 07:22:42.118 P00   INFO: check repo1 archive for WAL (primary)
2025-02-20 07:22:44.261 P00   INFO: WAL segment 000000010000000000000001 successfully archived to '/pgbackrest/archive/vitaliy-test/17-1/0000000100000000/000000010000000000000001-166488fdd2a7718039012f26612a5ded037eab0b.gz' on repo1
2025-02-20 07:22:44.262 P00   INFO: check command end: completed successfully (5127ms)
postgres@vitaliy-test-pgnode01:~$ 

Backup

postgres@vitaliy-test-pgnode01:~$ pgbackrest --stanza=vitaliy-test backup
2025-02-20 07:23:00.247 P00   INFO: backup command begin 2.54.2: --backup-standby=n --exec-id=11922-9f3b1d50 --log-level-console=info --log-level-file=detail --log-path=/var/log/pgbackrest --pg1-path=/pgdata/17/main --process-max=1 --repo1-block --repo1-bundle --repo1-path=/pgbackrest --repo1-retention-archive=4 --repo1-retention-archive-type=full --repo1-retention-full=4 --repo1-s3-bucket=vitaliy-test-backup --repo1-s3-endpoint=https://fsn1.your-objectstorage.com --repo1-s3-key=<redacted> --repo1-s3-key-secret=<redacted> --repo1-s3-region=fsn1 --repo1-s3-uri-style=path --repo1-type=s3 --no-resume --stanza=vitaliy-test --start-fast --stop-auto
2025-02-20 07:23:00.577 P00   WARN: no prior backup exists, incr backup has been changed to full
2025-02-20 07:23:00.577 P00   INFO: execute non-exclusive backup start: backup begins after the requested immediate checkpoint completes
2025-02-20 07:23:00.808 P00   INFO: backup start archive = 000000010000000000000003, lsn = 0/3000028
2025-02-20 07:23:00.808 P00   INFO: check archive for prior segment 000000010000000000000002
2025-02-20 07:23:05.254 P00   INFO: execute non-exclusive backup stop and wait for all WAL segments to archive
2025-02-20 07:23:05.360 P00   INFO: backup stop archive = 000000010000000000000003, lsn = 0/3000158
2025-02-20 07:23:06.177 P00   INFO: check archive for segment(s) 000000010000000000000003:000000010000000000000003
2025-02-20 07:23:06.987 P00   INFO: new backup label = 20250220-072300F
2025-02-20 07:23:12.496 P00   INFO: full backup size = 22.3MB, file total = 968
2025-02-20 07:23:12.497 P00   INFO: backup command end: completed successfully (12252ms)
2025-02-20 07:23:12.497 P00   INFO: expire command begin 2.54.2: --exec-id=11922-9f3b1d50 --log-level-console=info --log-level-file=detail --log-path=/var/log/pgbackrest --repo1-path=/pgbackrest --repo1-retention-archive=4 --repo1-retention-archive-type=full --repo1-retention-full=4 --repo1-s3-bucket=vitaliy-test-backup --repo1-s3-endpoint=https://fsn1.your-objectstorage.com --repo1-s3-key=<redacted> --repo1-s3-key-secret=<redacted> --repo1-s3-region=fsn1 --repo1-s3-uri-style=path --repo1-type=s3 --stanza=vitaliy-test
2025-02-20 07:23:12.904 P00   INFO: expire command end: completed successfully (407ms)
postgres@vitaliy-test-pgnode01:~$ 
  • backup command end: completed successfully
postgres@vitaliy-test-pgnode01:~$ pgbackrest --stanza=vitaliy-test info
stanza: vitaliy-test
    status: ok
    cipher: none

    db (current)
        wal archive min/max (17): 000000010000000000000001/000000010000000000000003

        full backup: 20250220-072300F
            timestamp start/stop: 2025-02-20 07:23:00+00 / 2025-02-20 07:23:05+00
            wal start/stop: 000000010000000000000003 / 000000010000000000000003
            database size: 22.3MB, database backup size: 22.3MB
            repo1: backup size: 3.0MB

image
image

passed

@vitabaks
Copy link
Owner Author

vitabaks commented Feb 20, 2025

Test (WAL-G)

    ansible-playbook deploy_pgcluster.yml --extra-vars \
      "ansible_user=root \
       cloud_provider='hetzner' \
       cloud_load_balancer=false \
       server_count=1 \
       server_type='CPX11' \
       server_image='ubuntu-24.04' \
       server_location='fsn1' \
       system_volume_size=50 \
       volume_size=50 \
       ssh_key_name='vitaliy' \
       postgresql_version=17 \
       patroni_cluster_name=vitaliy-test \
       wal_g_install=true \
       hetzner_object_storage_access_key='***********' \
       hetzner_object_storage_secret_key='****************'"

Result:

PLAY [Deploy PostgreSQL HA Cluster (based on "Patroni")] *******************************************************************************************************************************************************
...

TASK [cloud-resources : Hetzner Cloud: Create Object Storage (S3 bucket) 'vitaliy-test-backup'] ****************************************************************************************************************
ok: [localhost]

TASK [cloud-resources : Hetzner Cloud: Create or modify server] ************************************************************************************************************************************************
changed: [localhost] => (item=vitaliy-test-pgnode01)

TASK [cloud-resources : Hetzner Cloud: Add server to network 'postgres-cluster-network-eu-central'] ************************************************************************************************************
ok: [localhost] => (item=vitaliy-test-pgnode01)

TASK [cloud-resources : Hetzner Cloud: Create or modify volume] ************************************************************************************************************************************************
changed: [localhost] => (item=vitaliy-test-pgnode01-storage)

TASK [cloud-resources : Hetzner Cloud: Gather information about Load Balancers] ********************************************************************************************************************************
ok: [localhost]

TASK [cloud-resources : Wait for host to be available via SSH] *************************************************************************************************************************************************
ok: [localhost] => (item=49.13.75.159)

TASK [cloud-resources : Server info] ***************************************************************************************************************************************************************************
ok: [localhost] => (item=49.13.75.159) => {
    "msg": {
        "id": "60371158",
        "image": "ubuntu-24.04",
        "name": "vitaliy-test-pgnode01",
        "private_ip": "10.0.1.1",
        "public_ip": "49.13.75.159",
        "type": "cpx11",
        "volume_size": "50 GB"
    }
}
...

PLAY [deploy_pgcluster.yml | PostgreSQL Cluster Deployment] ****************************************************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [Include main variables] **********************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [Include system variables] ********************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [Include OS-specific variables] ***************************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [wal-g : Set variable 'wal_g_json' for backup in AWS S3 bucket] *******************************************************************************************************************************************
ok: [10.0.1.1 -> localhost]

TASK [wal-g : Check if WAL-G is already installed] *************************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [wal-g : Download WAL-G v3.0.3 binary] ********************************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [wal-g : Extract WAL-G into /tmp] *************************************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [wal-g : Copy WAL-G binary file to "/usr/local/bin/wal-g"] ************************************************************************************************************************************************
changed: [10.0.1.1]

TASK [wal-g : Generate conf file /var/lib/postgresql/.walg.json] ***********************************************************************************************************************************************
changed: [10.0.1.1]

TASK [wal-g : Make sure that the cron package is installed] ****************************************************************************************************************************************************
ok: [10.0.1.1]

TASK [wal-g : Add WAL-G cron jobs] *****************************************************************************************************************************************************************************
changed: [10.0.1.1] => (item={'name': 'WAL-G: Create daily backup', 'user': 'postgres', 'file': '/etc/cron.d/walg', 'minute': '00', 'hour': '3', 'day': '*', 'month': '*', 'weekday': '*', 'job': 'curl -I -s http://10.0.1.1:8008 | grep 200 && /usr/local/bin/wal-g --config /var/lib/postgresql/.walg.json backup-push /pgdata/17/main > /var/log/postgresql/walg_backup.log 2>&1'})
changed: [10.0.1.1] => (item={'name': 'WAL-G: Delete old backups', 'user': 'postgres', 'file': '/etc/cron.d/walg', 'minute': '30', 'hour': '6', 'day': '*', 'month': '*', 'weekday': '*', 'job': 'curl -I -s http://10.0.1.1:8008 | grep 200 && /usr/local/bin/wal-g --config /var/lib/postgresql/.walg.json delete retain FULL 4 --confirm > /var/log/postgresql/walg_delete.log 2>&1'})
...


TASK [deploy-finish : Postgres Cluster info] *******************************************************************************************************************************************************************
ok: [10.0.1.1] => {
    "msg": [
        "+ Cluster: vitaliy-test (7473404101899565367) --------+----+-----------+",
        "| Member                | Host     | Role   | State   | TL | Lag in MB |",
        "+-----------------------+----------+--------+---------+----+-----------+",
        "| vitaliy-test-pgnode01 | 10.0.1.1 | Leader | running |  1 |           |",
        "+-----------------------+----------+--------+---------+----+-----------+"
    ]
}

TASK [deploy-finish : Connection info] *************************************************************************************************************************************************************************
ok: [10.0.1.1] => {
    "msg": {
        "address": "10.0.1.1",
        "password": "8nYaorrqM6J1GF7H7BEMw1Gzfqt0RkQ0",
        "port": 6432,
        "superuser": "postgres"
    }
}

PLAY RECAP *****************************************************************************************************************************************************************************************************
10.0.1.1                   : ok=150  changed=76   unreachable=0    failed=0    skipped=441  rescued=0    ignored=0   
localhost                  : ok=26   changed=4    unreachable=0    failed=0    skipped=217  rescued=0    ignored=0   

  • TASK [cloud-resources : Hetzner Cloud: Create Object Storage (S3 bucket) 'vitaliy-test-backup']
  • TASK [wal-g : Set variable 'wal_g_json' for backup in AWS S3 bucket]
  • TASK [wal-g : Generate conf file /var/lib/postgresql/.walg.json]

Check

postgres@vitaliy-test-pgnode01:~$ cat .walg.json
{
  "AWS_ACCESS_KEY_ID": "***********",
  "AWS_SECRET_ACCESS_KEY": "**********",
  "AWS_ENDPOINT": "https://fsn1.your-objectstorage.com",
  "AWS_S3_FORCE_PATH_STYLE": "True",
  "AWS_REGION": "fsn1",
  "WALG_S3_PREFIX": "s3://vitaliy-test-backup",
  "WALG_COMPRESSION_METHOD": "brotli",
  "WALG_DELTA_MAX_STEPS": "6",
  "WALG_DOWNLOAD_CONCURRENCY": "1",
  "WALG_UPLOAD_CONCURRENCY": "1",
  "WALG_UPLOAD_DISK_CONCURRENCY": "1",
  "PGDATA": "/pgdata/17/main",
  "PGHOST": "/var/run/postgresql",
  "PGPORT": "5432",
  "PGUSER": "postgres"
}
postgres@vitaliy-test-pgnode01:~$ psql
psql (17.3 (Ubuntu 17.3-3.pgdg24.04+1))
Type "help" for help.

postgres=# select * from pg_stat_archiver;
 archived_count | last_archived_wal | last_archived_time | failed_count | last_failed_wal | last_failed_time |          stats_reset          
----------------+-------------------+--------------------+--------------+-----------------+------------------+-------------------------------
              0 |                   |                    |            0 |                 |                  | 2025-02-20 07:44:47.360309+00
(1 row)

postgres=# select pg_switch_wal();
 pg_switch_wal 
---------------
 0/1793C00
(1 row)

postgres=# select * from pg_stat_archiver;
 archived_count |    last_archived_wal     |      last_archived_time       | failed_count | last_failed_wal | last_failed_time |          stats_reset          
----------------+--------------------------+-------------------------------+--------------+-----------------+------------------+-------------------------------
              1 | 000000010000000000000001 | 2025-02-20 07:46:21.316948+00 |            0 |                 |                  | 2025-02-20 07:44:47.360309+00
(1 row)

  • archived_count: 1
  • failed_count: 0

Backup

postgres@vitaliy-test-pgnode01:~$ cat /etc/cron.d/walg 
#Ansible: WAL-G: Create daily backup
00 3 * * * postgres curl -I -s http://10.0.1.1:8008 | grep 200 && /usr/local/bin/wal-g --config /var/lib/postgresql/.walg.json backup-push /pgdata/17/main > /var/log/postgresql/walg_backup.log 2>&1
#Ansible: WAL-G: Delete old backups
30 6 * * * postgres curl -I -s http://10.0.1.1:8008 | grep 200 && /usr/local/bin/wal-g --config /var/lib/postgresql/.walg.json delete retain FULL 4 --confirm > /var/log/postgresql/walg_delete.log 2>&1
postgres@vitaliy-test-pgnode01:~$ 
postgres@vitaliy-test-pgnode01:~$ wal-g --config /var/lib/postgresql/.walg.json backup-push /pgdata/17/main
INFO: 2025/02/20 07:47:11.260474 Backup will be pushed to storage: default
INFO: 2025/02/20 07:47:11.370105 Couldn't find previous backup. Doing full backup.
INFO: 2025/02/20 07:47:11.387120 Calling pg_start_backup()
INFO: 2025/02/20 07:47:11.609465 Initializing the PG alive checker (interval=1m0s)...
INFO: 2025/02/20 07:47:11.609514 Starting a new tar bundle
INFO: 2025/02/20 07:47:11.609549 Walking ...
INFO: 2025/02/20 07:47:11.609757 Starting part 1 ...
INFO: 2025/02/20 07:47:11.793543 Packing ...
INFO: 2025/02/20 07:47:11.794949 Finished writing part 1.
INFO: 2025/02/20 07:47:12.332468 Starting part 2 ...
INFO: 2025/02/20 07:47:12.332533 /global/pg_control
INFO: 2025/02/20 07:47:12.333516 Finished writing part 2.
INFO: 2025/02/20 07:47:12.333543 Calling pg_stop_backup()
INFO: 2025/02/20 07:47:12.593379 Starting part 3 ...
INFO: 2025/02/20 07:47:12.594565 backup_label
INFO: 2025/02/20 07:47:12.594591 tablespace_map
INFO: 2025/02/20 07:47:12.613427 Finished writing part 3.
INFO: 2025/02/20 07:47:15.224070 Querying pg_database
INFO: 2025/02/20 07:47:16.505652 Wrote backup with name base_000000010000000000000003 to storage default
postgres@vitaliy-test-pgnode01:~$ wal-g --config /var/lib/postgresql/.walg.json backup-list
INFO: 2025/02/20 07:47:48.652892 List backups from storages: [default]
backup_name                   modified             wal_file_name            storage_name
base_000000010000000000000003 2025-02-20T07:47:16Z 000000010000000000000003 default

image

passed

@vitabaks vitabaks merged commit d1ac8a6 into master Feb 20, 2025
15 checks passed
@vitabaks vitabaks deleted the hetzner-s3 branch February 20, 2025 18:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
automation Automation functionality using Ansible enhancement Improvement of the current functionality
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant