A)定期备份大型PostgreSQL数据库(在最新的Ubuntu服务器上运行的8.3版)的最佳解决方案是什么?请不要用那些痛苦的慢插入语句来说pg_dump
B)在现实世界中工作的PostgreSQL数据库复制的最佳解决方案是什么
我认为只有一个答案.
PITR,或时间点恢复.它基本上是对事务日志的归档,据我所知,这是备份的最佳方式.
我已经为8.1设置了几次,但它在8.3中应该是相同的.
在postgresql.conf中你需要做的就是添加:
archive_command = 'test ! -f /path/to/your/backups/archive_logs/%f && cp -i %p /path/to/your/backups/archive_logs/%f此命令将存档日志复制到指定目录,您可以使用您选择的备份软件安全地备份它.
要进行完整备份,您需要先告诉PostgreSQL您正在进行备份.它是通过psql命令
psql "SELECT pg_start_backup('my_backup');"
完成的.之后只需用rsync,cpio或其他工具复制数据目录.如果数据库被大量使用,文件将在复制期间发生变化,因此工具可以正确处理并且不会挽救,这一点非常重要.复制完成后,只需运行
psql "SELECT pg_stop_backup();"
告诉PostgreSQL再次停止它.这些命令的作用是在备份开始的归档日志中放置一个标记,因此在恢复中,它知道从哪里开始读取.此技术还可用于为复制提供热备份,但它不可读,只是在紧急情况下准备好接管.在我认为版本8.4中计划完全热备用,所以在那之前我认为没有其他选择.
如果您使用PITR,那么一件好事就是您可以指定何时需要追加存档日志的时间戳.因此它还可以保存数据库免于意外(例如删除或更改某些数据)