0

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

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

我发现这篇关于 MySQL 的帖子,它不是 MySQL 中支持的功能。Postgres是一样的吗? MySQL数据库的远程备份

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

4

4 回答 4

1

创建一个数据库用户pgbackup为他分配对所有数据库表的只读权限

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

登录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和授权。除了创建数据库备份之外,它不能做任何事情,所以它是相当安全的。

于 2012-08-02T16:28:58.440 回答
0

嗨,迈克,你是对的,

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

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

于 2012-08-02T08:50:51.653 回答
0

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

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

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

于 2012-08-01T22:13:42.400 回答
0

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

于 2012-08-01T21:21:39.007 回答