PG:数据库的备份与恢复

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sinat_31032177/article/details/86234893

一、传统操作

创建数据库 并允许备份

该命令为数据库命令

CREATE DATABASE tutorial;

ALTER DATABASE tutorial SET timescaledb.restoring='on';

ALTER DATABASE tutorial SET timescaledb.restoring='off';

备份数据库
该命令为终端命令 数据库外使用
pg_dump命令解释
错误处理

需要确认登陆用户

pg_dump -U postgres -Fc -f tutorial.bak tutorial;

恢复数据库

pg_restore -U postgres -Fc -d tutorial tutorial.bak

二、docker连续存档和恢复

创建docker网络

docker network create timescaledb-net

然后使用新创建的网络启动TimescaleDB并启用存档:

docker run  --network timescaledb-net     -e POSTGRES_PASSWORD=insecure     -e POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal     -e PGDATA=/var/lib/postgresql/data/pg_data     timescale/timescaledb-postgis     -cwal_level=archive     -carchive_mode=on     -carchive_command="/usr/bin/wget wale/wal-push/%f -O -"     -carchive_timeout=600     -ccheckpoint_timeout=700     -cmax_wal_senders=1

要从备份存档中恢复数据库实例,请创建一个新的TimescaleDB容器:

docker create \
    --name timescaledb-recovered \
    --network timescaledb-net \
    -e POSTGRES_PASSWORD=insecure \
    -e POSTGRES_INITDB_WALDIR=/var/lib/postgresql/data/pg_wal \
    -e PGDATA=/var/lib/postgresql/data/pg_data \
    timescale/timescaledb:latest-pg10 postgres

现在从基本备份还原数据库文件:

docker run -it --rm \
    -v ~/backups:/backups \
    --volumes-from timescaledb-recovered \
    -e WALE_LOG_DESTINATION=stderr \
    -e WALE_FILE_PREFIX=file://localhost/backups \
    timescale/timescaledb-wale:latest \wal-e \
    backup-fetch /var/lib/postgresql/data/pg_data LATEST

重新创建一些配置文件(通常,这些是旧数据库实例中备份的配置文件):

docker run -it --rm  \
    --volumes-from timescaledb-recovered \
    timescale/timescaledb:latest-pg10 \
    cp /usr/local/share/postgresql/pg_ident.conf.sample /var/lib/postgresql/data/pg_data/pg_ident.conf

docker run -it --rm  \
    --volumes-from timescaledb-recovered \
    timescale/timescaledb:latest-pg10 \
    cp /usr/local/share/postgresql/postgresql.conf.sample /var/lib/postgresql/data/pg_data/postgresql.conf

docker run -it --rm  \
    --volumes-from timescaledb-recovered \
    timescale/timescaledb:latest-pg10 \
    sh -c 'echo "local all postgres trust" > /var/lib/postgresql/data/pg_data/pg_hba.conf'

现在创建一个告诉PostgreSQL如何恢复:recovery.conf

docker run -it --rm  \
    --volumes-from timescaledb-recovered \
    timescale/timescaledb:latest-pg10 \
    sh -c 'echo "restore_command='\''/usr/bin/wget wale/wal-fetch/%f -O -'\''" > /var/lib/postgresql/data/pg_data/recovery.conf'

然后再次运行WAL-E边车(您可能必须先拆除旧的边车)。它将用于重放可能未在基本备份中反映的最后一个WAL段:

docker run \
    --name wale \
    --network timescaledb-net \
    -v ~/backups:/backups \
    --volumes-from timescaledb-recovered \
    -e WALE_LOG_DESTINATION=stderr \
    -e PGWAL=/var/lib/postgresql/data/pg_wal \
    -e PGDATA=/var/lib/postgresql/data/pg_data \
    -e PGHOST=timescaledb \
    -e PGPASSWORD=insecure \
    -e PGUSER=postgres \
    -e WALE_FILE_PREFIX=file://localhost/backups \
    timescale/timescaledb-wale:latest

最后,启动TimescaleDB docker容器:

docker start timescaledb-recovered

验证数据库是否已成功启动并恢复:

docker logs timescaledb-recovered

三、单从docker容器数据卷角度的恢复

1、df -h找到原容器数据挂载点

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G   17G   34G   34% /
devtmpfs                  16G     0   16G    0% /dev
tmpfs                     16G     0   16G    0% /dev/shm
tmpfs                     16G  1.6G   15G   11% /run
tmpfs                     16G     0   16G    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
/dev/mapper/centos-home  957G  156M  957G    1% /home
overlay                   50G   17G   34G   34% /var/lib/docker/overlay2/d2964b1812274496d6fd3e9602a4dd8eefd4b3b5e0afbfa6f1f6b4b1f37f5a1f/merged
shm                       64M  4.0K   64M    1% /var/lib/docker/containers/a27b18401e4cac04dd84fb5c51151a471c98f95f2dc61a9c6b4c244c47ce3cda/shm
tmpfs                    3.2G     0  3.2G    0% /run/user/0

宿主机目录=挂载点 以内 , 例如: /home/data

2、挂载命令

docker run --name timescaledb2 -e POSTGRES_PASSWORD=postgres -e POSTGRES_USER=postgres  -v  /home/data:/var/lib/postgresql/data  -d -p 5555:5432  timescale/timescaledb-postgis

-v 宿主机目录:容器目录

3、将数据目录拷贝,可用上述命令启动一个完全一样的数据库

猜你喜欢

转载自blog.csdn.net/sinat_31032177/article/details/86234893