如何用好PostgreSQL的备份与恢复?

  • 时间:
  • 浏览:1
  • 来源:大发大发彩神app—大发彩神下载苹果

都有益于通过设置Recovery Target,使得archive recovery在指定的位置(时间或事务号)停止恢复。在recovery.conf文件配置如下参数,表示恢复流程在恢复完123947事务随随后随后刚开始 了。

archive recovery:有recovery.conf文件,lable文件(可选)

Archive recovery模式的非standby配置下,需要配置recovery.conf的restore_command命令,该模式下有益于使用归档日志文件进行恢复。应用完所有的规定日志,但会 指定位置时,恢复避免随后随后刚开始 了。

pg_basebackup和pg_rman为备份与恢复提供良好的操作管理界面,避免手工管理配置文件。

高可用环境的建立,包括以下工作:

在slave节点数据目录的recover.conf中,配置到主机的连接信息primary_conninfo并设置standby_mode为on。

pg_hba.conf

Crash recovery模式下,从control文件读取checkpoint记录,其富含有redo lsn和时间线,从该位置随后随后刚开始 了了恢复,日志记录只来自pg_xlog目录中的日志文件,当有益于 日志都有益于应用时,退出恢复。

Archive recovery模式下,当数据目录下不指在backup_label文件时,与crash recovery相同的办法从control文件读取redo lsn和时间线。当数据目录下指在backup_label文件时,redo lsn从该文件读取,根据timeline history文件,获取该redo lsn对应的时间线。

可靠的磁盘设备都有益于大幅降低介质故障概率,但有益于减少数据备份工作。一一另有一个 常见的故障是数据误操作,即修改了不应该修改的数据。从数据库的厚度看,误操作是正常的操作,不需要进行自动恢复,有益于使用备份数据有益于恢复。同去,提供一段时间内历史数据的访问,也是一一另有一个 常见的需求。

对于一一另有一个 64位的lsn,都有益于计算出其所在的xlog文件名。lsn都有益于划分segment序号高位,segment序号低位和块内序号一另有一个 每种。对于segment大小为64M和16M的情形如下:

checkpoint流程都有益于简单描述为,首先构造checkpoint记录(redo字段为当前已写入日志文件的lsn),但会 将数据缓冲区中的脏数据写入磁盘,最后写入checkepoint日志记录(富含checkpoint记录),并将checkpoint记录写入control文件。

PostgreSQL备份与恢复操作涉及的参数和相关文件较多,内控 逻辑关系较复杂,恢复分类办法容易混淆,有有哪些一定会影响到PostgreSQL高可用方案的实现。

通过梳理PostgreSQL数据库备份与恢复流程的相关文件、参数配置与主要流程,对恢复办法进行了分类,给出高可用方案中备份与恢复的基本配置。详细的可用性方案中,还需要考虑主机情形监控,数据访问路由切换和故障主机复用等问题图片。

Crash recovery模式下,应用完pg_xlog目录中的所有可用日志文件后,自动退出恢复,进入运行情形。Archive recovery模式下,recovery.conf文件中参数standby_mode为off时,应用完所有日志后,自动退出恢复,进入运行情形。standby_mode为on时,应用完所有日志后,恢复流程不需要退出,持续读取可用日志(来自于归档日志文件或流基因重组),当收到pg_ctl工具发出的promote命令后,才退出恢复流程,进入运行情形。

在高可用需求中,当单台实例指在故障,需要快速提供备用实例。备份基线数据+日志文件的办法无法满足时间要求。通常采用主备(master/slave)方案,master与slave通过日志流基因重组进行同步,slave都有益于提供只读数据访问,当master发送故障后,直接将应用请求转发到slave。

时间线(Timeline)是PostgreSQL中的特有的概念。其初始值为1,退出archive recovery时,timeline增1,退出crash recovery时,timeline不变。Timeline反映在日志的文件名中,日志文件的命名格式为:时间线号+segment序号高位+segment序号低位。

5种情形下配置文件与参数的不同:

