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 Docker container.
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.
For more information about configuring pgBackRest to work with AlloyDB Omni, see Set up pgBackRest for AlloyDB Omni.
See Back up and restore in Kubernetes for Kubernetes-based information.
Before you begin
Before configuring AlloyDB Omni to work with pgBackrest, you need to have AlloyDB Omni installed and running on a server that you control.
A target database server, running the same major version of AlloyDB Omni as the backup you want to restore. For more information about installing AlloyDB Omni, see Install AlloyDB Omni.
A pgBackRest backup repository containing at least one backup of the source AlloyDB Omni database.
Enough free disk space on the target server to hold the restored database.
Overview
To perform an AlloyDB Omni restore using pgBackRest, run
the pgbackrest restore
command. The parameters that you
provide the command vary depending upon your situation.
In general, you
run the pgbackrest restore
command with flags that provide the following information:
- The location of your
pgbackrest.conf
file. - The name of pgBackRest backup repository that you want to restore to. These
repositories are named and defined in the
pgbackrest.conf
file. - The location on the local file system to write the restored data to.
- An identifier of the particular backup or point in time that you want to restore from.
When running the containerized pgbackrest restore
commands, remember to use file
system paths from the container's point of view. For example, the path
to your AlloyDB Omni data directory is always /var/lib/postgresql/data
,
no matter its location on your host server. For more information, see
A note about file system paths.
Perform a point-in-time restore
This example restores data from a pgBackRest repository, naming a particular
point in time to restore to. If you have defined multiple repositories in
the target environment's pgbackrest.conf
file, then pgBackRest chooses
the repository to restore from based on availability, expected speed, and other factors.
The example assumes the following:
You have a
pgbackrest.conf
file located at the top level of your target AlloyDB Omni data directory. This makes the file available to the containerizedpgbackrest
as/var/lib/postgresql/data
.You have enabled continuous backups with your pgBackRest configuration.
In the target environment, perform a PITR restore, specifying a timestamp to restore to:
Docker
docker exec CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/data \ --stanza=STANZA \ --type=time \ --pg1-path=/var/lib/postgresql/data/data-RESTORED \ --target="TIMESTAMP" \ restore
Replace the following:
CONTAINER_NAME
: the name that you assigned to the AlloyDB Omni container when you installed it—for example,my-omni
.STANZA
: the configuration stanza, defined by thepgbackrest.conf
file, to apply to this restore—for example,omni
.TIMESTAMP
: the time to restore to—for example,2024-02-22 19:50:00
.
Podman
podman exec CONTAINER_NAME pgbackrest \ --config-path=/var/lib/postgresql/data \ --stanza=STANZA \ --type=time \ --pg1-path=/var/lib/postgresql/data/data-RESTORED \ --target="TIMESTAMP" \ restore
Replace the following:
CONTAINER_NAME
: the name that you assigned to the AlloyDB Omni container when you installed it—for example,my-omni
.STANZA
: the configuration stanza, defined by thepgbackrest.conf
file, to apply to this restore—for example,omni
.TIMESTAMP
: the time to restore to—for example,2024-02-22 19:50:00
.
On the target environment, stop the container using the following command:
Docker
docker container stop CONTAINER_NAME
Podman
podman container stop CONTAINER_NAME
Rename the
data
subdirectory of your data directory, as a safety precaution:cd DATA_DIR
sudo mv data data-OLD
Replace
DATA_DIR
with the file system path to your AlloyDB Omni data directory.Move the restored data into place, and clean up
postgresql.auto.conf
:sudo mv data-RESTORED data
sudo sed -i 's|data-RESTORED|data|' data/postgresql.auto.conf
Start the AlloyDB Omni container with the database server:
Docker
docker container start CONTAINER_NAME
Podman
podman container start CONTAINER_NAME
You can now connect to your database using psql
and confirm that the data
has been restored as you expect. If so, you can delete the data-OLD
copy
of the data
subdirectory that you created earlier.
For more information about PITR in pgBackRest, see Point-in-Time Recovery.
For more information about preparing
a pgbackrest.conf
file for use with AlloyDB Omni, see Set up pgBackRest for AlloyDB Omni.
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. These include the following:
- Limiting a restore only to changed files.
- Restoring only selected databases.
For a complete guide to performing restores in pgBackRest, see Restore.