25.3. 连续归档和时间点恢复(PITR)
第一步建立wal归档
wal_level配置成replica或更高
archive_mode为on
配置archive_command,在archive_command
中,%p
会被将要归档的文件路径所替代,而%f
只会被文件名所替代(路径名是相对于当前工作目录而言的,即集簇的数据目录)。
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f' # Unix
第二步,制作一个基础备份
可以用pg_basebackup工具,制作一个基础备份。
备份通过一个常规PostgreSQL连接制作,并且使用复制协议。该连接必须由一个超级用户或者一个具有REPLICATION
权限(第 21.2 节)的用户建立,并且pg_hba.conf
必须显式地允许该复制连接。该服务器还必须被配置,使max_wal_senders设置得足够高以留出至少一个会话用于备份以及一个用于WAL流(如果使用流)。
例子
要创建服务器mydbserver
的一个基础备份并将它存储在本地目录/usr/local/pgsql/data
中:
$
pg_basebackup -h mydbserver -D /usr/local/pgsql/data
要创建本地服务器的一个备份,为其中每一个表空间产生一个压缩过的 tar 文件,并且将它存储在目录backup
中,在运行期间显示一个进度报告:
$
pg_basebackup -D backup -Ft -z -P
要创建一个单一表空间本地数据库的备份并且使用bzip2压缩它:
$
pg_basebackup -D - -Ft -X fetch | bzip2 > backup.tar.bz2
(如果在该数据库中有多个表空间,这个命令将失败)。
要创建一个本地数据库的备份,其中/opt/ts
中的表空间被重定位到./backup/ts
:
$
pg_basebackup -D backup/data -T /opt/ts=$(pwd)/backup/ts
也可以使用低级api制作一个基础备份:
制作一个非排他低级备份:
1.确保wal归档被启用且正在工作。
2.用有运行pg_start_backup权力的用户连到服务器,发出命令: select pg_start_backup('label', false, false); #需要保持到备份结束。
第二个参数如果改为true,代表尽可能快地开始备份,将会发出一个立即的检查点并且使用尽可能多的io。
第三个参数如果改为true,表示要做一个非排他基础备份。
3.使用tar或者cpio执行备份。不需要停止正常的数据库操作。
4.在同一个连接中,发出命令: select * from pg_stop_backup(false); #这会终止备份模式。