AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 133144
Accepted
John K. N.
John K. N.
Asked: 2016-03-24 05:36:52 +0800 CST2016-03-24 05:36:52 +0800 CST 2016-03-24 05:36:52 +0800 CST

PostgreSQL 预写日志存档模式

  • 772

我试图弄清楚 PostgreSQL 周围的各种事情,以及备份应该如何与 WAL 和 Commvault Simpana 一起工作。Simpana 告诉我一切正常,但文件仍留在 WAL 存档目录中。

让旅程开始吧。

环境

PostgreSQL 和操作系统版本

PostgreSQL 9.3 在 Ubuntu 14.04.3 LTS 服务器上运行。

Postgres WAL 配置

postgres.conf 文件为 WAL 归档设置如下。

#------------------------------------------------------------------------------
# WRITE AHEAD LOG
#------------------------------------------------------------------------------
# - Settings -
#wal_level = minimal                    # minimal, archive, or hot_standby
wal_level = archive

[...]

# - Archiving -
archive_mode = on
#archive_mode = off             # allows archiving to be done
                                # (change requires restart)
archive_command = 'cp %p /pgsql-backup/archive/postgres1/%f'
                                # command to use to archive a logfile segment
                                # archive_command = ''           
                                # command to use to archive a logfile segment
                                # placeholders: %p = path of file to archive
                                #               %f = file name only
                                # e.g. 'test ! -f /mnt/server/archivedir/%f    && cp %p /mnt/server/archivedir/%f'
#archive_timeout = 0            # force a logfile segment switch after this
                                # number of seconds; 0 disables

如果test ...零件留在其中,archive_command它会破坏 Simpana 备份,这就是我们省略它的原因。

上面的配置应该会导致 WAL 文件从/pg_xlog/目录复制到/pgsql-backup/archive/postgres1/目录,当...

  1. 不再需要,因为 pg_basebackup
  2. WAL 文件已满(默认为 16MB)且不再使用

Commvault Simpana

客户端计算机已配置为备份存档日志目录中的 PostgreSQL 数据库/实例和 WAL 文件。不再需要时应删除 WAL 文件,因为已为 PostgreSQL 客户端设置了 Simpana 选项“删除存档”。

预期行为

因为 Simpana 正在使用 PostgreSQL 本机命令执行备份,所以我希望当 Simpana 完成完整备份或 WAL 备份时,/pgsql-backup/archive/postgres1/目录中的文件将被删除。

有效行为

当我/pgsql-backup/archive/postgres1/在 Simpana 执行备份后检查目录时,目录中还会有一个带有0000000300000037000000nn.mmmmmmmm.backup语法的文件。这暗示 Simpana 正在使用本机 PostgreSQL 命令执行备份,因为0000000300000037000000nn.mmmmmmmm.backup只有在使用pg_basebackup. 这只是我在阅读 PostgreSQL 9.3 的文档后得出的结论。

以下是目录内容的示例:

[...]
00000003000000370000007A
00000003000000370000007B.00000028.backup
000000030000003700000091.00000028.backup
000000030000003700000093.00000028.backup
000000030000003700000095.00000028.backup
000000030000003700000097.00000028.backup
000000030000003700000099.00000028.backup
00000003000000370000009B.00000028.backup

PostgreSQL 文档

官方文档指出

要使用备份,您需要保留在文件系统备份期间和之后生成的所有 WAL 段文件。为了帮助您执行此操作,基本备份过程会创建一个备份历史文件,该文件会立即存储到 WAL 存档区域中。该文件以文件系统备份所需的第一个 WAL 段文件命名。例如,如果起始 WAL 文件是 0000000100001234000055CD,则备份历史文件将命名为 0000000100001234000055CD.007C9330.backup。(文件名的第二部分代表 WAL 文件中的确切位置,通常可以忽略。)一旦您安全地归档了文件系统备份和备份期间使用的 WAL 段文件(如备份历史记录中指定的那样)文件),不再需要名称数字较小的所有已归档 WAL 段来恢复文件系统备份,并且可以将其删除。但是,您应该考虑保留几个备份集,以绝对确定您可以恢复数据。

这破坏了我的结论,即 Simpana 正在使用本机 PostgreSQL 命令来备份目录中的数据库/实例及其 WAL 存档日志文件/pgsql-backup/archive/postgres1/。

根据文档,nnnnnnnnnnnnnnnnnnnnnn.mmmmmmmm.backup 文件是指向成功前滚恢复所需的最早 WAL 文件的指针。存档日志目录中的任何旧 WAL 文件都可以删除并且不再需要。

让我吃惊的是,Archive Log 目录中有一个 WAL 文件,没有对应的 *.mmmmmmmm.backup 指针文件。

问题

  1. 如果我不使用 Simpana 进行备份,谁会(必须)删除 WAL 存档目录中的 *.mmmmmmmm.backup 文件?pg_archivecleanup命令?
  2. 为什么存档日志目录中仍然有一个完整的 WAL 文件,而它应该像存档日志目录中的所有其他 WAL 文件一样被删除?
  3. 为什么存档日志目录中没有00000003000000370000007A.mmmmmmmm.backup仍然存在的WAL 文件的文件?00000003000000370000007A

我期待您的回复,并希望有人在某个地方有类似的 Simpana 和 PostgreSQL 配置。

