简介:
这种备份方法跟pg_basebackup不同,被称为非排他低级基础备份。
非排他:就是备份的时候不影响其他的工作
低级基础:就是使用低级API来实现。像pg_basebackup是全自动的;而pg_start_backup需要你自己指定什么时候开始,什么时候结束,不是全自动的,被称为低级API
作用:
使用本命令是为了做一个基础的备份。那就分为3步。
1. pg_start_backup
2. 进行文件系统级别的备份(用tar、cpio、rsync等命令,非pg_dump、pg_dumpall)
3. pg_stop_backup
特性:
1. 允许其他并发备份进行,即包括其他pg_start_backup的备份,也包括pg_basebackup的备份;
2. wal归档启用并正常工作
3. 使用pg_start_backup的用户必须有该函数的权限,和连接到服务器上的权限,一般用postgres用户
4. 不在乎连接到哪个数据库,只要能发出命令就行。
5. 调用pg_start_backup的会话连接必须保持到备份结束,否则备份将自动被终止。
step1:
select pg_start_backup('label',false,false);
label:唯一标识这次备份操作的任意字符串
第二个参数:默认情况下(就是设置为false),pg_start_backup需要较长的时间来完成。因为会执行一个检查点,该检查点所需要的IO将会分散到一段时间内,默认是你检查点间隔(checkpoint_completion_target参数)的一半(前面参数我的PG是0.5,那这里一般就是0.25),可以最小化对其他会话查询的影响。如果你想尽快的开始备份,则把false改为true。这将会立即发出一个检查点并且使用尽可能多的I/O。
第三个参数:默认false的情况下,意思是告诉pg_start_backup开始一次非排他基础备份,默认就行
step2:
然后进行文件系统的备份,tar或者cpio或者rsync
step3:
然后停止
select pg_stop_backup();
该函数会终止备份模式,并且执行一个自动切换到下一个wal段。进行切换的原因是将在备份期间生成的最新wal段文件安排为可归档。
这样就完成了一次基础备份。该基础备份跟pg_basebackup差不多,不过pg_basebackup都封装好了,也不用你用操作系统命令进行备份,他自己就给你搞完了。
当你进行step2的时候,确保你的备份包含了$PGDATA下的所有文件。如果你使用了不在此目录下的表空间,也得把这些表空间备份。并且确保你的备份将表空间的软连接归档为链接,否则恢复过程将破坏你的表空间。