Ass*_*vie 12 git postgresql backup
我看到它将PostgeSQL数据库转储到一个大的SQL文件然后提交并推送到远程Git仓库的方式可能是一个了不起的备份解决方案:我获得了所有版本的历史记录,哈希,安全传输,单向(真的很难)通过推送,高效存储(假设没有二进制文件)并且没有新图像破坏备份的可能性(这是rsync的风险)来搞乱和删除数据.
有没有人使用过这种方法,尤其是pg,可以分享他/她的经验吗?陷阱?
Tom*_*rae 13
以下是有关如何为postgres执行此操作的完整脚本详细信息.
这些脚本假定存在一个名为"backup"的用户,该用户可以访问所有(超级用户)或特定数据库.凭据存储在主目录中的.pgpass文件中.该文件看起来像这样(假设密码是'秘密').
〜/ .pgpass
*:*:*:backup:secret
Run Code Online (Sandbox Code Playgroud)
确保在.pgpass上设置正确的安全性,否则将被忽略
chmod 0600 ~/.pgpass
Run Code Online (Sandbox Code Playgroud)
这会转储特定的数据库.
backup.sh
pg_dump dbname -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master
Run Code Online (Sandbox Code Playgroud)
注意:您可能不希望对数据库转储使用任何文件拆分选项,因为任何插入/删除都会导致"多米诺"效果并更改所有文件,从而在git中创建更多的增量/更改.
此脚本将转储整个数据库集群(所有数据库):
pg_dumpall -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master
Run Code Online (Sandbox Code Playgroud)
注意:您可能不希望对数据库转储使用任何文件拆分选项,因为任何插入/删除都会导致"多米诺"效果并更改所有文件,从而在git中创建更多的增量/更改.
最后一步是将其添加到cron作业中.所以,'crontab -e'然后添加如下内容(每天午夜运行)
# m h dom mon dow command
# run postgres backup to git
0 0 * * * /home/ubuntu/backupdbtogit/backup.sh
Run Code Online (Sandbox Code Playgroud)
如果需要还原数据库,则需要签出要还原的版本,然后传递给pg.(有关详细信息,请访问http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE)
对于单个数据库:
psql dbname < infile
Run Code Online (Sandbox Code Playgroud)
对于整个集群
psql -f infile postgres
Run Code Online (Sandbox Code Playgroud)
这些都不是特别复杂,但是查找所有部件总是很乏味.
我遇到了git在推送时失败的问题.这是由于git使用了大量内存 - 几个提交已备份.我通过在我的本地计算机(具有足够的RAM)上安装服务器git repo来解决了这个问题.我使用sshfs挂载服务器磁盘,然后从我的工作站计算机提交.在我这样做之后,低内存服务器恢复提交没有问题.
一个更好的选择是在包中限制git的内存使用(来自有没有办法限制"git gc"使用的内存量?).
git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"
Run Code Online (Sandbox Code Playgroud)
注意:我还没有尝试设置内存限制,因为我没有再次遇到推送失败问题.
通常,您应该使用备份工具进行备份,并使用版本控制工具进行版本控制。它们是相似的,但不相同。
有人将两者混为一谈,例如,实质上数据库中的任何内容都是版本,这不一定是错误的,但要清楚您想要的是什么。
如果您只是在谈论架构,那么使用Git进行“备份”可能不会做很多错误。但是,如果您要备份数据,则事情可能会变得复杂。大文件的Git并不是很好。您可以使用诸如git-annex之类的方法来解决此问题,但是随后您需要一个单独的备份机制来创建外部文件。同样,使用“适当的”备份方法(例如pg_dump或WAL归档)还具有其他优点,例如能够还原数据库的子集或进行时间点恢复。
您可能还希望备份操作系统的其他部分。你是怎样做的?最好不要使用版本控制系统,因为它们不能很好地保留文件权限,时间戳和特殊文件。因此,将数据库备份绑定到现有的备份系统会很有意义。
我肯定会推荐它。人们也一直在这样做,主要是围绕 MySQL,但我认为没有太大区别:
http://www.viget.com/extend/backup-your-database-in-git/
另一种方法是使用 ZFS 快照进行备份。
http://www.makingitscale.com/2010/using-zfs-for-fast-mysql-database-backups.html
归档时间: |
|
查看次数: |
3297 次 |
最近记录: |