postgresql 物理备份 pg_basebackup

os:centos 7.4
postgresql:10.4

pg_basebackup 可以用来做数据库的备份,也可以用来搭建slaver。

pg_basebackup --help

$ which pg_basebackup
/usr/pgsql-10/bin/pg_basebackup

$ pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.

Usage:
  pg_basebackup [OPTION]...

Options controlling the output:
  -D, --pgdata=DIRECTORY receive base backup into directory
  -F, --format=p|t       output format (plain (default), tar)
  -r, --max-rate=RATE    maximum transfer rate to transfer data directory
                         (in kB/s, or use suffix "k" or "M")
  -R, --write-recovery-conf
                         write recovery.conf for replication
  -S, --slot=SLOTNAME    replication slot to use
      --no-slot          prevent creation of temporary replication slot
  -T, --tablespace-mapping=OLDDIR=NEWDIR
                         relocate tablespace in OLDDIR to NEWDIR
  -X, --wal-method=none|fetch|stream
                         include required WAL files with specified method
      --waldir=WALDIR    location for the write-ahead log directory
  -z, --gzip             compress tar output
  -Z, --compress=0-9     compress tar output with given compression level

General options:
  -c, --checkpoint=fast|spread
                         set fast or spread checkpointing
  -l, --label=LABEL      set backup label
  -n, --no-clean         do not clean up after errors
  -N, --no-sync          do not wait for changes to be written safely to disk
  -P, --progress         show progress information
  -v, --verbose          output verbose messages
  -V, --version          output version information, then exit
  -?, --help             show this help, then exit

Connection options:
  -d, --dbname=CONNSTR   connection string
  -h, --host=HOSTNAME    database server host or socket directory
  -p, --port=PORT        database server port number
  -s, --status-interval=INTERVAL
                         time between status packets sent to server (in seconds)
  -U, --username=NAME    connect as specified database user
  -w, --no-password      never prompt for password
  -W, --password         force password prompt (should happen automatically)

Report bugs to <pgsql-bugs@postgresql.org>.

基础备份

$ pg_basebackup -h localhost -D /tmp/pgsql_backup/ -Ft -R -z -v --checkpoint=fast
pg_basebackup: initiating base backup, waiting for checkpoint to complete
pg_basebackup: checkpoint completed
pg_basebackup: write-ahead log start point: 4/64000060 on timeline 1
pg_basebackup: starting background WAL receiver
pg_basebackup: write-ahead log end point: 4/64000168
pg_basebackup: waiting for background process to finish streaming ...
pg_basebackup: base backup completed
 
 
$ ls -l /tmp/pgsql_backup/
total 490436
-rw-rw-r-- 1 postgres postgres 502112605 Aug 26 11:36 base.tar.gz
-rw------- 1 postgres postgres     88541 Aug 26 11:36 pg_wal.tar.gz


postgresql log 输出

2018-08-26 11:34:54.121 CST,"postgres","",3032,"localhost:56964",5b821fdd.bd8,2,"authentication",2018-08-26 11:34:53 CST,4/117,0,LOG,00000,"replication connection authorized: user=postgres",,,,,,,,,""
2018-08-26 11:34:54.122 CST,"postgres","",3032,"localhost:56964",5b821fdd.bd8,3,"idle",2018-08-26 11:34:53 CST,4/0,0,LOG,00000,"received replication command: IDENTIFY_SYSTEM",,,,,,,,,"pg_basebackup"
2018-08-26 11:34:54.122 CST,"postgres","",3032,"localhost:56964",5b821fdd.bd8,4,"idle",2018-08-26 11:34:53 CST,4/0,0,LOG,00000,"received replication command: BASE_BACKUP LABEL 'pg_basebackup base backup'   FAST NOWAIT  TABLESPACE_MAP",,,,,,,,,"pg_basebackup"
2018-08-26 11:34:54.686 CST,,,1678,,5b821001.68e,1,,2018-08-26 10:27:13 CST,,0,LOG,00000,"checkpoint starting: immediate force wait",,,,,,,,,""
2018-08-26 11:34:54.704 CST,,,1678,,5b821001.68e,2,,2018-08-26 10:27:13 CST,,0,LOG,00000,"checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 1 removed, 0 recycled; write=0.000 s, sync=0.000 s, total=0.017 s; sync files=0, longest=0.000 s, average=0.000 s; distance=37236 kB, estimate=37236 kB",,,,,,,,,""
2018-08-26 11:34:54.788 CST,,,3033,"localhost:56966",5b821fde.bd9,1,"",2018-08-26 11:34:54 CST,,0,LOG,00000,"connection received: host=localhost port=56966",,,,,,,,,""
2018-08-26 11:34:54.789 CST,"postgres","",3033,"localhost:56966",5b821fde.bd9,2,"authentication",2018-08-26 11:34:54 CST,5/1,0,LOG,00000,"replication connection authorized: user=postgres",,,,,,,,,""
2018-08-26 11:34:54.790 CST,"postgres","",3033,"localhost:56966",5b821fde.bd9,3,"idle",2018-08-26 11:34:54 CST,5/0,0,LOG,00000,"received replication command: IDENTIFY_SYSTEM",,,,,,,,,"pg_basebackup"
2018-08-26 11:34:54.791 CST,"postgres","",3033,"localhost:56966",5b821fde.bd9,4,"idle",2018-08-26 11:34:54 CST,5/0,0,LOG,00000,"received replication command: CREATE_REPLICATION_SLOT ""pg_basebackup_3033"" TEMPORARY PHYSICAL RESERVE_WAL",,,,,,,,,"pg_basebackup"
2018-08-26 11:34:55.016 CST,"postgres","",3033,"localhost:56966",5b821fde.bd9,5,"idle",2018-08-26 11:34:54 CST,5/0,0,LOG,00000,"received replication command: START_REPLICATION SLOT ""pg_basebackup_3033"" 4/64000000 TIMELINE 1",,,,,,,,,"pg_basebackup"
2018-08-26 11:36:16.713 CST,"postgres","",3032,"localhost:56964",5b821fdd.bd8,5,"idle",2018-08-26 11:34:53 CST,,0,LOG,00000,"disconnection: session time: 0:01:22.951 user=postgres database= host=localhost port=56964",,,,,,,,,"pg_basebackup"
2018-08-26 11:36:16.716 CST,"postgres","",3033,"localhost:56966",5b821fde.bd9,6,"idle",2018-08-26 11:34:54 CST,,0,LOG,00000,"disconnection: session time: 0:01:21.928 user=postgres database= host=localhost port=56966",,,,,,,,,"pg_basebackup"


可以看到首先做了 checkpoint,然后是 replication。

从备份出的文件 base.tar.gz、pg_wal.tar.gz 来看,是先做了 checkpoint,然后再备份了之后的 wal。

搭建slave

参考另外一篇blog
https://blog.csdn.net/ctypyb2002/article/details/81668935

参考:
http://postgres.cn/docs/10/continuous-archiving.html
http://postgres.cn/docs/10/app-pgbasebackup.html

posted @ 2018-08-26 13:55  peiybpeiyb  阅读(3495)  评论(0编辑  收藏  举报