postgresql backup
  • 3 3 个回答
  • 7191 Views

3 个回答

  • Voted
  1. ddanny
    2016-06-10T05:04:08+08:002016-06-10T05:04:08+08:00

    我们对 Simpana postgres 备份也有同样的问题。该文档指出:

    作为仅记录备份的一部分备​​份的所有文件是什么?仅备份与当前备份周期相关的事务日志文件。不会备份整个 Log 目录内容。例如,如果您在 T1 时间运行日志备份,然后在 T2 时间运行完整备份(数据和日志);T1 和 T2 之间生成的事务日志文件不会成为最新完整备份的一部分,因为它们与当前备份周期无关。此外,.backup 文件是 PostgreSQL 服务器在日志归档过程中创建的临时文件,不会作为日志备份的一部分进行备份。启用存档删除选项时如何清理日志文件?

    启用存档删除选项时如何清理日志文件?启用存档删除选项后,仅删除作为日志备份一部分备份的那些事务日志文件。在较早的备份尝试期间未删除的事务日志文件不会被清除。此外,由于事务日志文件的持续归档,您可能会在日志备份成功后在 WAL 目录中看到新的事务日志文件。因此,不属于任何日志备份的事务日志文件以及 PostgreSQL 服务器创建的临时文件将留在日志目录中。

    所以:如果您不进行额外的仅日志备份,就在下一次完整备份之前;所有这些墙永远不会被备份/删除;更糟糕的是:在磁盘故障的情况下,您永远不能 PITR 到这个时间段。

    • 2
  2. Best Answer
    jjanes
    2016-03-25T01:21:36+08:002016-03-25T01:21:36+08:00

    这似乎从根本上是关于 Commvault Simpana 的问题,而不是 PostgreSQL 的问题。由于 Commvault 似乎是商业软件,因此您最好联系他们的支持台。

    预期行为 因为 Simpana 正在使用 PostgreSQL 本机命令执行备份,所以我希望当 Simpana 完成完整备份或 WAL 备份时,/pgsql-backup/archive/postgres1/ 目录中的文件将被删除。

    我不知道这里的“WAL 备份”是什么意思。这是 Simpana 特有的术语吗?这是否只是意味着您原始存档目录中的 WAL 文件已被复制到某个异地存储?

    问题 如果我不使用 Simpana 进行备份,谁会(必须)删除 WAL 存档目录中的 *.mmmmmmmm.backup 文件?pg_archivecleanup 命令?

    如果您不使用 Simpana,那么您将使用其他东西。我们不能告诉你其他东西会是什么——有很多选择。虽然pg_archivecleanup是一种这样的方法,但这些天它看起来已经过时了。如果您只想将 WAL 文件保留足够长的时间以便在备用设备上安全地存储(或重放)它们,您现在可以使用“流式复制”,从而完全取消日志传送。

    或者您可以制定一个永久保留第一个基本备份的策略(在您初始化空数据库之后立即),以及从那时起存档的每个 WAL 文件,以便您可以对历史中的任何时间进行时间点恢复您的数据库。

    为什么存档日志目录中仍然有一个完整的 WAL 文件,而它应该像存档日志目录中的所有其他 WAL 文件一样被删除?

    在我看来,当 Simpana 决定清理存档时,它不是删除所有比当前需要的最旧文件更旧的 WAL 文件,而是删除从上次清理时仍需要的文件开始的文件范围,结束在当前需要的那个之前的那个。

    如果是这种情况,那么如果一个 WAL 文件在您打开归档后立即被 PostgreSQL 归档,但在激活 Simpana 之前(或在它得到支持之前),那么该文件将永远不会被删除。

    为什么归档日志目录中仍然存在的 00000003000000370000007A WAL 文件没有 00000003000000370000007A.mmmmmmmm.backup 文件?

    如果在 00000003000000370000007A 是活动的 WAL 文件期间没有启动备份,那么首先就不会有 00000003000000370000007A.mmmmmmmm.backup 文件。

    • 1
  3. santosh tiwary
    2022-01-19T00:35:21+08:002022-01-19T00:35:21+08:00

    WAL 是 Write Ahead Log 的缩写。如果您想保护任何关键数据库的数据,您必须在 PostgreSQL 中启用归档模式。

    简而言之,归档是为数据库中发生的所有事务创建备份的过程,以便您可以将数据库恢复到任何时间点。

    什么是 PostgreSQL WAL 归档?

    在数据库上执行的任何事务首先写入 WAL 文件,如 Oracle 中的重做日志,然后应用于实际的数据文件。随着您不断添加和修改数据库中的数据,WAL 文件会不断生成。在 PostgreSQL 术语中,将生成的 WAL 文件复制出来称为归档,用于数据库的备份和恢复、时间点恢复和复制。

    在 Postgres 中启用 WAL 归档的步骤

    postgres=# show archive_mode;
    
     archive_mode
    
     off
    (1 row)
    
    postgres=# show archive_command;
     archive_command
    
     (disabled)
    (1 row)
    

    以下是完整的步骤: 在 PostgreSQL 中启用存档模式

    • 0

相关问题

  • 运行时间偏移延迟复制的最佳实践

  • Oracle 中的数据库备份 - 导出数据库还是使用其他工具?

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve