【PG数据库】PostgreSQL 日志归档详细操作流程

news2024/12/23 14:55:15

1.1 日志归档的目的

pg数据库日志归档是将PostgreSQL数据库的日志文件进行归档的过程。

归档的主要目的是为了保留历史数据,确保数据的一致性和完整性,同时为数据恢复提供必要的支持。

pg数据库日志归档的目的包括:

1.数据恢复:通过归档日志,可以在需要时回滚到任何时间点,从而进行数据的恢复。这是PITR(Point-In-Time Recovery)技术的基础,它允许数据库恢复到其运行历史中的任意一个有记录的时间点。
2.保证数据一致性:归档日志可以确保在数据库故障或其他中断时,所有已提交的事务都得到了持久保存。这确保了数据的完整性和一致性。
3.备份和恢复策略:通过定期归档日志,可以创建数据库的备份,并在需要时使用这些备份进行恢复。
4.监控和审计:归档日志还可以用于监控和审计数据库的活动,以便更好地了解数据的变动情况。
总之,pg数据库日志归档是确保数据库正常运行、保证数据一致性和完整性、实现数据恢复的重要手段。


1.2 启用归档模式

1.找到并编辑postgresql.conf文件。通常位于/etc/postgresql/版本号/main/目录下。
2.修改或添加以下设置:

wal_level = replica
archive_mode = on
archive_command = 'test ! -f /archive/%f && cp %p /archive/%f' 

3.保存并关闭文件。
4.重新启动PostgreSQL服务以应用更改:

	Bash: systemctl restart postgresql

archive_command仅在已完成的 WAL 段上调用。因此,如果服务器只产生很少的 WAL 流量(或产生流量的周期很长),那么在事务完成和它被安全地记录到归档存储之间将有一个很长的延迟。为了限制未归档数据存在的时间,可以设置archive_timeout来强制服务器来周期性地切换到一个新的 WAL 段文件。 当这个参数被设置为大于零时,只要从上次段文件切换后过了参数所设置的时间量,并且已经有过任何数据库活动(包括一个单一检查点),服务器将切换到一个新的段文件(如果没有数据库活动则会跳过检查点)。
例如设置了archive_timeout=100后,PostgreSQL服务器会每隔100秒自动切换到新的WAL段文件。这意味着每隔100秒,一个新的WAL文件将被创建,并开始记录后续的更改。

需要注意的是,archive_timeout参数仅对已完成的WAL段进行切换。
如果数据库的写入量较少,或者在100秒内没有足够的活动导致WAL段完成,那么可能不会每个100秒生成一个新的WAL文件。
实际的切换时间可能会受到写入活动的变化和系统的负载的影响。


1.3 创建归档日志目录

如果尚未创建归档日志目录,则需要执行以下操作:
运行以下命令以创建目录:

Bash: mkdir -p /path/to/archive

还需要确保PostgreSQL进程具有写入该目录的权限。


1.4 验证归档设置

查看PostgreSQL的日志文件以验证是否已成功启用归档模式。Pg14日志文件位于/var/bin/pgsql/14/data/pg_wal目录下。检查日志以查找与归档模式相关的消息。如果一切正常,则可以看到有关已启用归档模式的消息。

WAL(Write-Ahead Logging)文件是PostgreSQL数据库中非常重要的日志文件,它记录了所有对数据库的更改。WAL文件的具体作用如下:

1.数据完整性:WAL确保了数据的完整性。在数据库发生故障时,可以通过使用WAL文件进行恢复,确保数据的完整性和一致性。
2.故障恢复:如果数据库发生故障,如系统崩溃或数据损坏,WAL文件可用于重新应用那些在故障发生时尚未写入数据文件的更改。这意味着即使数据文件已损坏,PostgreSQL也可以从WAL文件中检索数据,并恢复到一致的状态。
3.并发控制:WAL还支持并发控制,通过将数据更改记录在WAL中,可以确保多个事务并发执行时数据的完整性和一致性。
4.备份和恢复:WAL文件可以用于备份和恢复操作。通过定期备份WAL文件,可以在数据丢失的情况下进行恢复。
5.复制:WAL还支持数据库的流复制,允许将数据更改从一个数据库服务器复制到另一个数据库服务器。这对于高可用性和负载均衡场景非常有用。
总的来说,WAL文件在PostgreSQL中起着至关重要的作用,确保了数据的完整性、可靠性和并发性。


