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 / 问题 / 316293
Accepted
padjee
padjee
Asked: 2022-09-01 07:29:00 +0800 CST2022-09-01 07:29:00 +0800 CST 2022-09-01 07:29:00 +0800 CST

如何在一台服务器上制定多个数据库的备份策略

  • 772

我有一个包含许多数据库的服务器......它包含大约 20 个数据库。其中一些有 1600 万行,但没有那么多。晚上通常很少或没有活动,但白天不会那么忙(除非有活动,例如新注册或会员更新)。虽然不忙,但数据库包含关键数据。没有一个数据库已经备份了一年多!

我怎样才能安全地备份它们而不使服务器崩溃?我需要什么作为早期要求?我已经阅读了许多备份策略,但我只是过于谨慎,因为我不想做愚蠢的事情。我想开发最安全的备份方法并“轻松”恢复。

目前,我已经激活存档并且它已经很好地工作了。

欢迎任何建议,或者也许有我应该阅读的文章。

我的环境:在 Ubuntu 20 上运行的 Postgres 12

谢谢

postgresql backup
  • 1 1 个回答
  • 34 Views

1 个回答

  • Voted
  1. Best Answer
    John K. N.
    2022-09-01T22:24:46+08:002022-09-01T22:24:46+08:00

    当数据库损坏、损坏或变得不可用时,根本没有备份会导致更多的挫败感。

    这是一个非常简单的计算:

    无备份

    • 停业
    • 管理不满意
    • 客户不满意
    • 很棒的演出

    备份

    • 备份期间性能略有下降
    • 业务继续
    • 管理愉快
    • 客户满意

    pg_basebackup

    pg_basebackup以下是PostgreSQL 附带的工具的摘录:

    (强调我的)

    pg_basebackup用于对正在运行的 PostgreSQL 数据库集群进行基本备份。这些是在不影响数据库的其他客户端的情况下进行的,并且可以用于时间点恢复(参见第 25.3 节)和作为日志传送或流复制备用服务器的起点(参见第 26.2 节)。

    pg_basebackup制作数据库集群文件的二进制副本,同时确保系统自动进入和退出备份模式。总是对整个数据库集群进行备份;无法备份单个数据库或数据库对象。对于单个数据库备份,必须使用诸如此类的工具。pg_dump

    通过常规 PostgreSQL 连接进行备份,并使用复制协议。必须使用超级用户或具有 REPLICATION 权限的用户建立连接(参见第 21.2 节),并且 pg_hba.conf 必须明确允许复制连接。服务器还必须配置为 max_wal_senders 设置得足够高,以使至少一个会话可用于备份,一个会话可用于 WAL 流(如果使用)。

    可以同时运行多个 pg_basebackups,但从性能的角度来看,最好只进行一次备份,然后复制结果。...

    pg_basebackup (PostgreSQL 12 文档

    进行基本备份

    配置完所有内容后(阅读整个文档),您可以使用以下命令执行基本备份:

    bash #> pg_basebackup -D \postgresql\backup\ -F t -R -z -h yourhost -p 5432 -U root -W
    

    这可以在交互式 bash 提示符下使用。设置 crontab 作业时,您必须创建一个.pgpass文件。这将允许您将命令作为 crontab 作业运行,而无需输入密码。

    请阅读33.15。密码文件(PostgreSQL 文档)了解更多详细信息。

    持续 WAL 归档

    第25.3 条。连续存档和时间点恢复 (PITR)包含有关如何存档 PostgreSQL 创建的 WAL(预写日志)文件的信息。将 PostgreSQL 集群恢复到某个时间点需要这些文件。

    PostgreSQL 在任何时候都在集群数据目录的 pg_wal/ 子目录中维护一个预写日志 (WAL)。日志记录对数据库数据文件所做的每一次更改。该日志的存在主要是出于崩溃安全的目的:如果系统崩溃,可以通过“重放”自上次检查点以来所做的日志条目来将数据库恢复到一致性。但是,日志的存在使得使用第三种备份数据库的策略成为可能:我们可以将文件系统级别的备份与 WAL 文件的备份结合起来。如果需要恢复,我们会恢复文件系统备份,然后从备份的 WAL 文件中重播,以使系统恢复到当前状态。这种方法管理起来更复杂与之前的任何一种方法相比,它都有一些显着的好处:

    • 我们不需要一个完全一致的文件系统备份作为起点。备份中的任何内部不一致都将通过日志重放来纠正(这与崩溃恢复期间发生的情况没有显着不同)。所以我们不需要文件系统快照功能,只需要 tar 或类似的归档工具。

    • 由于我们可以组合无限长的 WAL 文件序列进行回放,因此只需继续归档 WAL 文件即可实现连续备份。这对于大型数据库特别有价值,因为在这些数据库中经常进行完整备份可能不方便。

    • 没有必要一直重播 WAL 条目。我们可以在任何时候停止重播,并获得数据库当时的一致快照。因此,该技术支持时间点恢复:可以在进行基本备份后的任何时间将数据库恢复到其状态。

    • 如果我们不断地将一系列 WAL 文件提供给另一台已经加载了相同基本备份文件的机器,我们就有了一个热备用系统:在任何时候我们都可以启动第二台机器,它会有一个几乎最新的副本数据库。

    然后,您只需将WAL目录的内容复制到您选择的目标位置或备份这些文件,并在旧文件备份到安全位置后删除旧文件。

    一般建议

    阅读官方 PostgreSQL 文档中的第 25 章备份和恢复部分。如果您无法理解如何实施备份策略,请联系可以支持您实施解决方案的顾问。没有什么比没有数据库备份更糟糕的了。

    拥有基本备份将部分覆盖您。如果您可以每天运行它,那么您就成功了一半。但如果这不可行,那么您至少必须设置 WAL 归档。

    • 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