PG:資料庫的備份與恢復
阿新 • • 發佈:2019-01-11
一、傳統操作
建立資料庫 並允許備份
該命令為資料庫命令
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、將資料目錄拷貝,可用上述命令啟動一個完全一樣的資料庫