目前,我每天开始工作之前,都会完成以下程序:
- ssh 到生产服务器
- gzip 我们的每日数据库转储文件
- 将 gzip 压缩的转储文件复制到我的电脑上
- gunzip 转储文件
- dropdb我的数据库
- createdb 我的数据库
- psql mydatabase < dump.sql
是否有可能(我确信是)在 Mac OSX 上自动完成此过程?这样我早上上班时就可以完成。如果可以,最快捷、最简单的方法是什么
答案1
为了允许 ssh 登录到您的生产服务器而无需您输入密码,您需要设置一些非交互式身份验证(如果尚未设置)。
http://www.walkernews.net/2008/06/06/how-to-setup-non-interactive-ssh-login/
http://troy.jdmz.net/rsync/index.html
然后基本上就是将每个步骤的命令添加到 shell 脚本并设置 cron 每天早上运行该 shell 脚本。
答案2
是的 - 从您的服务器编写脚本并安排 gzip/scp(或者更好的是,使其成为 rsync)部分。如果它也是 MacOS,我不确定执行该操作的详细步骤是什么,但这就是您想要的概要。
然后,如果您知道它总是会在某个时间完成,只需在您的计算机上安排一个脚本来执行 gunzip/dropdb/createdb/psql。如果它不总是在同一时间完成,那么您可以做一些花哨的事情,检查文件状态、修改时间等。
您对上述哪些部分不确定,或者觉得需要更多详细信息?您是脚本新手,还是不确定如何使用 cron 或其他程序安排任务?
PostGRES 是否本身支持任何类型的日志传送或镜像?如果是,那可能是一个更好的一体化解决方案。
答案3
首先,您需要设置您的 ssh 服务器,以便它接受 RSA 密钥而不是密码。 这在其他地方有记载。然后,您将需要设置您计划使用的帐户,以获得适当的 DSA/RSA 密钥,这将允许该帐户自动登录。
* ssh to the production server
这不是必需的。您可以使用该-C
选项直接在远程服务器上执行命令。例如,您提到的接下来两个步骤...
* gzip our daily database dump file
* scp the gzipped dump file over to my computer
...看起来类似于此:
ssh [email protected] -C 'gzip dump > dump.gz'
scp [email protected]:/path/to/dump/dump.gz /path/to/destination/dump.gz
将刚才提到的每个命令以及您手动输入的其余命令放入一个文件中。这些命令的顺序必须与您通常输入的顺序相同。我们将dump-script.sh
在此示例中调用它。根据需要更改所有权和权限,以便文件可以执行。
警告:
如果您不在脚本中执行错误检查,则数据丢失的可能性非常高。除非您在脚本中添加错误处理,否则没有保证它将 100% 正确地工作。 使用删除数据库的命令,在适当的情况下很容易丢失接收转储的机器上的所有数据。您很可能希望扩展和修饰脚本以允许错误检测,以便它只删除数据库并导入新数据转账成功后。如果您对此感到不舒服,请不要运行它,也不要创建 crontab 条目。
调试完脚本并确认它可以正确处理错误后,您可以考虑将其添加到常规 cron 计划中。以您希望使用的帐户身份登录以执行这些操作,然后键入:
crontab -e
....这将为你提供一个编辑器。创建如下条目:
# Nightly Database Dump, at Midnight
0 0 * * * /path/to/my/dump-script.sh
...然后:wq
按该顺序输入,并按回车键(假设这vi
是您的默认文本编辑器)。
更好的解决方案:如果您可以通过网络访问 PostgreSQL 数据库,为什么不直接使用远程连接通过网络转储数据库呢?这更简洁,并且可以结合少量脚本使其成为从一个到另一个的直接数据“管道”。