LLLL1007 2023-02-21 10:46 采纳率: 70%
浏览 101
已结题

ubuntu20.04PostgreSQL自动备份数据库,脚本疑问


    #!/bin/bash
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
     
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.sql"
     
    # Backup database
    pg_dump -U $DB_USER -d $DB_NAME -f $FILE
     
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;

这段脚本报错。
我的需求是:自动备份pg的数据库,并且是以压缩形式备份的,而不是后缀是sql文件,尽量减少文件体积。

img

img

img

  • 写回答

7条回答 默认 最新

  • 普通网友 2023-02-21 12:00
    关注

    不知道你解决了没有?如果没有解决,我们可以聊聊。

    没看到你的报错日志呢?
    ubuntu和pg搭配,主要考虑的是权限多一点,你着重在这一块即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • 鑫鑫缺点金 2023-02-21 11:28
    关注

    优化了一下脚本,添加了容错判断,错误就会立即退出,添加了日志输出,增加了压缩备份文件,增加了文件权限设置

    #!/bin/bash
    
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
    LOG_FILE="/path/to/logfile"
    
    # Error handling
    set -e
    if [ ! -d "$BACKUP_DIR" ]; then
        echo "Error: Backup directory $BACKUP_DIR does not exist."
        exit 1
    fi
    
    # Redirect output to log file
    exec >> "$LOG_FILE" 2>&1
    
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.sql.gz"
    
    # Backup database
    pg_dump -U $DB_USER -d $DB_NAME | gzip > "$FILE"
    
    # Set file permissions
    chmod 600 "$FILE"
    
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
    
    评论
  • MarkHan_ 2023-02-21 10:56
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    您可以使用以下脚本来备份 PostgreSQL 数据库并以压缩形式保存:

    #!/bin/bash
    
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
    
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.sql.gz"
    
    # Backup database
    pg_dump -U $DB_USER -d $DB_NAME | gzip > $FILE
    
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -mtime +7 -name "*.sql.gz" -exec rm {} \;
    

    此脚本将使用 pg_dump 命令备份 PostgreSQL 数据库,并使用 gzip 压缩命令将备份文件压缩为 .gz 格式。备份文件将保存在 $BACKUP_DIR 目录中,文件名格式为 YYYY-MM-DD_HH-MM-SS.sql.gz。脚本还包括删除 7 天前的备份文件。

    请确保您将脚本中的 $BACKUP_DIR、$DB_USER 和 $DB_NAME 替换为您自己的值,并使用具有足够权限的用户运行脚本。

    评论
  • 「已注销」 2023-02-21 10:59
    关注

    参考GPT和自己的思路,报错的原因可能是,
    没有设置正确的权限:如果备份目录没有足够的权限进行写入,那么备份脚本就会失败。请确保您正在使用正确的用户权限来运行备份脚本,并且备份目录具有写入权限。
    PostgreSQL 凭据不正确:如果您没有正确地设置 DB_USER 和 DB_NAME 变量,那么备份脚本将无法连接到 PostgreSQL 数据库并进行备份。
    备份目录不存在:如果您尝试备份到一个不存在的目录,备份脚本将会失败。请确保您已经创建了备份目录,并且将目录的路径正确地设置为 BACKUP_DIR 变量。
    其他错误:还有许多其他可能导致脚本运行失败的问题,包括系统故障、缺少依赖项、语法错误等等。如果您能提供更多的信息和错误消息,我将更容易地确定导致脚本失败的原因。
    如果您希望将备份文件压缩,可以在备份数据库之后使用 gzip 命令压缩备份文件,如下所示:

    #!/bin/bash
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
    
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.sql"
    
    # Backup database and compress the backup file
    pg_dump -U $DB_USER -d $DB_NAME | gzip > $FILE.gz
    
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
    

    在这个脚本中,我们使用了管道将 pg_dump 的输出发送到 gzip 命令中,然后将压缩文件保存到文件 $FILE.gz 中。在删除七天前的备份文件时,由于备份文件已经被压缩,您需要相应地更改 find 命令以匹配压缩文件的文件名后缀,如下所示:

    find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \;
    

    这样就会删除七天前的所有压缩备份文件,而保留其他类型的文件(如日志文件等)不受影响。
    如果对您有帮助,请给与采纳,谢谢。

    评论
  • GISer Liu 2023-02-21 15:16
    关注

    以下答案基于ChatGPT与GISer Liu编写:

    你可以使用 pg_dump 命令的 -F 参数指定备份格式,-F 后面接的参数有 pctd,分别代表以 plaincustomtardirectory 格式备份。你可以选择使用 custom 格式,并且将备份数据进行压缩,压缩方式可以使用 gzip 或者 bzip2。以下是修改后的备份脚本:

    bash

    #!/bin/bash
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
     
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.dump"
     
    # Backup database
    pg_dump -U $DB_USER -F c -b -v -f $FILE $DB_NAME | gzip
     
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -name "*.dump.gz" -mtime +7 -exec rm {} \;
    

    这个脚本会使用 pg_dump 命令以 custom 格式备份数据库,并将备份数据通过管道传递给 gzip 命令进行压缩,生成的备份文件名称以 .dump.gz 结尾。在备份完成后,脚本会删除所有扩展名为 .dump.gz 的备份文件,且文件最后修改时间超过 7 天。


    评论
  • 喊你敲代码 2023-02-21 15:33
    关注

    修改后的脚本:

    #!/bin/bash
    
    # Configuration
    BACKUP_DIR="/path/to/backup/directory"
    DB_USER="postgres"
    DB_NAME="mydatabase"
    
    # Generate filename
    NOW=$(date +"%Y-%m-%d_%H-%M-%S")
    FILE="$BACKUP_DIR/$NOW.sql.gz"
    
    # Backup database and compress
    pg_dump -U $DB_USER -d $DB_NAME | gzip > $FILE
    
    # Delete backups older than 7 days
    find $BACKUP_DIR -type f -mtime +7 -name "*.sql.gz" -delete
    
    评论
  • 特创数字科技 阿克苏市特创数字科技中心官方账号 2023-02-22 23:32
    关注

    该回答引用CHatGPT 哦

    您可以使用cron定时任务来实现自动备份PostgreSQL数据库,具体步骤如下:
    1. 创建备份脚本,例如:
    #!/bin/bash
    pg_dump -U postgres -Fc mydb > /path/to/backup/mydb_$(date +%!Y(MISSING)%!m(MISSING)%!d(MISSING)).dump
    2. 使用crontab -e命令编辑定时任务,例如:
    0 0 * * * /path/to/backup/backup.sh
    3. 保存并退出,即可实现自动备份PostgreSQL数据库的功能。
    
    
    评论
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月4日
  • 已采纳回答 2月24日
  • 修改了问题 2月21日
  • 创建了问题 2月21日

悬赏问题

  • ¥15 微信实时共享位置修改
  • ¥100 TG的session协议号转成直登号号后客户端登录几分钟后自动退出设备
  • ¥30 共模反馈回路的小信号增益
  • ¥15 arduino ssd1306函数与tone函数放歌代码不兼容问题
  • ¥70 0.96版本hbase的row_key里含有双引号,无法deleteall
  • ¥20 Ida Pro增加插件出现问题
  • ¥15 诊断性META分析合并效能的检验
  • ¥15 请问abb根据色块判断奇偶数并根据批次号放入仓储
  • ¥66 开发PC客户端一定也要开发上位机吗?
  • ¥20 Java eclipse连接数据库