【问题标题】:Remote trigger a postgres database backup远程触发 postgres 数据库备份
【发布时间】:2012-08-03 14:30:30
【问题描述】:

我想在从我的部署服务器(不是数据库服务器)运行数据库迁移之前和之后备份我的生产数据库,我在 CentOS 5 机器上安装了一个 Postgresql 8.4 服务器。访问数据库的网站位于运行 MVC.Net 应用程序的 Windows 2008 服务器上,它检查源代码中的更改,编译项目,运行任何 DB 更改,然后部署到 IIS。

我已将数据库服务器设置为为日常备份执行 crontab 作业备份,但我还想要一种在部署过程中从部署服务器调用备份的方法。据我所知,没有办法告诉数据库从客户端连接来备份自己。如果我从 Web 服务器调用 pg_dump 作为部署脚本的一部分,它将在 Web 服务器上创建备份(不可取)。我查看了 COPY 命令,它可能不会给我想要的东西。 MS SQLServer 允许您从数据库连接中调用 BACKUP 命令,这会将备份放在数据库机器上。

我发现这篇关于 MySQL 的帖子,它不是 MySQL 中支持的功能。 Postgres是一样的吗? Remote backup of MySQL database

实现这一目标的最佳方法是什么?我想过创建一个与 DB 服务器建立 SSH 连接的小型应用程序,然后调用 pg_dump?这意味着我将 SSH 连接信息存储在服务器上,如果可能的话,我真的不想这样做。

【问题讨论】:

  • 你的问题很混乱。您想在 Windows 服务器W 上运行一个脚本来创建在 CentOS 服务器C 上运行的数据库的备份,该备份将存储在服务器C 上,对吧?
  • @Tometzky,是的,我在 W 上有一个 C# 脚本,它运行到网站的部署。作为部署的一部分,它连接到数据库C 并在数据库结构或数据需要更改以匹配新部署(迁移)时运行数据库脚本。作为此部署脚本的一部分,我想在数据库更改之前和之后强制将数据库的备份存储在C。

标签: postgresql database-backups remote-backup


【解决方案1】:

创建数据库用户pgbackup和assign him read-only privileges to all your database tables。

使用/bin/bash shell 在 CentOS 服务器上设置新的操作系统用户 pgbackup。

以pgbackup 登录并创建一对不带密码的ssh 身份验证密钥,并允许该用户使用生成的私钥登录:

su - pgbackup
ssh-keygen -q -t rsa -f ~/.ssh/id_rsa -N ""
cp -a ~/.ssh/.id_rsa.pub ~/.ssh/authorized_keys

创建文件~pgbackup/.bash_profile:

exec pg_dump databasename --file=`date +databasename-%F-%H-%M-%S-%N.sql`

在 Windows 上设置您的脚本以使用 ssh 进行连接并使用主键进行授权。除了创建数据库备份之外,它不能做任何事情,所以它是相当安全的。

【讨论】:

  • 我试试看,听起来不错。谢谢。
【解决方案2】:

我认为,如果您创建一个触发器,该触发器使用 PostgreSQL 模块 dblink 从 PL/pgSQL 中建立远程数据库连接,那么这是可能的。

【讨论】:

  • 我不确定我是否遵循这将有什么帮助。
【解决方案3】:

我不确定您的意思,但我认为您可以在 Windows 计算机上使用 pg_dump:

pg_dump --host=centos-server-name > backup.sql

您需要在那里安装 Windows 版本的 PostgreSQL,因此会安装 pg_dump.exe,但您不需要启动 PostgreSQL 服务,甚至不需要在那里创建表空间。

【讨论】:

  • 我试过了,据我了解,pg_dump 将文件保存在本地,并且 --host 标志是连接的一部分,而不是备份文件的实际位置。问题就出在这里,我想要数据库服务器上的备份文件。
【解决方案4】:

嗨,迈克,你是对的,

使用 pg_dump 我们可以只将备份保存在本地系统上。在我们的例子中,我们在数据库服务器上创建了一个脚本来进行基本备份。我们在另一台服务器上创建了一个期望脚本,该脚本在数据库服务器上运行。

我们所有的服务器都是 linux 服务器,我们使用 shell 脚本完成了这项工作。

【讨论】:

  • 和...?它缺少后半部分。
猜你喜欢
  • 2021-12-08
  • 2011-04-07
  • 2017-08-14
  • 1970-01-01
  • 2018-08-20
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
相关资源
最近更新 更多