我想在从部署服务器(而不是数据库服务器)运行数据库迁移之前和之后备份我的生产数据库。我在CentOS 5计算机上安装了Postgresql 8.4服务器。访问数据库的网站位于运行MVC.Net应用程序的Windows 2008服务器上,它检查源代码中的更改,编译项目,运行任何数据库更改,然后部署到IIS。
我已将数据库服务器设置为每日备份执行crontab作业备份,但我还想要一种在部署过程中从部署服务器调用备份的方法。根据我的判断,没有办法告诉数据库从客户端连接自我支持。如果我从Web服务器调用pg_dump作为部署脚本的一部分,它将在Web服务器上创建备份(不可取)。我看过COPY命令,它可能不会给我我想要的东西。 MS SQLServer允许您从数据库连接中调用BACKUP命令,该连接将备份放在数据库计算机上。
我发现这篇关于MySQL的帖子,并且它不是MySQL中支持的功能。 Postgres是一样的吗? Remote backup of MySQL database
实现这一目标的最佳方法是什么?我想创建一个与数据库服务器建立SSH连接的小应用程序,然后调用pg_dump?这意味着我将SSH连接信息存储在服务器上,如果可能的话,我真的不想这样做。
答案 0 :(得分:1)
创建数据库用户pgbackup
和assign him read-only privileges to all your database tables。
在具有pgbackup
shell的CentOS服务器上设置新的OS用户/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
进行连接并使用主键进行授权。除了创建数据库备份之外,它将无法执行任何操作,因此它将是相当安全的。
答案 1 :(得分:0)
我认为如果你创建一个使用PostgreSQL模块dblink从PL / pgSQL中建立远程数据库连接的触发器,这是可能的。
答案 2 :(得分:0)
我不确定您的意思,但我认为您可以在Windows计算机上使用pg_dump
:
pg_dump --host=centos-server-name > backup.sql
你需要在那里安装Windows版本的PostgreSQL,所以会安装pg_dump.exe
,但你不需要启动PostgreSQL服务,甚至不需要在那里创建表空间。
答案 3 :(得分:0)
嗨,迈克,你是对的,
使用pg_dump我们只能在本地系统上保存备份。在我们的例子中,我们在数据库服务器上创建了一个用于进行基本备份的脚本。我们在另一台服务器上创建了一个expect脚本,该脚本在数据库服务器上运行脚本。
我们所有的服务器都是linux服务器,我们使用shell脚本完成了这项工作。