1.5 操作步骤

1、打开配置文件:

vi /var/bin/pgsql/14/data/postgresql.conf

在这里插入图片描述
在这里插入图片描述
配置完archive_mode、archive_command、wal_level和fsync后保存配置文件。

2、重启pg数据库

systemctl restart postgresql-14.service

3、新建备份文件夹

mkdir –p /pg_base	#创建基础备份目录
mkdir –p /archive		#创建基础备份目录

4、在表中插入测试数据

create table test (id integer);
insert into test values(generate series(1,100));

5、做基础备份

pg_basebackup -Ft -Pv -Xf -z -Z5 -D /pg_base/’date +%F’ 

6、手动归档wal日志

	select pg_switch_wal();		#手动归档wal日志

7、模拟误删data文件夹数据

mv /var/bin/pgsql/14/data	/var/bin/pgsql/14/data.bak	#重命名原来的data文件夹
mkdir data	#创建新的data文件夹

8、解压基础备份至空的data文件夹

cp /pg base/base.tar.gz  /var/bin/pgsql/14/data   #拷贝基础备份到新建data文件夹
tar -zxvf base.tar.gz		#解压文件
cd /var/bin/pgsql/14/data	
rm -rf pg wal
rm -rf postmaster.pid	#删除基础备份中的wa1日志和postmaster.pid文件
mkdir -p pg_wal/archive status	#创建archive status文件夹

9、修改配置文件

vi postgresql.conf
#修改restore command为要恢复的wa1日志目录
restore command = ‘cp /archive/%f %p’

10、新建recovery.signal文件

touch recovery.signal	#恢复时依赖该文件,恢复至最新wal位置

11、查看wal日志
在这里插入图片描述
wal日志的名称,是三块内容组成,
每8个字符分成一组,用16进制标识的

00000001 00000000 0000000A
时间线    逻辑id    物理id

12、赋权并重启数据库

#新建的data文件夹更改所有者
chown -R postgres:postgres /var/bin/pgsql/14/data

#修改data目录权限,否则会因为目录权限过大无法启动数据库
chmod 0700 data –R

#重启数据库
systemctl restart postgresql-14.service

数据库恢复成功:
在这里插入图片描述


1.6 实例描述

假设在数据库在写入过程中突然发生故障,导致某个数据文件损坏。在这种情况下,可以使用WAL文件进行数据恢复。
故障发生前
1. 确保数据库已经配置了WAL日志记录,并且启用了归档模式。这样,WAL日志文件会被自动备份并保存在归档目录中。
2. 定期备份您据库数据文件,以防止数据丢失。

故障发生后
1. 首先,检查数据库的状态。可以使用pg_stat_activity视图检查当前的活动进程,确保没有未完成的事务。如果有未完成的事务,需要回滚这些事务,确保数据库的一致性。
2. 然后,检查损坏的数据文件。可以使用pg_ls_data视图列出数据目录中的文件,并确定损坏的数据文件。
3. 接下来,确定损坏数据文件对应的WAL日志范围。可以使用pg_xlogloc或pg_current_xlog_location函数获取当前的WAL位置,并与损坏数据文件的时间戳进行比较,确定需要恢复的WAL日志范围。
4. 使用pg_restore工具恢复数据。假设已经备份了损坏数据文件之前的WAL日志,可以使用pg_restore工具从WAL日志中恢复数据。

在命令行中执行以下命令:

	pg_restore -l mydb_backup.tar -L mydb_archive /path/to/mydb_archive/000000010000000000000001.00000028.backup

其中,mydb_backup.tar是备份文件,mydb_archive是归档目录,/path/to/mydb_archive/000000010000000000000001.00000028.backup是要恢复的WAL日志备份文件的路径。
5. 在恢复过程中,pg_restore工具会根据WAL日志中的信息将数据恢复到数据库中。等待恢复过程完成即可。
6. 恢复完成后,检查数据库的状态和完整性。确保所有的数据都已正确恢复并且数据库运行正常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1680491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL】SQL基本知识点DDL(1)

目录 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 4.DDL-表操作-查询 5.DDL-表操作-数据类型 6.DDL-表操作-修改 1.SQL分类: 2.DDL-数据库操作 3.DDL-表操作-创建 注意:里面的符号全部要切换为英文状态 4.DDL-表操作-查询 5.DDL…

html基础(全)

html简介 目录 什么是网页 什么是 HTML 常用浏览器 WebE标准的构成 基本语法概述 第一个HTML页面 文档类型声明标签 lang 语言种类 字符集 标题标签 段落和换行标签 文本格式化标签 div和span标签 图像标签和路径 超链接标签 表格的主要作用 表头单元格标签 列…

【汇编语言】多文件组织

【汇编语言】多文件组织 文章目录 【汇编语言】多文件组织前言一、8086拓展1.子程序的另外一种写法2.程序的多文件组织 总结 前言 本篇文章将讲到子程序的另一种写法,以及程序的多文件组织。 一、8086拓展 1.子程序的另外一种写法 初始的程序 在这里我们对比一下…

战网国际服加速器哪个好用 暴雪战网免费加速器分享

战网国际服(Battle.net International或Battle.net Global)是由暴雪娱乐公司(Blizzard Entertainment)运营的面向全球玩家的多人在线游戏平台。与专注于特定地区的版本不同,国际服允许玩家不受地域限制地访问暴雪的多款…

一键修复所有dll缺失,教大家解决丢失的dll文件

修复所有DLL(动态链接库)文件缺失的问题通常不可能通过单一的"一键修复"按钮来实现,因为DLL文件缺失可能由各种不同的原因导致,比如应用程序安装不正确、病毒感染、或系统文件损坏等。 使用内置的系统文件检查器&#x…

AtomicInteger 详细解读

AtomicInteger 详细解读 一、原始数据并发写引发的问题 对于共享变量整数的加减操作,当出现并发的情况时,很容易造成线程不安全。 1、代码示例 public class Demo {static int num 0;public static void main(String[] args) throws InterruptedExc…

【Redis】Redis面试和工作中十有八九会遇到的问题

1. 数据类型 常用的Redis数据类型有5种,分别是: String、List、Set、SortedSet、Hash 还有一些高级数据类型,比如Bitmap、HyperLogLog、GEO等,其底层都是基于上述5种基本数据类型。因此在Redis的源码中,其实只有5种数…

2000-2001年中国净生态系统生产力产品(Net ecosystem productivity, NEP)

简介 中国净生态系统生产力产品(Net ecosystem productivity, NEP)是总初级生产力GPP(单位时间内生物通过光合作用所固定的有机碳量)扣除自养生物呼吸消耗的部分和异养生物呼吸消耗(土壤呼吸)光合产物之后的部分,是生…

连锁收银系统如何助力实体门店私域运营

作为实体门店,私域运营是提升客户黏性和增加复购率的重要策略之一。而连锁收银系统在私域运营中扮演了关键的角色,它不仅可以帮助门店管理客户信息和消费记录,还能够通过数据分析和营销功能提供个性化的服务和推广活动。下面看看连锁收银系统…

TypeScript中的泛型(Generics)

TypeScript中的泛型(Generics) 在前面的几篇文章中,我们了解了TypeScript的类、接口和基本的数据类型系统。本文将重点介绍TypeScript中的泛型,这是一种强大的工具,它允许我们创建可重用的组件,同时保持类…

信创电脑|暴雨新增兆芯KX-7000处理器版本

IT世界 5 月 15 日消息,暴雨公司信创家族新上架了一款搭载兆芯KX-7000系列处理器、摩尔线程8GB 显卡、16G DDR5 内存以及 512G SSD 的新配置台式电脑主机。 兆芯 KX-7000 处理器采用开先的 8 核 Chiplet互联架构,最高频率3.7 GHz,拥有 32MB 的…

11种最常见的网络安全攻击类型!

常见的网络安全攻击类型有很多,其中包括DOS和DDOS攻击、中间人攻击、SQL注入攻击、勒索攻击、网络攻击、蛮力攻击等,接下来这篇文章为大家介绍一下{BANNED}最佳常见的11种网络安全攻击类型,快来看看吧。 1、DOS和DDOS攻击 拒绝服务攻击旨在使…

IDEA 使用Alibaba Cloud Toolkit 实现远程 自动部署

安装插件 maven方式部署 配置服务器主机信息 配置发布到主机 单击Select 单击run 就可以将选择module的jar文件上传到服务器的指定位置了 Alibaba Cloud Toolkit 上传文件的方式部署

网工内推 | 测试工程师,NA认证以上,15薪,补充医疗险

01 天视通 招聘岗位:测试工程师 职责描述:1、网络视频监控相关软件产品测试,及行测试记录和相应各种文档资料/手册编写;2、负责编写测试计划、测试用例、搭建测试环境、执行测试;3、进行BUG验证根据测试结果&#xff…

腾讯云环境安装单机版minio

Minio 下载安装 wget https://dl.min.io/server/minio/release/linux-amd64/minio修改minio 文件为可执行文件 chmod x minio3、启动,随机端口启动 ./minio server /data/miniodata # 或者指定密码执行 MINIO_ACCESS_KEYmyminioadmin MINIO_SECRET_KEYmyminioadm…

UV胶固化时使用的UV灯要如何选择才适合!

近日,在使用UV灯固化 UV胶的过程中,遇到了不同的问题,最基本的就是很多人对于固化UV胶时,使用什么样的UV灯不清楚,从而导致了UV胶在实际使用过程中没有固化,或者没有完全固化,胶水仍处是液体流动…

代码随想录算法训练营第三十一天|455.分发饼干,376. 摆动序列,53. 最大子序和

455.分发饼干 优先把小饼干分给胃口值小的&#xff0c;或者是把大饼干分给胃口大的。 376. 摆动序列 class Solution { public:int wiggleMaxLength(vector<int>& nums) {if (nums.size() < 1) return nums.size();int curDiff 0; // 当前一对差值int preDiff …

五大方法教你如何分分钟构造百万测试数据!

在测试的工作过程中&#xff0c;很多场景是需要构造一些数据在项目里的&#xff0c;方便测试工作的进行&#xff0c;构造的方法有很多&#xff0c;难度和技术深度也不一样。本文提供方法供你选择。 在测试的工作过程中&#xff0c;很多场景是需要构造一些数据在项目里的&…

[ciscn 2022 东北赛区]math

1.题目 import gmpy2 from Crypto.Util.number import * from flag import flag assert flag.startswith(b"flag{") assert flag.endswith(b"}") messagebytes_to_long(flag) def keygen(nbit, dbit):if 2*dbit < nbit:while True:a1 getRandomNBitIn…

Py深度学习基础|关于Batch Normalization

1. 为什么需要Batch Normalization 通常我们会在输入层进行数据的标准化处理&#xff0c;这是为了让模型学习到更好的特征。同样&#xff0c;在模型的中间层我们也可以进行normalize。在神经网络中, 数据分布对训练会产生影响。 比如我们使用tanh作为激活函数&#xff0c;当输入…