gpt4 book ai didi

git - 用 Git 备份数据库 - 好主意?

转载 作者:IT王子 更新时间:2023-10-29 00:45:20 26 4
gpt4 key购买 nike

我看到将 PostgeSQL 数据库转储到一个大 SQL 文件中,然后提交并推送到远程 Git 存储库的方式可能是一个了不起的备份解决方案:我获得了所有版本的历史记录、散列、安全传输、单向(真的很难通过推送来弄乱和删除数据)、高效存储(假设没有二进制文件)并且新图像不可能破坏备份(这是 rsync 的风险)。

有没有人用过这种方法,尤其是pg,可以分享他/她的经验吗?陷阱?

最佳答案

这是有关如何为 postgres 执行此操作的完整脚本详细信息。

创建备份用户

脚本假定存在一个名为“备份”的用户,该用户可以访问所有( super 用户)或特定数据库。凭据存储在主目录中的 .pgpass 文件中。该文件看起来像这样(假设密码是“ secret ”)。

~/.pgpass

*:*:*:backup:secret

确保您在 .pgpass 上设置了正确的安全性,否则它将被忽略

chmod 0600 ~/.pgpass

备份单个数据库

这会转储一个特定的数据库。

备份.sh

pg_dump dbname -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master

注意:您可能不想为数据库转储使用任何文件拆分选项,因为任何插入/删除都会导致“多米诺骨牌”效应并更改所有文件,从而在 git 中创建更多增量/更改。

备份 native 所有数据库

此脚本将转储整个数据库集群(所有数据库):

pg_dumpall -U backup > backup.sql
git add .
git commit -m "backup"
git push origin master

注意:您可能不想为数据库转储使用任何文件拆分选项,因为任何插入/删除都会导致“多米诺骨牌”效应并更改所有文件,从而在 git 中创建更多增量/更改。

安排它运行

最后一步是将其添加到 cron 作业中。因此,'crontab -e' 然后添加如下内容(每天午夜运行)

# m h  dom mon dow   command
# run postgres backup to git
0 0 * * * /home/ubuntu/backupdbtogit/backup.sh

恢复

如果您需要恢复数据库,您将 check out 要恢复的版本,然后传递给 pg。 (这里有更多详细信息 http://www.postgresql.org/docs/8.1/static/backup.html#BACKUP-DUMP-RESTORE )

对于单个数据库:

psql dbname < infile    

对于整个集群

psql -f infile postgres

这些都不是特别复杂,但查找所有部分总是很乏味。


在内存有限的服务器上崩溃

我遇到了 git 推送失败的问题。这是由于 git 使用了大量内存 - 多个提交已经备份。我通过在我的本地机器(有足够的 RAM)上安装服务器 git repo 解决了这个问题。我使用 sshfs 安装服务器磁盘,然后从我的工作站计算机提交。在我这样做之后,低内存服务器恢复提交没有问题。

更好的选择是在打包期间限制 git 的内存使用(来自 Is there a way to limit the amount of memory that "git gc" uses? )。

git config --global pack.windowMemory "100m"
git config --global pack.packSizeLimit "100m"
git config --global pack.threads "1"

注意:我还没有尝试设置内存限制,因为我没有再次出现推送失败的问题。

关于git - 用 Git 备份数据库 - 好主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5799690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com