流基因重组都有益于视为archive recovery的一种情形。使用归档日志文件进行恢复时,备机需要获取主机一一另有一个 详细xlog文件,才可进行恢复。在流基因重组中,主机产生日志记录后,会及时发送到备机。

数据的备份与恢复都有益于分为逻辑与物理一种办法。

(1)在环境中配置情形监控工具,实时监控主机情形,主机不可用时,自动promte备机,并将数据库访问路由到备机。

PostgreSQL , 数据库高可用 , 备份与恢复

以上配置下,备机恢复模式为archive recovery,关闭standby,开启hot standby。

赵成

512字节的control文件是PostgreSQL的关键数据,用于数据库启动时,判断数据库情形和恢复位置。controlfile文件中记录了数据库的情形,最近checkpoint记录,最小恢复lsn信息和基本的参数配置。数据库的情形包括:

Crash recovery有益于使用pg_log目录中的日志文件进行恢复,启用archive recovery模式后,都有益于使用其它目录的日志文件(归档日志文件)进行恢复。

pg_rman restore命令支持将数据恢复到指定时间、事务号和时间线参数,该命令将对应的全量数据和归档日志拷贝到相应目录,并配置recovery.conf文件。

pg_rman restore执行完成后,启动PostgresSQL,进行恢复。

指在时间线切换时,在pg_xlog目录写入时间线history文件,文件名为"当前timelime.history",文件内记录了时间线切换的历史纪录,每一行记录第第一根时间线信息,格式为。

根据64M大小日志文件名格式,可计算出lsn的segment序号高32位为0x0,segment序号低位为0x7, 块内序号为0x90,xlog文件名为00000001000000000000007

使用pg_xlogfile_name_offset()都有益于查询lsn对应的文件名文件内偏移,与上述计算一致。

版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

pg_rman 恢复支持将数据恢复到指定时间、事务号和时间线参数,流程为其将对应的全量数据和归档日志拷贝到相应目录,并配置recovery.conf文件的restore_command参数,standby_mode为off。

pg_rman支持的命令包括

在master的pg_hba.conf文件中允许基因重组连接建立

热备包括以下步骤

修改postgres.conf中的port和archive_command为备机端口和归档路径。启动备机,建立流基因重组。

master节点的postgres.conf文件中指定wal_level和发送日志系统线程的数目max_wal_senders。

初始化数据库后,control文件DB情形初始值为shutdown。pg启动时,当control文件DB情形为shutdown,则将情形设置为production,退出恢复过程。在正常关闭服务时,执行checkpoint,并将control文件DB情形设置shutdown。pg启动时,当control文件DB情形为production,则说明指在了crash,会从control文件读取最近checkpoint,从redo lsn随后随后刚开始 了了进行恢复,恢复完成后,将情形设置为production。

pg_basebackup是PostgreSQL自带的一一另有一个 远程热备工具,都有益于将远程PostgreSQL热备到本地目录。其工作流程为,连接到一一另有一个 远程PostgreSQL,执行pg_start_backup,将整个数据目录传输到本地,执行pg_stop_backup命令。

pg_basebackup支持在目标数据目录生成用于流基因重组的recovery.conf文件。

该文件含义为当前时间线为3,时间线1的lsn范围[0/0,0/110000100),

时间线2的lsn范围[0/110000100,0/140420D0),时间线3从0/140420D0随后随后刚开始 了了。

checkpoint操作在以下场景执行:管理员手工执行check命令、数据库启动完成恢复、数据库正常关闭,以及后台Checkpoint系统线程的定期执行。

PostgreSQL日志文件的segment序号从1随后随后刚开始 了了,一一另有一个 日志文件写完后 ,会写入下一一另有一个 序号的日志文件。checkpoint完后 ,最近一次checkpoint.redo lsn完后 的日志文件都有益于丢弃。PostgreSQL会循环使用日志文件。checkpoint操作中,会将可丢弃的日志文件改名为未来的日志文件名,并该日志文件重新初始化。PostgreSQL在写新的日志文件时,但会 该文件已指在,则使用该文件,但会 才会创建新的文件。但会 有益于从pg_xlog目录中的文件名直接判断当前的日志文件,需要使用pg_current_xlog_location和pg_xlogfile_name_offset函数进行判断。

以上配置下,备机恢复模式为archive recovery,开启standby,开启hot standby。

PostgreSQL的数据文件和日志文件互为冗余。当某lsn完后 的操作但会 详细写入了数据文件后,则该lsn号完后 的日志文件都有益于丢弃。checkpoint机制实现此功能。

根据配置文件和参数的不同,PostgreSQL恢复都有益于做以下分类。

会在/usr/local/pgsql/data目录生成流基因重组所用的postgresql.conf文件,内容如下

对于流基因重组建议采用archive recovery-standby-hot standby配置,对于基线数据+归档日志恢复的配置,建议采用archive recovery-非standby-hot standby配置。

2017-10-22

PostgreSQL正常运行中,直接kill主系统线程,重启PostgreSQL,将进入crash recovery避免流程,从control文件中checkpoint的redo lsn位置随后随后刚开始 了了,

使用pg_xlog目录中的日志文件进行恢复。PostgreSQL能进行上述避免,是但会 将其情形和最近的checkpoint记录在在control文件中。

parentTLI为时间线id,为切换指在后的lsn,为指在切换的愿因。

日志的归档过程如下:

在高可用方案中,需要支持介质故障恢复,实时故障切换,误操作数据恢复,查看历史数据等功能。流基因重组技术和物理备份与恢复的结合,都有益于满足数据库高可用的基本要求。

(2)恢复历史数据

配置recovery.conf文件的standby_mode参数为on或off,都有益于控制进入standb模式还是非standby模式。非standby模式下,PostgreSQL恢复到指定位置但会 发现有益于 可用日志记录时,停止恢复流程。standby模式下,在有益于 可用日志的情形下,会持续检查并应用可用日志,直到DBA发出promote命令。

备份分为冷备和热备。冷备是正常关闭服务后拷贝文件。热备是服务正常运行中拷贝文件。但会 采用数据缓冲区机制,拷贝的文件数据会不一致。根据数据库恢复基本原理,假如有一天选则 某lsn完后 的日志但会 详细写入了数据文件,则在拷贝后的数据文件上,应用该lsn号完后 的日志文件,可将数据恢复到一致的情形。

pg_rman是PostgreSQL的备份与恢复工具,支持全量、增量、归档一种备办法,支持数据压缩与备份集管理。pg_rman适用于大数据量数据库的增量备份。pg_rman需要与被备份数据库安塞进同一台机器。其备份流程为,连接到本地PostgreSQL,执行pg_start_backup,全量备份文件但会 通过比较数据文件块的lsn号进行增量备份,执行pg_stop_backup命令,备份归档日志。

日志序号 (lsn:log sequence number) 标识日志记录在日志文件中的位置。lsn是一一另有一个 64位的整数。PostgreSQL运行时生成的日志文件存倒入数据目录下的pg_xlog目录,每个日志文件称为一一另有一个 segment,日志文件大小固定,由wal_segment_size参数指定,日志文件内控 划分为多个wal page,每个page的大小由wal_block_size参数指定。

使用basebackup工具热备:

16M:segment序号高位(32比特)+segment序号低位(8比特)+块内序号(24比特)

Xlog文件名由三每种组成,格式为:时间线+segment序号高位+segment序号低位,每个每种都表示为一一另有一个 8位16进制数字。取出lsn中的segment高位和segment低位数值,就都有益于选则 其所在的xlog文件。

从时间线history文件中,都有益于计算出每条时间线的随后随后刚开始 了了和随后随后刚开始 了lsn。

配置postgresql.conf文件的hot_standby参数为on或off,都有益于控制与非 开启hot standby模式。hot standby开启情形下,恢复随后随后刚开始 了前,数据库可对外提供只读访问。hot standby关闭情形下,恢复随后随后刚开始 了前,数据库不提供对外访问。

