简介
pg_probackup是一个管理PostgreSQL数据库集群备份和恢复的工具。它的设计目的是对PostgreSQL实例执行定期的完整和增量的页面级备份,以便在发生故障时恢复服务器,与oracle rman类似,pg_probackup支持postgresql-9.5及更高版本。
pg_probackup优点:
1.增量备份:支持三种不同模式(PAGE,DELTA,PTRACK)
2.增量合成:将增量备份合并到全量备份形成新的全量而不进行实际的数据恢复
3.数据有效性自动/手动检测(开启data-checksum)
4.备份验证:基于VALIDATE指令,可指定备份集模拟数据恢复
5.历史过期数据处理
6.并行化:支持backup、restore、merge、delete、validate、checkdb
7.备份数据压缩保存
8.Deduplication:重复数据不备份(比如_vm或者_fsm)
9.支持SSH远程备份恢复
10.支持从standby备份
11.数据存储在外部目录:与PGDATA保持独立
pg_probackup 备份模式(backup_mode):
全量备份:
FULL模式:全量备份会将数据库集下所有的数据文件进行备份
增量备份:
DELTA模式 :在该模式下, pg_probackup 会扫描所有的数据目录文件,然后将上一次备份后发生改变的数据页进行拷贝备份。这种模式下增量备份的IO消耗基本等同于全量备份。
PAGE模式 :在该模式下, pg_probackup仅会扫描备份上一次备份结束时刻之后的所有WAL归档日志,读取日志中数据页的变更。这种模式下的增量备份必须配置持续归档(wal_level > minimal 、archive_mode = on/always、archive_command 使用 pg_probackup进行archive-push 归档)。
PTRACK模式 :在该模式下,pg_probackup 会实时跟踪源备份实例端数据页的变化,对于距上一次备份后发生更新的数据页,将其记录在 bitmap 中,以此来加快增量备份的时间。该模式下不需要关注WAL日志归档的设置,增量备份时间相对于DELTA更快,但是由于需要实时跟踪发生变化的数据页,所以对源端数据库服务器是有一定的资源消耗的。仅支持postgre pro standard和postgre pro Enterprise
增量备份一般选择PAGE模式
安装部署:
本次演示基于centos7.3 postgresql-9.6.20单机环境
参考文档:
https://postgrespro.com/docs/postgrespro/9.6/app-pgprobackup#pbk-restore
https://github.com/postgrespro/pg_probackup
RPM方式安装pg_probackup:
rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpmyum install pg_probackup-9.6yum install pg_probackup-9.6-debuginfo
配置操作:
初始化备份目录
pg_probackup init -B backup_dir
[postgres@localhost ~]$ pg_probackup-9.6 init -B postgresql/backup/INFO: Backup catalog '/postgresql/backup' successfully inited
创建备份实例
pg_probackup add-instance -B backup_dir -D data_dir --instance instance_name [remote_options]
[postgres@localhost ~]$ pg_probackup-9.6 add-instance -B postgresql/backup/ -D postgresql/data/ --instance pgbakINFO: Instance 'pgbak' successfully inited
备份恢复用户配置:
for postgresql-9.6
创建备份恢复用户backup
psql>
BEGIN;CREATE ROLE backup WITH LOGIN;GRANT USAGE ON SCHEMA pg_catalog TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean) TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_xlog_replay_location() TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup;COMMIT;
配置后修改pg_hba.conf
配置持续归档:
vim postgresql/data/postgresql.confarchive_command = 'pg_probackup archive-push -B postgresql/backup --instance pgbak --wal-file-name=%f'
如果不想使用pg_probackup指令,需要将WAL归档路径指向backup_dir/wal/instance_name目录下
全量备份
su - postgres
pg_probackup backup -B backup_dir --instance instance_name -b backup_mode
[postgres@localhost ~]$ pg_probackup-9.6 backup -B postgresql/backup/ --instance pgbak -b FULL -U backup -WINFO: Backup start, pg_probackup version: 2.4.4, instance: pgbak, backup ID: QKFRRR, backup mode: FULL, wal mode: ARCHIVE, remote: false, compress-algorithm: none, compress-level: 1Password for user backup:WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: pg_probackup archive-push WAL file: 00000001000000000000001E, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 18msINFO: pg_probackup archive-push WAL file: 00000001000000000000001F, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 12msINFO: Wait for WAL segment postgresql/backup/wal/pgbak/00000001000000000000001F to be archivedINFO: PGDATA size: 29MBINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 0LOG: restore point "pg_probackup, backup_id QKFRRR" created at 0/20000090STATEMENT: SELECT pg_catalog.pg_create_restore_point($1)INFO: pg_probackup archive-push WAL file: 00000001000000000000001F.00000028.backup, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 1msINFO: pg_probackup archive-push WAL file: 000000010000000000000020, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 29msINFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 1sINFO: Validating backup QKFRRRINFO: Backup QKFRRR data files are validINFO: Backup QKFRRR resident size: 29MBINFO: Backup QKFRRR completed
若initdb时没有开启data-checksum,则会出现:
WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.
启用数据校验将会在备份期间,读取每一个page时计算其checksum信息并与page header中的checksum值比对。开启数据校验将保证备份期间没有损坏的页面。
增量备份
pg_probackup backup -B backup_dir --instance instance_name -b backup_mode
[postgres@localhost ~]$ pg_probackup-9.6 backup -B postgresql/backup/ --instance pgbak -b PAGE -U backup -WINFO: Backup start, pg_probackup version: 2.4.4, instance: pgbak, backup ID: QKFX3V, backup mode: PAGE, wal mode: ARCHIVE, remote: false, compress-algorithm: none, compress-level: 1Password for user backup:WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: pg_probackup archive-push WAL file: 000000010000000000000021, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 34msINFO: pg_probackup archive-push WAL file: 000000010000000000000022, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 32msINFO: Wait for WAL segment postgresql/backup/wal/pgbak/000000010000000000000022 to be archivedINFO: Parent backup: QKFRRRINFO: PGDATA size: 29MBINFO: Extracting pagemap of changed blocksINFO: Pagemap successfully extracted, time elapsed: 0 secINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 0LOG: restore point "pg_probackup, backup_id QKFX3V" created at 0/23000090STATEMENT: SELECT pg_catalog.pg_create_restore_point($1)INFO: pg_probackup archive-push WAL file: 000000010000000000000022.00000028.backup, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 0msINFO: pg_probackup archive-push WAL file: 000000010000000000000023, threads: 1/1, batch: 1/1, compression: noneINFO: pg_probackup archive-push completed successfully, pushed: 1, skipped: 0, time elapsed: 31msINFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 0INFO: Validating backup QKFX3VINFO: Backup QKFX3V data files are validINFO: Backup QKFX3V resident size: 148kBINFO: Backup QKFX3V completed
查看备份
pg_probackup show -B backup_dir[--help] [--instance instance_name [-i backup_id | --archive]] [--format=plain|json]
[postgres@localhost ~]$ pg_probackup-9.6 show -B postgresql/backup/BACKUP INSTANCE 'pgbak'===================================================================================================================================Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status===================================================================================================================================pgbak 9.6 QKFX3V 2020-11-27 13:40:47+08 PAGE ARCHIVE 1/1 6s 148kB 16MB 1.00 0/22000028 0/230000B8 OKpgbak 9.6 QKFRRR 2020-11-27 11:45:31+08 FULL ARCHIVE 1/0 7s 29MB 16MB 1.00 0/1F000028 0/200000B8 OK
查看备份明细
pg_probackup show -B backup_dir --instance instance_name -i backup_id
[postgres@localhost ~]$ pg_probackup-9.6 show -B postgresql/backup/ -i QKFRRR --instance pgbak#Configurationbackup-mode = FULLstream = falsecompress-alg = nonecompress-level = 1from-replica = false#Compatibilityblock-size = 8192xlog-block-size = 8192checksum-version = 0program-version = 2.4.4server-version = 9.6#Result backup infotimelineid = 1start-lsn = 0/1F000028stop-lsn = 0/200000B8start-time = '2020-11-27 11:45:27+08'end-time = '2020-11-27 11:45:34+08'recovery-xid = 1786recovery-time = '2020-11-27 11:45:31+08'data-bytes = 30378907wal-bytes = 16777216uncompressed-bytes = 30354405pgdata-bytes = 30354182status = OKprimary_conninfo = 'user=backup port=5432 sslmode=disable sslcompression=1 krbsrvname=postgres'content-crc = 687105944
查看归档明细
pg_probackup show -B backup_dir [--instance instance_name] --archive --format=json
[postgres@localhost ~]$ pg_probackup-9.6 show -B /postgresql/backup/ --instance pgbak --archive --format=json[{"instance": "pgbak","timelines": [{"tli": 1,"parent-tli": 0,"switchpoint": "0/0","min-segno": "000000010000000000000001","max-segno": "000000010000000000000023","n-segments": 35,"size": 587202560,"zratio": 1.00,"closest-backup-id": "","status": "OK","lost-segments": [],"backups": [{"id": "QKFX3V","parent-backup-id": "QKFRRR","backup-mode": "PAGE","wal": "ARCHIVE","compress-alg": "none","compress-level": 1,"from-replica": "false","block-size": 8192,"xlog-block-size": 8192,"checksum-version": 0,"program-version": "2.4.4","server-version": "9.6","current-tli": 1,"parent-tli": 1,"start-lsn": "0/22000028","stop-lsn": "0/230000B8","start-time": "2020-11-27 13:40:43+08","end-time": "2020-11-27 13:40:49+08","recovery-xid": 1788,"recovery-time": "2020-11-27 13:40:47+08","data-bytes": 151885,"wal-bytes": 16777216,"uncompressed-bytes": 151775,"pgdata-bytes": 30354182,"primary_conninfo": "user=backup port=5432 sslmode=disable sslcompression=1 krbsrvname=postgres","status": "OK","content-crc": 3642602883},{"id": "QKFRRR","backup-mode": "FULL","wal": "ARCHIVE","compress-alg": "none","compress-level": 1,"from-replica": "false","block-size": 8192,"xlog-block-size": 8192,"checksum-version": 0,"program-version": "2.4.4","server-version": "9.6","current-tli": 1,"parent-tli": 0,"start-lsn": "0/1F000028","stop-lsn": "0/200000B8","start-time": "2020-11-27 11:45:27+08","end-time": "2020-11-27 11:45:34+08","recovery-xid": 1786,"recovery-time": "2020-11-27 11:45:31+08","data-bytes": 30378907,"wal-bytes": 16777216,"uncompressed-bytes": 30354405,"pgdata-bytes": 30354182,"primary_conninfo": "user=backup port=5432 sslmode=disable sslcompression=1 krbsrvname=postgres","status": "OK","content-crc": 687105944}]}]}]
增量合成(merge)
为了防止过多的增量备份集占用过多的备份空间,同时为了方便管理,可以将指定的增量备份和全量备份合并为一个新的全量备份
pg_probackup merge -B backup_dir --instance instance_name -i backup_id
backup_id为需要合成的增量备份id
[postgres@localhost ~]$ pg_probackup-9.6 merge -B /postgresql/backup/ --instance pgbak -i QKFX3VINFO: Merge startedINFO: Merging backup QKFX3V with parent chainINFO: Validate parent chain for backup QKFX3VINFO: Validating backup QKFRRRINFO: Backup QKFRRR data files are validINFO: Validating backup QKFX3VINFO: Backup QKFX3V data files are validINFO: Start merging backup filesINFO: Backup files are successfully merged, time elapsed: 0INFO: Delete: QKFX3V 2020-11-27 13:40:47+08INFO: Rename merged full backup QKFRRR to QKFX3VINFO: Validating backup QKFX3VINFO: Backup QKFX3V data files are validINFO: Merge of backup QKFX3V completed
查看备份列表:
[postgres@localhost ~]$ pg_probackup-9.6 show -B /postgresql/backup/BACKUP INSTANCE 'pgbak'==================================================================================================================================Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status==================================================================================================================================pgbak 9.6 QKFX3V 2020-11-27 13:40:47+08 FULL ARCHIVE 1/0 0 29MB 16MB 1.00 0/22000028 0/230000B8 OK
检测备份集可用性
pg_probackup validate -B backup_dir --instance instance_name -i backupid [recovery target option]
例如检查是否能将备份集应用WAL恢复到最新的状态
[postgres@localhost ~]$ pg_probackup-9.6 validate -B /postgresql/backup/ --instance pgbak --recovery-target=latestINFO: Validate backups of the instance 'pgbak'INFO: Validating backup QKFX3VINFO: Backup QKFX3V data files are validINFO: Backup QKFX3V WAL segments are validINFO: All backups are valid
如示:通过检测备份集QKFX3V可以应用WAL恢复到最新状态
恢复
pg_probackup restore -B backup_dir --instance instance_name[--help] [-D data_dir] [-i backup_id] [-j num_threads] [--progress] [-T OLDDIR=NEWDIR] [--external-mapping=OLDDIR=NEWDIR] [--skip-external-dirs] [-R | --restore-as-replica] [--no-validate] [--skip-block-validation] [--force] [--no-sync] [--restore-command=cmdline] [--primary-conninfo=primary_conninfo] [-S | --primary-slot-name=slot_name] [recovery_target_options] [logging_options] [remote_options] [partial_restore_options] [remote_wal_archive_options]
恢复前保证指定的数据目录为空,否则会报错:
[postgres@localhost ~]$ pg_probackup-9.6 restore -B /postgresql/backup/ --instance pgbak -D /postgresql/data/ recovery-target=latestERROR: Restore destination is not empty: "/postgresql/data"
清空数据目录后再次恢复:
pg_probackup-9.6 restore -B /postgresql/backup/ --instance pgbak -D /postgresql/data/ recovery-target=latestINFO: Validating backup QKFX3VINFO: Backup QKFX3V data files are validINFO: Backup QKFX3V WAL segments are validINFO: Backup QKFX3V is valid.INFO: Restoring the database from backup at 2020-11-27 13:40:43+08INFO: Start restoring backup files. PGDATA size: 29MBINFO: Backup files are restored. Transfered bytes: 29MB, time elapsed: 0INFO: Restore incremental ratio (less is better): 100% (29MB/29MB)INFO: Syncing restored files to diskINFO: Restored backup files are synced, time elapsed: 1sINFO: Restore of backup QKFX3V completed.
恢复后正常起库即可:
pg_ctl -D /postgresql/data start
测试
pg_proabckup工具为postgresql数据库的备份恢复管理工具
测试目的:
本次测试pg_probackup工具的delta模式和page模式的备份性能差异
测试准备:
准备10亿条数据(数据大小146G):
pgbench -i -s 10000 -U backup -h 127.0.0.1 pgbenchpgbench=# \dtList of relationsSchema | Name | Type | Owner--------+------------------+-------+--------public | pgbench_accounts | table | backuppublic | pgbench_branches | table | backuppublic | pgbench_history | table | backuppublic | pgbench_tellers | table | backup(4 rows)pgbench=# select count(*) from pgbench_accounts;count------------1000000000(1 row)
磁盘占用:
[postgres@ecos75r018-meijia-31-150 ~]$ df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 7.5G 0 7.5G 0% devtmpfs 7.5G 12K 7.5G 1% dev/shmtmpfs 7.5G 9.2M 7.5G 1% runtmpfs 7.5G 0 7.5G 0% sys/fs/cgroup/dev/mapper/vg00-lv_root 20G 9.9G 8.8G 53%/dev/sda1 501M 335M 130M 73% boot/dev/sda2 524M 12K 524M 1% boot/efi/dev/sdb1 296G 147G 134G 53% postgresql/data/dev/sdc1 296G 65M 281G 1% postgresql/backuptmpfs 1.5G 0 1.5G 0% run/user/0/dev/sdd1 296G 122G 160G 44% postgresql/archive
全量备份(DELTA)
pg_probackup-12 backup -B postgresql/backup/ --instance pgbak -j 4 -U probackup --stream -b full
[postgres@ecos75r018-meijia-31-150 postgresql]$ pg_probackup-12 backup -B postgresql/backup/ --instance pgbak -j 4 -U probackup --stream -b full --temp-slotINFO: Backup start, pg_probackup version: 2.4.8, instance: pgbak, backup ID: QLOIL1, backup mode: FULL, wal mode: STREAM, remote: false, compress-algorithm: none, compress-level: 1WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: PGDATA size: 146GBINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 33m:19s2020-12-21 16:12:20.388 CST [24069] LOG: restore point "pg_probackup, backup_id QLOIL1" created at 23/C00001782020-12-21 16:12:20.388 CST [24069] STATEMENT: SELECT pg_catalog.pg_create_restore_point($1)INFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 15sINFO: Validating backup QLOIL1INFO: Backup QLOIL1 data files are validINFO: Backup QLOIL1 resident size: 146GBINFO: Backup QLOIL1 completed
时间:2020/12/21 15:39 ~ 2020/12/18 16:31
ps:出现如下错误,需要配置pg lib库环境变量:
export LD_LIBRARY_PATH=/usr/local/postgresql-12.4/lib
ERROR: could not connect to database postgres: could not connect to server: No such file or directoryIs the server running locally and acceptingconnections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
增量数据准备:
插入一亿条增量数据(约15G数据)
pgbench -i -s 1000 -U probackup -h 127.0.0.1 pgbench_inc
磁盘占用:
[postgres@ecos75r018-meijia-31-150 postgresql]$ df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 7.5G 0 7.5G 0% devtmpfs 7.5G 12K 7.5G 1% /dev/shmtmpfs 7.5G 9.1M 7.5G 1% /runtmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup/dev/mapper/vg00-lv_root 20G 9.9G 8.8G 53% //dev/sda1 501M 335M 130M 73% /boot/dev/sda2 524M 12K 524M 1% /boot/efitmpfs 1.5G 0 1.5G 0% /run/user/0/dev/sdb1 296G 162G 119G 58% /postgresql/data/dev/sdc1 296G 147G 134G 53% /postgresql/backup/dev/sdd1 296G 13G 268G 5% /postgresql/archive
增量备份(DELTA)
pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -j 4 -U probackup --stream -b delta --temp-slot
[postgres@ecos75r018-meijia-31-150 postgresql]$ pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -j 4 -U probackup --stream -b delta --temp-slotINFO: Backup start, pg_probackup version: 2.4.8, instance: pgbak, backup ID: QLOMCV, backup mode: DELTA, wal mode: STREAM, remote: false, compress-algorithm: none, compress-level: 1WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: Parent backup: QLOIL1INFO: PGDATA size: 161GBINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 31m:29s2020-12-21 17:32:00.310 CST [30184] LOG: restore point "pg_probackup, backup_id QLOMCV" created at 26/C10001782020-12-21 17:32:00.310 CST [30184] STATEMENT: SELECT pg_catalog.pg_create_restore_point($1)INFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 0INFO: Validating backup QLOMCVINFO: Backup QLOMCV data files are validINFO: Backup QLOMCV resident size: 15GBINFO: Backup QLOMCV completed
时间:2020/12/21 17:00 ~ 2020/12/21 17:35
全量备份(PAGE)
修改postgresql.conf
vi postgresql.confarchive_command='pg_probackup-12 archive-push -B /postgresql/backup --instance pgbak --wal-file-name=%f'
删除增量库pgbench_inc
postgres=# drop database pgbench_inc;
pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -j 4 -U probackup -b full
[postgres@ecos75r018-meijia-31-150 ~]$ pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -j 4 -U probackup -b fullINFO: Backup start, pg_probackup version: 2.4.8, instance: pgbak, backup ID: QLILZE, backup mode: FULL, wal mode: ARCHIVE, remote: false, compress-algorithm: none, compress-level: 1WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: Wait for WAL segment /postgresql/backup/wal/pgbak/0000000100000020000000AE to be archivedINFO: PGDATA size: 146GBINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 38m:52sINFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedvINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 14sINFO: Validating backup QLILZEINFO: Backup QLILZE data files are validINFO: Backup QLILZE resident size: 146GBINFO: Backup QLILZE completed
时间:2020/12/22 08:57 ~ 2020/12/22 09:54
增量数据准备:
插入一亿条增量数据(约15G数据)
pgbench -i -s 1000 -U probackup -h 127.0.0.1 pgbench_inc
磁盘占用:
[postgres@ecos75r018-meijia-31-150 ~]$ df -hFilesystem Size Used Avail Use% Mounted ondevtmpfs 7.5G 0 7.5G 0% /devtmpfs 7.5G 12K 7.5G 1% /dev/shmtmpfs 7.5G 18M 7.5G 1% /runtmpfs 7.5G 0 7.5G 0% /sys/fs/cgroup/dev/mapper/vg00-lv_root 20G 9.9G 8.8G 53% //dev/sda1 501M 335M 130M 73% /boot/dev/sda2 524M 12K 524M 1% /boot/efi/dev/sdb1 296G 162G 119G 58% /postgresql/data/dev/sdc1 296G 159G 122G 57% /postgresql/backuptmpfs 1.5G 0 1.5G 0% /run/user/0/dev/sdd1 296G 122G 159G 44% /postgresql/archive
增量备份(PAGE)
pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -b PAGE -U probackup
[postgres@ecos75r018-meijia-31-150 ~]$ pg_probackup-12 backup -B /postgresql/backup/ --instance pgbak -b page -j 4 -U probackupINFO: Backup start, pg_probackup version: 2.4.8, instance: pgbak, backup ID: QLPZ42, backup mode: PAGE, wal mode: ARCHIVE, remote: false, compress-algorithm: none, compress-level: 1WARNING: This PostgreSQL instance was initialized without data block checksums. pg_probackup have no way to detect data block corruption without them. Reinitialize PGDATA with option '--data-checksums'.INFO: Wait for WAL segment /postgresql/backup/wal/pgbak/0000000100000029000000C8 to be archivedINFO: Parent backup: QLPUN6INFO: PGDATA size: 161GBINFO: Extracting pagemap of changed blocksINFO: Pagemap successfully extracted, time elapsed: 142 secINFO: Start transferring data filesINFO: Data files are transferred, time elapsed: 5m:16sINFO: wait for pg_stop_backup()INFO: pg_stop backup() successfully executedINFO: Syncing backup files to diskINFO: Backup files are synced, time elapsed: 8sINFO: Validating backup QLPZ42INFO: Backup QLPZ42 data files are validINFO: Backup QLPZ42 resident size: 15GBINFO: Backup QLPZ42 completed
时间:2020/12/22 10:33 ~ 2020/12/22 10:44
测试结果:
本次只提供了测试流程和其中一次测试结果:
| 模式 | DELTA | PAGE |
| 全量备份 |
数据量:146G/10亿 总耗时:52min 数据传输:34min 数据验证:18min |
数据量:146G/10亿 总耗时:57min 数据传输:39min 数据验证:18min |
| 增量备份 |
数据量:15G/1亿 总耗时:35min 数据传输:31min 数据验证:4min |
数据量:15G/1亿 总耗时:11min map+数据传输:8min 数据验证:3min |
通过本次测试发现,delta模式与page模式全量备份差异明显,增量备份方面,page模式比delta模式备份效率高3倍(在这个数据量级下,数据量越大,差异或许更大)

1655

被折叠的 条评论
为什么被折叠?



