Crunchy PostgreSQL在Kubernets/Openshift安装以后,可以通过yaml文件非常容易的配置自动备份和手动备份,自动备份是由Crunchy Postgres Operator创建了CronJobs控制在什么时间,执行什么备份,和Linux里面的Cronjob类似。 例如如下示例定义了自动备份的策略每周日 1am执行一个全量备份每周 周一到周六 1am 执行增量备份
spec: backups: pgbackrest: repos: - name: repo1 schedules: full: "0 1 * * 0" differential: "0 1 * * 1-6"
3种备份定义如下(1) full: A backup of your entire Postgres cluster. This is the largest of all of the backup types. (2) differential: A backup of all of the data since the last full backup. (3) incremental: A backup of all of the data since the last full, differential, or incremental backup. 对于手工备份,这里做3个实验来验证3种不同的备份 (full, differential, incremental)。 第一个实验:手工全量备份 yaml文件中的相关的设置部分
manual: repoName: repo1 options: - --type=full
第一次安装完成以后自动做一个full backup
$ oc get po NAME READY STATUS RESTARTS AGE demo-backup-r7fk-27shq 0/1 Completed 0 4m52s demo-instance1-2wkh-0 5/5 Running 0 6m34s demo-instance1-6hv6-0 5/5 Running 0 6m34s demo-pgbouncer-866898f6c4-wh7zf 2/2 Running 0 6m34s demo-repo-host-0 2/2 Running 0 6m34s
第一次手动full备份
$ oc annotate postgrescluster demo postgres-operator.crunchydata.com/pgbackrest-backup="$(date)" postgrescluster.postgres-operator.crunchydata.com/demo annotated $ oc get po NAME READY STATUS RESTARTS AGE demo-backup-qpf7-nhhvh 0/1 Completed 0 27s demo-backup-r7fk-27shq 0/1 Completed 0 5m25s demo-instance1-2wkh-0 5/5 Running 0 7m7s demo-instance1-6hv6-0 5/5 Running 0 7m7s demo-pgbouncer-866898f6c4-wh7zf 2/2 Running 0 7m7s demo-repo-host-0 2/2 Running 0 7m7s
第二次手动full备份,要加 --overwrite 选项才行
$ oc annotate postgrescluster demo --overwrite postgres-operator.crunchydata.com/pgbackrest-backup="$(date)" postgrescluster.postgres-operator.crunchydata.com/demo annotated $ oc get po NAME READY STATUS RESTARTS AGE demo-backup-c7vw-l4fg4 0/1 ContainerCreating 0 1s demo-backup-r7fk-27shq 0/1 Completed 0 7m23s demo-instance1-2wkh-0 5/5 Running 0 9m5s demo-instance1-6hv6-0 5/5 Running 0 9m5s demo-pgbouncer-866898f6c4-wh7zf 2/2 Running 0 9m5s demo-repo-host-0 2/2 Running 0 9m5s $ oc get po NAME READY STATUS RESTARTS AGE demo-backup-c7vw-l4fg4 0/1 Completed 0 27s demo-backup-r7fk-27shq 0/1 Completed 0 7m49s demo-instance1-2wkh-0 5/5 Running 0 9m31s demo-instance1-6hv6-0 5/5 Running 0 9m31s demo-pgbouncer-866898f6c4-wh7zf 2/2 Running 0 9m31s demo-repo-host-0 2/2 Running 0 9m31s
查看pgbackrest的备份信息,应该有3个备份信息 $ oc exec -it demo-repo-host-0 -c pgbackrest -- pgbackrest info
stanza: db status: ok cipher: none db (current) wal archive min/max (14): 000000010000000000000001/000000010000000000000008 full backup: 20230215-094253F timestamp start/stop: 2023-02-15 09:42:53 / 2023-02-15 09:44:44 wal start/stop: 000000010000000000000004 / 000000010000000000000004 database size: 37.0MB, database backup size: 37.0MB repo1: backup set size: 4.5MB, backup size: 4.5MB full backup: 20230215-094505F timestamp start/stop: 2023-02-15 09:45:05 / 2023-02-15 09:45:23 wal start/stop: 000000010000000000000006 / 000000010000000000000006 database size: 37MB, database backup size: 37MB repo1: backup set size: 4.5MB, backup size: 4.5MB full backup: 20230215-094728F timestamp start/stop: 2023-02-15 09:47:28 / 2023-02-15 09:47:44 wal start/stop: 000000010000000000000008 / 000000010000000000000008 database size: 37.2MB, database backup size: 37.2MB repo1: backup set size: 4.5MB, backup size: 4.5MB
实验二:differential 备份 修改yaml文件,改成
manual: repoName: repo1 options: - --type=diff
然后apply yaml文件。 执行和full backup同样的命令2次,可以通过 pgbackrest info查看备份的信息
$ oc exec -it demo-repo-host-0 -c pgbackrest -- pgbackrest info stanza: db status: ok cipher: none db (current) wal archive min/max (14): 000000010000000000000001/000000010000000000000008 full backup: 20230215-102129F timestamp start/stop: 2023-02-15 10:21:29 / 2023-02-15 10:22:42 wal start/stop: 000000010000000000000004 / 000000010000000000000004 database size: 36.9MB, database backup size: 36.9MB repo1: backup set size: 4.5MB, backup size: 4.5MB diff backup: 20230215-102129F_20230215-102455D timestamp start/stop: 2023-02-15 10:24:55 / 2023-02-15 10:25:21 wal start/stop: 000000010000000000000006 / 000000010000000000000006 database size: 37MB, database backup size: 6.5MB repo1: backup set size: 4.5MB, backup size: 1015.8KB backup reference list: 20230215-102129F diff backup: 20230215-102129F_20230215-102636D timestamp start/stop: 2023-02-15 10:26:36 / 2023-02-15 10:26:40 wal start/stop: 000000010000000000000008 / 000000010000000000000008 database size: 37.2MB, database backup size: 6.6MB repo1: backup set size: 4.5MB, backup size: 1019.6KB backup reference list: 20230215-102129F
实验三:Incremental 备份 修改yaml文件,改成
manual: repoName: repo1 options: - --type=incr
然后apply yaml文件。 执行和full backup同样的命令2次,可以通过 pgbackrest info查看备份的信息
$ oc exec -it demo-repo-host-0 -c pgbackrest -- pgbackrest info stanza: db status: ok cipher: none db (current) wal archive min/max (14): 000000010000000000000001/00000001000000000000000D full backup: 20230215-102129F timestamp start/stop: 2023-02-15 10:21:29 / 2023-02-15 10:22:42 wal start/stop: 000000010000000000000004 / 000000010000000000000004 database size: 36.9MB, database backup size: 36.9MB repo1: backup set size: 4.5MB, backup size: 4.5MB diff backup: 20230215-102129F_20230215-102455D timestamp start/stop: 2023-02-15 10:24:55 / 2023-02-15 10:25:21 wal start/stop: 000000010000000000000006 / 000000010000000000000006 database size: 37MB, database backup size: 6.5MB repo1: backup set size: 4.5MB, backup size: 1015.8KB backup reference list: 20230215-102129F diff backup: 20230215-102129F_20230215-102636D timestamp start/stop: 2023-02-15 10:26:36 / 2023-02-15 10:26:40 wal start/stop: 000000010000000000000008 / 000000010000000000000008 database size: 37.2MB, database backup size: 6.6MB repo1: backup set size: 4.5MB, backup size: 1019.6KB backup reference list: 20230215-102129F incr backup: 20230215-102129F_20230215-103608I timestamp start/stop: 2023-02-15 10:36:08 / 2023-02-15 10:36:10 wal start/stop: 00000001000000000000000B / 00000001000000000000000B database size: 38.0MB, database backup size: 1.7MB repo1: backup set size: 4.6MB, backup size: 96.8KB backup reference list: 20230215-102129F, 20230215-102129F_20230215-102636D incr backup: 20230215-102129F_20230215-103656I timestamp start/stop: 2023-02-15 10:36:56 / 2023-02-15 10:36:58 wal start/stop: 00000001000000000000000D / 00000001000000000000000D database size: 38MB, database backup size: 1.7MB repo1: backup set size: 4.6MB, backup size: 98.4KB backup reference list: 20230215-102129F, 20230215-102129F_20230215-102636D, 20230215-102129F_20230215-103608I
