PostgreSQL技术内幕18:物理备份工具pg_basebackup
0.简介
PG自带备份工具有多种,pg_basebackup、pg_dump、pg_dumpall,其中pg_basebackup是文件系统级别的备份,其余两种是逻辑备份。本文主要介绍PG备份工具产生的背景和概念,以及对pg_basebackup使用方法和其实现原理进行详细说明,剩余两种工具在后续文章进行详细分析。
1.背景和概念
数据库系统在运行过程中可能会面临着各种突发问题(硬件故障、软件错误、人为失误、网络攻击等),如果没有备份,一旦出现数据丢失,很难恢复数据。备份工具就是为了解决这个问题,通过数据库备份工具去定期备份数据库,可以将当前的数据状态保存下来,当发生数据丢失时,可以通过还原备份来恢复数据,最大程度地减少数据丢失带来的影响。
备份可以分为物理备份和逻辑备份:
1)物理备份
定义:物理备份是通过直接复制数据库文件的方式来创建备份。
原理:物理备份是在文件系统之下和硬件磁盘驱动之上进行的。它忽略了文件和结构,处理过程简洁,因此在执行过程中所花费在搜索操作上的开销较少,备份的性能很高。
2)逻辑备份
定义:逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,只是原数据库中数据内容的一个映像。因此,逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入。
原理:逻辑备份是基于文件级别的备份,由于每个文件都是由不同的逻辑块组成,且这些逻辑块可能存储在分散的磁盘块上,逻辑备份在对非连续存储磁盘上的文件进行备份时需要额外的查找操作。这些额外的操作增加了磁盘的开销,降低了磁盘的吞吐率。
2.pg_basebackup用法介绍
可以直接使用–help来查看
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
-T, --tablespace-mapping=OLDDIR=NEWDIR
relocate tablespace in OLDDIR to NEWDIR
--waldir=WALDIR location for the write-ahead log directory
-X, --wal-method=none|fetch|stream
include required WAL files with specified method
-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
-C, --create-slot create replication slot
-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
-S, --slot=SLOTNAME replication slot to use
-v, --verbose output verbose messages
-V, --version output version information, then exit
--no-slot prevent creation of temporary replication slot
--no-verify-checksums
do not verify checksums
-?, --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>.
3.实现原理
3.1 pg_basebackup 备份客户端实现原理
代码文件为:pg_basebackup .c main函数入口进入后备份流程如下
可以看到,几个主要的分支,一个是是否为stream模式,如果是的话会另外fork一个进程同步并行备份日志文件(这种方式可以直接备份日志,而不需要日志文件一直保留直到备份结束,但却不能直接应用且和文件并不是使用同一个进程,不利于一起压缩),如果不是会在备份完数据后备份日志文件(需要保留当前时间点日志一直到备份结束);另外一个分支是如何接受文件,是否是需要服务端压缩后发过来再解压还是直接发送接收后不需要解压。
3.2 back server 内核服务端实现原理
代码文件为:walsender.c中的exec_replication_command函数,相应流程如下:
主要看其主流程,先后发送数据文件和日志文件,其中日志文件只发送需要的且会按照时间进行排序。
原文地址:https://blog.csdn.net/qq_40529346/article/details/143785582
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!