pg_basebackup备份与WAL日志切换
如下,pg_basebackup在执行的过程,如果使用了-X method--wal-method=为s或者f,则会触发两次WAL日志切换,分别是备份开始的时候触发一次,备份完成的时候触发一次,这两个WAL日志并没有写入备份文件,只有第一次触发之后生成的WAL日志00000001000000000000006E会写入备份文件,如果用到该备份和WAL日志做恢复,会用到00000001000000000000006E文件之后的归档WAL日志。method
pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
如下是备份的PostgreSQL实例的wal日志信息
如下是解压缩备份文件中的wal中的信息

操作日志
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
000000010000000000000063
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~# pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
000000010000000000000065
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~# pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
000000010000000000000067
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~# pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
000000010000000000000069
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~# pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
00000001000000000000006B
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~# pg_basebackup -U postgres -h 127.0.0.1 -p 9700 -P -v -Ft -z -Z5 -Xs -D /usr/local/pgbackup/full_$(date +"%Y%m%d%H%M%S") 2>&1 | ts '[%Y-%m-%d %H:%M:%S]' | tee >> /usr/local/pgbackup/backup_log.log
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:~# psql -U postgres -d postgres -h 127.0.0.1 -p 9700 -c "SELECT pg_walfile_name(pg_current_wal_lsn());" pg_walfile_name
--------------------------
00000001000000000000006D
(1 row)
root@iZ7xv55xixens4mlf4jusqZ:~#
root@iZ7xv55xixens4mlf4jusqZ:/usr/local/pgbackup# cd full_20250909134649/
root@iZ7xv55xixens4mlf4jusqZ:/usr/local/pgbackup/full_20250909134649# ll
total 3224
drwx------ 2 root root 4096 Sep 9 13:46 ./
drwx------ 11 postgres postgres 4096 Sep 9 13:46 ../
-rw------- 1 root root 139678 Sep 9 13:46 backup_manifest
-rw------- 1 root root 3128878 Sep 9 13:46 base.tar.gz
-rw------- 1 root root 17091 Sep 9 13:46 pg_wal.tar.gz
root@iZ7xv55xixens4mlf4jusqZ:/usr/local/pgbackup/full_20250909134649# tar -xvzf pg_wal.tar.gz
00000001000000000000006E
root@iZ7xv55xixens4mlf4jusqZ:/usr/local/pgbackup/full_20250909134649# ll
total 19468
drwx------ 2 root root 4096 Sep 9 13:55 ./
drwx------ 11 postgres postgres 4096 Sep 9 13:46 ../
-rw------- 1 postgres postgres 16777216 Sep 9 13:46 00000001000000000000006E
-rw------- 1 root root 3128878 Sep 9 13:46 base.tar.gz
-rw------- 1 root root 17091 Sep 9 13:46 pg_wal.tar.gz
root@iZ7xv55xixens4mlf4jusqZ:/usr/local/pgbackup/full_20250909134649#

pg_basebackup本质上还是pg_backup_start和pg_backup_stop,这两个内部命令分别做了一次wal日志文件的Switch,第一次Switch的文件做了归档,然后生成一个wal日志,同时开始备份,备份过程中产生的wal日志就位于这个wal文件中,待备份完成后在此Switch wal日志,上一个wal日志就会包含在备份文件中。


参考:
https://www.postgresql.org/docs/current/app-pgbasebackup.html
浙公网安备 33010602011771号