Restore an AlloyDB Omni cluster using pgBackRest

Select a documentation version:

This page shows you how to restore an AlloyDB Omni cluster using a backup created with pgBackRest, the open-source backup solution included with the AlloyDB Omni.

Because AlloyDB Omni is compatible with PostgreSQL, the data-restoration commands and techniques described by the pgBackRest manual apply to AlloyDB Omni as well. This page demonstrates a selection of common recovery tasks, with examples of relevant commands.

TDE-enabled clusters also support backup and restores using pgBackRest. For more information, see Create a TDE-enabled cluster.

For more information about configuring pgBackRest to work with AlloyDB Omni, see Set up pgBackRest for AlloyDB Omni.

For Kubernetes-based information, see Back up and restore in Kubernetes.

Before you begin

Before restoring an AlloyDB Omni cluster, ensure that you have the following:

  • Sufficient disk space on destination file system to store the restored AlloyDB Omni database cluster.

  • Same major version of AlloyDB Omni used for the restoration database instance as the original source database instance.

    To check your version of PostgreSQL, run the following command:

    Docker

    docker exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql -c "SELECT version();"
    

    Replace the following variable:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

    To check your version of pgBackRest, run the following command:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest version
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest version
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest version
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest version
    

    Replace the following variable:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

    If your target container has a different version of PostgreSQL, pgBackRest, or both, then you need to create a new target container with a matching version. If this is not possible, then you need to use an alternative method, such as the PostgreSQL included pg_dump or pg_dumpall utilities to copy your databases across versions.

  • Stop your AlloyDB Omni container

    To simulate your AlloyDB Omni database cluster not being available, stop the container.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Replace the following variable:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

    Create idle AlloyDB Omni container

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest sleep infinity
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest sleep infinity
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest sleep infinity
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest sleep infinity
    

    Replace the following variables:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.
    • DATA_DIR: Host directory path that your data is stored in.
    • BACKUP_DIR: External directory path that your backups are stored in.
    • HOST_PORT: TCP port on the host machine that the container should publish its own port 5432 to. To use the PostgreSQL default port on the host machine as well, specify 5432.

    Remove your data directory

    To clear your AlloyDB Omni database cluster, remove the data directory.

    Docker

    docker exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Docker

    docker exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Podman

    podman exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Podman

    podman exec CONTAINER_NAME sh -c "rm -rf /var/lib/postgresql/data/*"
    

    Replace the following variable:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

    Validate that your backups are visible

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    info
    

    Replace the following variables:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.
    • STANZA_NAME: Name of the stanza you created. For example, my-stanza.

    Restore your backup

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=STANZA_NAME \
    restore
    

    Replace the following variables:

    * CONTAINER_NAME: Name you used for your container. For example, my-omni-1. * STANZA_NAME: Name of the stanza you created. For example, my-stanza.

    Remove idle AlloyDB Omni container

    Docker

    docker kill CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker kill CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman kill CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman kill CONTAINER_NAME
    podman rm CONTAINER_NAME

    Replace the following variable:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

    Create AlloyDB Omni container

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Replace the following variables:

    • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.
    • DATA_DIR: Host directory path that your data is stored in.
    • BACKUP_DIR: External directory path that your backups are stored in.
    • HOST_PORT: TCP port on the host machine that the container should publish its own port 5432 to. To use the PostgreSQL default port on the host machine as well, specify 5432.

      Validate that AlloyDB Omni started

      Docker

      docker logs -f CONTAINER_NAME
      

      Docker

      docker logs -f CONTAINER_NAME
      

      Podman

      podman logs -f CONTAINER_NAME
      

      Podman

      podman logs -f CONTAINER_NAME
      

      Replace the following variable:

      • CONTAINER_NAME: Name you used for your container. For example, my-omni-1.

      Other options

      The pgBackRest restore command is very flexible, with an array of options and features that you can control through passing in different command-line options. For a complete guide to performing restores, see Restore.