- 使用低级API备份
三部曲:
pg_start_backup
用tar或者cp自己备份数据库文件
pg_stop_backup
- pg_basebackup工具
pg_basebackup=pg_start_backup+自动备份(本质还是通过tar或者cp拷贝)+pg_stop_backup
参考URL:https://www.postgresql.org/docs/9.6/app-pgbasebackup.html
参数个别说明:
-F, --format=p|t output format (plain (default), tar)
指定输出格式:p原样输出,即把主数据库中的各个数据文件,配置文件、目录结构都完全一样的写到备份目录;
t 把输出的备份文件打包到一个tar文件中。
postgres还原测试:如果服务器上有最新的归档日志是可以恢复到最新的时间点
测试手法大概是:
1 A机器是正在使用的机器,B机器是备份机(每天晚上备份一次)
2 A机器如果在晚上备份之前挂了,可以拿着归档日志恢复到B机器
测试数据以及测试步骤:
1 备份(通过pg_basebackup,或者低级API备份都可以)
2 A机器里插入测试数据(随便什么测试数据都可以,只为了还原时候确认)
CREATE TABLE COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL
);
INSERT INTO COMPANY VALUES (1, ‘Paul’, 32);
INSERT INTO COMPANY VALUES (2, ‘John’, 21);
INSERT INTO COMPANY VALUES (3, ‘Anna’, 30);
INSERT INTO COMPANY VALUES (4, ‘Lisa’, 35);
INSERT INTO COMPANY VALUES (5, ‘Tina’, 22);
psql
postgres=# \d //查询所有表
リレーションの一覧
スキーマ | 名前 | 型 | 所有者
----------±---------±---------±---------
public | color | テーブル | postgres
public | t_kenyon | テーブル | postgres
(2 行)
-bash-4.2$ psql -l //列出存在的数据库,然后退出
データベース一覧
名前 | 所有者 | エンコーディング | 照合順序 | Ctype(変換演算子) | アクセス権
-----------±---------±-----------------±---------±------------------±----------------------
postgres | postgres | SQL_ASCII | C | C |
template0 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | SQL_ASCII | C | C | =c/postgres +
| | | | | postgres=CTc/postgres
(3 行)
3 过一段时间之后拷贝归档日志到B机器(至少checkpoint一次之后的时间,或者手动checkpoint)
4 删除B机器的pg_xlog
5 recovery.conf设定
restore_command = 'cp /var/lib/pgsql/data/archives/%f %p' // 按照实际你的归档目录设定
recovery_target_time = ‘2017-01-01 12:34:56 JST’ // 如果要恢复到某一个时间设置此参数
6 确认
A机器插入的数据,B机器恢复之后也能确认到
参考:https://developer.aliyun.com/article/357505