文章目錄
- pg_rman簡介
- 一、安裝配置pg_rman
- 二、創建表與用戶
- 三、備份與恢復
pg_rman簡介
pg_rman 是 PostgreSQL 的在線備份和恢復工具。類似oracle 的 rman
pg_rman 項目的目標是提供一種與 pg_dump 一樣簡單的在線備份和 PITR 方法。此外,它還為每個數據庫集群維護一個備份目錄。用戶可以使用一個命令維護舊備份,包括存檔日志。
pg_rman當前最新版本1.3.16支持最新的PostgreSQL 16到11,支持本機(standby/master)在線備份,不支持遠程備份,不支持加密存儲,支持PITR恢復。
一、安裝配置pg_rman
PostgreSQL16安裝步驟:http://t.csdnimg.cn/GSA7S
下載源碼文件
wget -O pg_rman-1.3.16.tar.gz https://github.com/ossc-db/pg_rman/archive/refs/tags/V1.3.16.tar.gz
解壓編譯
tar zxvf pg_rman-1.3.16.tar.gz
cd pg_rman-1.3.16
which pg_config
make USE_PGXS=1 PG_CONFIG=/opt/pgsql/postgresql/bin/pg_config
make USE_PGXS=1 PG_CONFIG=/opt/pgsql/postgresql/bin/pg_config install
查看pg_rman版本
/opt/pgsql/postgresql/bin/pg_rman --version
創建歸檔目錄并賦權
mkdir -p /opt/pgsql/archive_logs
sudo chown -R postgres:postgres /opt/pgsql/archive_logs
sudo chmod -R 700 /opt/pgsql/archive_logs
創建備份目錄并賦權
mkdir -p /home/postgres/pgrman
sudo chown -R postgres:postgres /home/postgres/pgrman
sudo chmod -R 700 /home/postgres/pgrman
文件賦權
sudo chown -R postgres:postgres /opt/pgsql/postgresql/data
sudo chmod -R 700 /opt/pgsql/postgresql/data
檢查postgresql.conf文件的日志及歸檔參數設置
sudo find / -name "postgresql.conf"
vim /opt/pgsql/postgresql/data/postgresql.conf
pg_rman初始化
pg_rman init --pgdata=/opt/pgsql/postgresql/data --backup-path=/home/postgres/pgrman
二、創建表與用戶
目標:創建一個test數據庫,建個用戶t,在t下建個test 表,并隨意插入幾條記錄。
連接到PostgreSQL數據庫
sudo -i -u postgres
psql
創建test數據庫
CREATE DATABASE test;
創建用戶t
CREATE USER t WITH PASSWORD '123456';
賦予用戶t對test數據庫的所有權限
GRANT ALL PRIVILEGES ON DATABASE test TO t;
連接到test數據庫
\c test
創建test表
CREATE TABLE test (id SERIAL PRIMARY KEY,name VARCHAR(50),age INT
);
向test插入數據
INSERT INTO test (name, age) VALUES ('張三', 30);
INSERT INTO test (name, age) VALUES ('李四', 25);
INSERT INTO test (name, age) VALUES ('王五', 35);
三、備份與恢復
目標:利用pg_rman 做備份和恢復操作:對庫做備份后,可以刪掉test表,利用備份做恢復
進行基礎全備
pg_rman backup --port=5432 \
--backup-mode=full \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--with-serverlogpg_rman validate --backup-path=/home/postgres/pgrman
添加數據
psql -d test
INSERT INTO test (name, age) VALUES ('七七', 88);
歸檔備份
pg_rman backup --port=5432 \
--backup-mode=archive \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--keep-arclog-files=1000 \
--keep-arclog-days=30pg_rman validate --backup-path=/home/postgres/pgrman
查看備份集
pg_rman show -B /home/postgres/pgrman
先刪除一條數據
psql -d test
DELETE FROM test WHERE id = 4;
停本地數據庫服務:
pg_ctl stop -D /opt/pgsql/postgresql/data
恢復
pg_rman restore \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--recovery-target-time="2024-07-05 10:25:36" \
--progress
啟動PostgreSQL服務
pg_ctl start -D /opt/pgsql/postgresql/data
歸檔備份恢復驗證
psql -d test
SELECT * FROM test;
再次添加一條數據
INSERT INTO test (name, age) VALUES ('yiyi', 11);
進行增量備份
pg_rman backup --port=5432 \
--backup-mode=incremental \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--keep-data-generations=3 \
--keep-data-days=7pg_rman validate --backup-path=/home/postgres/pgrman
查看備份集
pg_rman show -B /home/postgres/pgrman
添加一個條數據
INSERT INTO test (name, age) VALUES ('yiyi', 11);
停本地數據庫服務:
pg_ctl stop -D /opt/pgsql/postgresql/data
恢復
pg_rman restore \
--pgdata=/opt/pgsql/postgresql/data \
--backup-path=/home/postgres/pgrman \
--recovery-target-time="2024-07-05 12:50:21" \
--progress
啟動PostgreSQL服務
pg_ctl start -D /opt/pgsql/postgresql/data
增量備份恢復驗證
psql -d test
SELECT * FROM test;