这篇文章最初发表在2022年3月和2023年3月更新。
毫无疑问,PostgreSQL变得实际转到数据库对于许多。几的原因包括先进的技术、可伸缩性和省钱的方法。说了这么多,我们看到许多经验丰富的dba负责迁移现有数据库从甲骨文、MySQL、SQL Server和其他人Postgres。虽然从根本上来说,一个好的DBA应该有一个概念性的知识和对数据库基本原理的理解,翻译现有的方式执行日常任务不同于另一个技术。考虑到这一点,这篇文章是写给那些有经验的dba,著名的和已被证明了的例程在旧技术和想知道如何执行Postgres。
Postgres提供了一些实用程序用于执行物理和逻辑的备份和恢复。我们将讨论这些问题和如何使用它们。
对于这个mini-tutorial的目的,我们假设所有任务将由用户执行“postgres数据库拥有超级用户权限的除非另有注明。
表的内容
- PostgreSQL备份的重要性
- 了解逻辑备份
- 逻辑备份的好处
- 了解物理备份
- 物理备份的好处
- 知道什么是需要执行远程备份和恢复
- 执行逻辑转储整个实例
- 本地服务器上执行逻辑数据转储
- 执行一个远程服务器的逻辑数据转储
- 执行转储所有用户和凭证
- 执行一个特定数据库的逻辑转储
- 执行物理备份
- 执行远程服务器的物理备份
- 本地服务器上执行身体恢复
- 恢复pg_dumpall本地服务器使用保存文件。
- 恢复pg_dumpall远程服务器使用保存文件。
- 恢复pg_dumpall从源服务器远程服务器
- 恢复pg_dumpall从远程服务器到另一个远程服务器。
- 恢复pg_dump特定的数据库使用保存文件。
- 恢复pg_dump特定数据库的远程服务器使用保存的文件。
- 恢复pg_dump不同所有者的目标。
- 站着的另一个实例使用pg_basebackup Postgres
- 结论:利用一个PostgreSQL备份和恢复解决方案
PostgreSQL备份的重要性
备份是任何数据库管理策略的重要组成部分,是防止数据丢失,并确保业务连续性的关键。然而,备份方法,为一个组织工作可能不是有效的另一方面,作为每个环境是独一无二的。尽管如此,有常见的数据丢失的原因,每个人都应该意识到,包括:
- 数据损坏:这是一个关键的问题,可以呈现多个副本无用的,使它们不适合运行任何生产工作负载。
- 设备故障:一种常见的发生,会导致整个数据中心的可用性,导致需要重建集群从备份。
- 人类的错误:错误可能发生,即使有无数的预防措施。一个错误可能会给企业带来灾难性的后果,特别是如果错误复制多个实例。
- 软件错误:错误可以发生在任何级别的软件栈,从操作系统到网络传输层,导致意想不到的结果或数据丢失。
- 法规遵循需求和保留策略:根据你的行业,你可能需要保留数据为一个特定的时间或保持备份你的数据,以确保可以跟踪更改或恢复。
- 测试:备份可以用来测试新的软件或硬件配置也不用担心数据丢失。
通过了解常见原因数据丢失和备份的重要性,您可以开发一个有效的PostgreSQL数据库备份和恢复计划前进。
逻辑备份
逻辑备份处理原生工具等pg_dump和pg_dumpall。这些工具应该被包括在postgres的默认bin目录安装,等/usr/pgsql-11/bin。如果你没有设置路径,你可能想要的bin目录包含在您的路径。
许多选项运行时可以使用这些工具来定制您的数据转储。因此,我们将介绍几个场景在这个博客。
逻辑备份的好处
逻辑备份任何数据库管理战略的一个重要组成部分,提供很多益处,维护数据的完整性至关重要。下面是一些使用逻辑备份的好处:
灵活性:逻辑备份提供了高度的灵活性,使您可以备份和恢复特定的表或子集的数据而不必恢复整个数据库。这是特别有用的在处理大型数据库时,在恢复整个数据库可能是耗费时间和资源密集型的。
可移植性:逻辑备份也具有高度的可移植性,这意味着他们可以很容易地转移到PostgreSQL的不同实例之间甚至不同的数据库管理系统。这是特别有用,当数据从一个系统迁移到另一个地方,因为它允许你只把需要的数据,而不是将整个数据库。
版本控制:逻辑备份支持版本控制,使您能够跟踪修改数据库。这便于调试问题和执行审计。
细粒度的控制:利用逻辑备份PostgreSQL的一个优势是拥有控制粒度级别的备份过程。通过定制备份格式和选择,复杂的数据结构可以有效地支持同时确保包括特定的数据。此外,逻辑备份可以被压缩,优化存储利用率。
透明度:逻辑备份可以很容易地检查和修改,因为他们在一个人类可读的格式,使其更容易解决可能发生的问题。
想要了解更多关于逻辑备份?看看这个博客复制使用逻辑PostgreSQL版本之间的复制。
物理备份
物理备份处理原生工具等pg_basebackup。再一次,这些工具应该被包括在postgres的默认bin目录安装,等/usr/pgsql-11/bin。如果你没有设置路径,你可能想要的bin目录包含在您的路径。
您还可以使用系统工具物理备份,如焦油或其他归档工具。
物理备份的好处
物理备份是一个综合的数据库管理计划的一个重要组成部分,提供许多优势,保持数据的可靠性至关重要。以下是一些使用物理备份的好处:
更快的备份和恢复时间:物理备份是速度比逻辑备份,因为他们不需要将数据转化为SQL语句。他们只是复制文件包含数据,导致更快的备份和恢复过程。
适合大型数据库:物理备份更高效地处理大型数据库,因为他们不需要尽可能多的磁盘空间逻辑备份。通过物理PostgreSQL数据库的备份,所有系统表和索引,以及任何用户数据捕获,确保在发生灾难,没有数据将丢失。
降低数据丢失的风险:由于物理备份操作的文件的级别,有一个比逻辑备份降低数据丢失的风险,在SQL操作的水平。
灵活性:物理备份关于备份策略提供了高度的灵活性,使dba能够定制他们的备份方法,以满足任何特定的需求。这可以包括完整、增量和差异备份。
了解如何与多个表空间备份和恢复一个PostgreSQL集群使用pg_basebackup。
远程备份的先决条件
源数据库服务器允许远程连接的用户执行任务。记住,我们为示例,假设用户postgres。
- pg_hba创建一个条目。配置文件similar to the following under the IPv4 connections section.
主机所有postgres 0.0.0.0/0 md5
2。编辑你的postgresql。配置文件or whatever file you may be loading for runtime configs and change the parameter listen_addresses to the following:
listen_addresses = ' * '
一旦上述更改,重新加载您的配置文件或重启postgres。
上面的例子是非常开放的。为了安全,你最有可能会限制hba的IP地址。配置文件到一个更特定的IP子网。
在我们的示例中,我们允许从任何地方postgres连接密码身份验证。因此,0.0.0.0/0和md5。你可以改变0.0.0.0/0等数据库服务器的地址192.168.1.2/32。我们还指定用户postgres- u选项,因为它是用户我们pg_hba开放。配置文件。
如果运行命令的用户有不同的凭证在源和目标服务器上,您需要保存密码.pgpass或设置环境变量PGPASSWORD所以你不提示输入密码时是必要的。
我想把我整个数据库,包括用户和证书文件。
这是相当简单的任务来执行,如果你有正确的权限和配置设置,随着存储需要取决于数据库的大小。
在本地执行数据转储
如果你只有一个实例的postgres在您的服务器上运行和最小/默认配置pg_hba.conf文件,你的路径包括postgres bin目录,所有您需要做的是用户postgres…
pg_dumpall > savedfile.sql
上述适用于小型数据库在本地服务器上的空间,只是想用一种快速而简单的数据库的转储。
如果你是在本地服务器上运行多个实例,想把一个具体的实例,你要做的就是…
pg_dumpall - p > savedfile.sql港
使用的端口号替换上述港口实例上运行您希望转储。
执行远程数据转储。
虽然这是几乎一样的在本地服务器上,有几件事你需要配置为执行这个远程数据转储。另外,你的先决条件需要解决的问题。
现在从我们的远程客户端或服务器,我们可以运行以下命令,只要postgres工具安装。
pg_dumpall - h - p - u postgres > savedfile.sql港
取代主机与源数据库的地址港口与端口号上运行。
还有其他的旗帜和可以使用的选项。看一看在这里使用的选项。
我想把一个特定的数据库。
在本地执行数据转储。
类似于其他命令稍微有些变化
pg_dump - dname > savedfile.sql
像在其他情况下,上述适用于小型数据库在本地服务器上的空间,只是想用一种快速而简单的数据库的转储。
如果你是在本地服务器上运行多个实例,希望转储从一个具体的实例,你要做的就是…
pg_dump - p - d dbname > savedfile.sql港
我想把一个特定的数据库和特定的表或表。
在本地服务器上
类似于其他命令稍微有些变化
pg_dump - dname - t表> savedfile.sql
像在其他情况下,上述适用于小型数据库在本地服务器上的空间,只是想用一种快速而简单的数据库的转储。
如果你是在本地服务器上运行多个实例,希望转储从一个具体的实例,你要做的就是…
pg_dump - t - p - d港dbname表> savedfile.sql
如果你想要多个表,列出他们的名字或模式一样…
pg_dump - dname - t表1 - t表- t table3 > savedfile.sql
从远程服务器
就像在之前的例子中,指定的连接选项- h主机- p端口
我只想把用户和证书恢复他们在其他地方。
这是一样简单的上述数据转储。然而,请记住,这都不会让你得到你需要的,如果您的实例是一个RDS实例。亚马逊真的锁了你能做什么特权用户的RDS实例,尽管Postgres。
从本地服务器
pg_dumpall - g > users.sql
从远程服务器或客户端。(在本地保存文件)
pg_dumpall - g - h - p - u postgres > users.sql港
您可以编辑上面的转储文件和删除任何用户您不希望应用当您恢复文件到一个不同的服务器。
恢复一个逻辑转储
恢复新创建的备份是一个简单的任务。有几种方法可以实现这个目标,我们将复习一些只是为了让你走了。记住有一个pg_restore实用工具,我们将不会处理这个博客。Pg_restore让你得到更多的创意,你的转储和进口。
再一次,我们假设这里所有操作都执行用户postgres。
恢复pg_dumpall本地服务器保存文件。
psql postgres - f savedfile.sql
恢复pg_dumpall从保存文件到远程服务器上。
postgres - f savedfile.sql psql主机- h - p的港口
恢复pg_dumpall从源服务器远程服务器。
pg_dumpall | psql - h主机- p端口postgres
恢复从pg_dumpall从远程服务器到远程服务器。
pg_dumpall - h src_host - p src_port | psql - h target_host - p target_port postgres
特定数据库的恢复pg_dump保存文件。
psql dbname - f savedfile.sql
特定数据库的恢复pg_dump从保存文件到远程服务器上。
psql - h - p - f savedfile.sql港口dbname
恢复pg_dump不同所有者的目标。
有时候你无法访问源数据库的用户和凭证或想让他们在你的目标不同/恢复数据库。按照以下的步骤来实现这一目标。
- 执行pg_dump命令如前所述,但添加无所有者选择。
- 执行恢复运行但是如上所述的新主人的命令。
无所有者> savedfile.sql pg_dump - d数据库
psql - u - f newowner dbname savedfile.sql
记住,对于远程服务器,正如其他的例子,使用- h主机- p端口和任何其他所需的连接字符串的选择。
如果用户的身份是不同的,你是提示输入密码,读的先决条件这个博客。
让我们与pg_baseback物理
Postgres执行物理备份的一种常用方法是使用pg_basebackup。这个工具允许我们生成必要的细胞膜物理备份文件需要恢复或站起来一个独立实例。
有许多旗帜和选择这个工具,包括压缩,但是为了这个博客,我们将关注的基本使用pg_basebackup以最少的选项。
对于本文的目的,我们将涵盖物理备份使用本机pg_basebackup工具。
请注意:通常,一个指定的目的地路径的物理备份。这是说的- dpg_basebackup选项。
保存备份到目的地的路径
pg_basebackup - d /目的地/路径pv检查点=快
发送与tar文件备份到指定的目录路径
pg_basebackup - d /目的地/路径pv检查点=快速- f t
以上将生成两个tar文件。一个基地。焦油和pg_wal.tar
从一个远程实例创建一个物理备份
确保你有设置先决条件作为解释道在这里。
远程和本地执行的唯一区别是远程,我们指定一个源服务器- h remote_host和上运行的端口postgres- p remote_port
pg_basebackup主机- h - p - d港/目的地/路径pv检查点=快
如果执行pg_basebackup不受信任的用户直接从服务器执行pg_basebackup,添加的附加选项- u用户名。例如…
pg_basebackup - u postgres主机- h - p - d港/目的地/路径pv检查点=快
站起来的本地实例使用pg_basebackup Postgres
Tar文件的方法
如果你执行pg_baseback tar文件选项,它将产生两个tar文件。一个基地。焦油和pg_wal.tar
提取base.tar。如果你没有不同的细胞膜文件恢复,提取pg_wal。焦油和把wal pg_wal段文件目录。
目录的方法
确保新集群的目录将位于存在适当的权限和存储容量。记住,这将消耗相同数量的空间源数据库。
定义目标数据库将驻留的地方。
- mkdir - p /目的地/路径
- chmod 700 /目的地/路径
- 乔恩postgres: postgres /目的地/路径
作为用户postgres,运行以下命令假设pg_basebackup在你的路径。
源数据库是本地
pg_basebackup - d /目的地/ path-Pv检查点=快速- x流
源数据库是在远程服务器上
pg_basebackup主机- h - p - d港/目的地/ path-Pv检查点=快速- x流
上面的是做什么工作的?
- 假定postgres在本地主机上运行使用默认端口5432和用户执行必要的我感到这样做。
- 发起一个pg_basebackup当前的postgres的运行实例。
- 后将副本保存到指定的路径- d
- 可选地,光伏将显示的进展和详细的输出过程。
- 执行一个快速检查点而不是传播出来。这使得备份开始的更早。
- 流的细胞膜的变化发生在正在运行的集群并将它们保存在新的集群。这将允许启动新的集群没有额外的细胞膜。
上述适用于是否远程数据库。
开始独立的postgres的实例
当pg_basebackup完成后,启动新的本地实例,进入新的数据目录/目标/路径,修改postgresql.conf文件或其他文件你可能已经定义了你之前的港口。
- 设置港口一些不使用的,如5433年。即端口= 5433
- 修改任何必要的内存参数
- 确保,如果启用了存档,档案到另一个位置比原来的集群。
你可以继续开始postgres的新实例如下:
pg_ctl - o - d /目的地/路径“5433 p”开始
您现在应该能够连接到新的集群与集群的凭证作为源
psql - p 5433
站起来一个远程集群
这个过程是几乎相同的本地集群的过程。唯一的区别是你会指定一个主机和凭证。
从远程目标主机
pg_basebackup港口- h source_server - p - u用户名- d /目的地/路径pv检查点=快速- x流
正如你所看到的,我们只是简单地添加一个连接字符串到原始命令我们竞选本地副本。这将生成远程主机上的备份并将其保存到本地目的地的路径。
一旦副本放置在目标主机上,如果有必要,改变你的港口,如果启用了存档,存档位置如上所述。
结论
上面的例子是为了让你开始基本的备份和恢复。他们不涵盖更多高级选项等细胞膜文件的归档时间点恢复,等等。这将在以后的博客或通过网上搜索。此外,使用备份单口副本也将在未来的博客。
提供最好的和最重要的企业级组件从开源社区,设计和测试合作,Percona分布PostgreSQL拥有先进的PostgreSQL备份和恢复选项,如时间点恢复和增量备份,确保您的数据总是安全的。雷竞技下载官网使用这些特性,您可以安心知道Postgres数据库是防止潜在的数据丢失。今天开始下载Percona分布PostgreSQL或阅读在我们雷竞技下载官网全面的文档。






“- d”不是一个支持选择pg_dump(不是8.4.20,当然)。必须作为最后一个参数指定数据库名称前没有旗帜。