专注,勤学,慎思。戒骄戒躁,谦虚谨慎

just do it

导航

pg_basebackup备份与WAL日志切换

如下,pg_basebackup在执行的过程,如果使用了-X method--wal-method=method为s或者f,则会触发两次WAL日志切换,分别是备份开始的时候触发一次,备份完成的时候触发一次,这两个WAL日志并没有写入备份文件,只有第一次触发之后生成的WAL日志00000001000000000000006E会写入备份文件,如果用到该备份和WAL日志做恢复,会用到00000001000000000000006E文件之后的归档WAL日志。

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日志信息
image

如下是解压缩备份文件中的wal中的信息

image

操作日志

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#



image

 

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

image
image
参考:

https://www.postgresql.org/docs/current/app-pgbasebackup.html

https://www.interdb.jp/pg/pgsql10/01.html

posted on 2025-09-09 14:28  MSSQL123  阅读(23)  评论(0)    收藏  举报