在数据目录存创建recover.conf文件,PostgreSQL启动时,读取到该文件,会进入archive recovery流程。在recover.conf中设置日志拷贝命令restore_command,pg恢复过程中,使用该命令将归档日志拷贝到pg_xlog目录后进行恢复。

postgres.conf(异步流基因重组)

Archive recovery模式的standby配置下,最少配置recovery.conf的restore_command命令和primary_conninfo中的一一另有一个 。该模式下都有益于使用归档日志文件但会 流基因重组。当有益于 可用的日志记录时,会持续检查并应用可用日志,直到DBA发出promote命令。

在recovery.conf文件中,都有益于配置Recovery Target,使得archive recovery在指定的位置(时间、事务号或时间线)停止恢复。

传统的故障类型包括事务内控 故障、系统故障、介质(磁盘)故障。对于事务内控 故障和系统故障,数据库使用日志文件自动恢复,需要人工干预。为应对介质故障,DBA需完后 备份数据,指在故障后,使用备份数据恢复数据库。

backup文件格式为:热备随后随后刚开始 了了lsn对应的日志文件名.随后随后刚开始 了了lsn的块内偏移.backup

使用pg_current_xlog_location()查询当前lsn为0/1C000090(16进制高32位/16进制低32位),当前时间线为1,wal segment大小为64M,

数据库采用数据文件加日志文件,两份数据的存储办法。为提高性能,数据库运行时操作的数据指在内存缓冲区,缓冲区的数据延迟写入数据文件,但会 数据文件会指在不一致的情形。数据的变更记录称为日志记录,日志记录以日志文件办法存储在磁盘上。日志记录也是先写入日志缓冲区,再写入日志文件。通过一另有一个 简单的规则Write-ahead log(将数据写入数据文件前,先将对应的日志记录写入日志文件)和Force log at commit(事务提交时,将其所有日志记录写入日志文件),都有益于保证通过日志文件详细的恢复数据文件。

64M:segment序号高位(32比特)+segment序号低位(6比特)+块内序号(26比特)

高可用性是数据库的关键指标,简单说可是 要做到故障时间短,数据不丢失,有益于回退到指定位置(时间/事务)。实现高可用的基础是数据库的备份与恢复技术。

PostgreSQL高可用方案应有益于满足介质故障恢复、实时故障切换、误操作数据恢复和查看历史数据的需求。

Recovery过程简单说可是 从一一另有一个 checkpoint的redo lsn位置随后随后刚开始 了了,通过应用日志记录,使数据文件达到一致的情形。对于每一种恢复配置,要明确一另有一个 问题图片,从哪里找到随后随后刚开始 了了的lsn与时间线,日志记录的来源是哪里,恢复情形怎么退出。

slave启动一定会启动wal reciver系统线程,根据primary_conninfo向master发送连接请求。master收到请求后,启动wal sender系统线程,wal sender与reciver建立连接。 wal reciver将起始的lsn信息发送给wal sender,wal sender从该lsn随后随后刚开始 了了,将日志记录持续发送给wal reciver,wal reciver将日志写入pg_xlog目录中的日志文件,并通知恢复系统线程读取文件进行恢复避免。

使用timeline有以下优点:

Crash recovery是PostgreSQL指在故障后自动进行的恢复避免,archive recovery是DBA通过配置recovery.conf文件,PostgreSQL启动后进入的恢复流程。

本文首先介绍通常的数据库故障场景与避免方案,但会 通过梳理PostgreSQL数据库备份与恢复的相关文件、参数配置与主要流程,对PostgreSQL恢复办法进行了清晰分类,最后给出了应对典型故障,PostgreSQL备份与恢复的配置方案。

引入时间线概念后,日志位置的唯一标识从lsn变为时间线+lsn,checkpoint的特性中记录了当前的timeline。

为持久保存日志文件,需要开启日志归档模式。在该模式下,可丢弃日志文件被删除前,被拷贝到指定目录。在postgres.conf配置文件中设置一另有一个 参数: