美文网首页
备份postgres数据库

备份postgres数据库

作者: Lupino | 来源:发表于2020-12-08 22:08 被阅读0次

    在我这里 postgres 数据库,是通过docker 跑的,所有很对个节点。

    我来看导出SQL的命令:

    pg_dumpall -f backup.sql
    

    我们通过 docker exec 进入到数据库的容器中,执行上面的命令就可以备份数据库了。

    docker exec -u postgres -w /var/lib/postgresql/data xxx_postgres_1 pg_dumpall -f backup.sql
    

    然后将备份的 SQL 从容器中复制出来就可以。

    docker cp xxx_postgres_1:/var/lib/postgresql/data/backup.sql backup.sql
    

    我们 postgres 服务用docker跑了多个节点,所以需要利用bash来批量备份。

    #!/usr/bin/env bash
    
    ROOT=$(cd "$(dirname "$0")" || exit; pwd)
    
    BACKUP_PATH=${ROOT}/backup/$(date +"%Y-%m-%d")
    
    mkdir -p ${BACKUP_PATH}
    
    NOW=$(date +"%H.%M")
    
    dump_postgres () {
        CONTAINER=$1
        echo "Dump ${CONTAINER}"
        SQL_FILE=${BACKUP_PATH}/${CONTAINER}-${NOW}.sql
        docker exec -u postgres -w /var/lib/postgresql/data ${CONTAINER} pg_dumpall -f backup.sql
        docker cp ${CONTAINER}:/var/lib/postgresql/data/backup.sql ${SQL_FILE}
        gzip ${SQL_FILE}
    }
    
    docker ps | grep postgres | awk '{print $NF}' | while read CONTAINER; do
        dump_postgres ${CONTAINER}
    done
    

    建了一个日期的目录,将要备份的SQL文件放到里面。
    考虑到我们一天可能备份很多次,所以文件名记一个时间。

    我们写成一个 dump_postgres 的函数, 这个函数导出postgres 数据并复制到备份目录下面,然后压缩。

    我们用 docker ps 查看正在运行的 Container,然后用 grep postgres 过滤出 postgres 数据库的 Container, 再用 awk '{print $NF}' 输出最后一列 Container 名称, 最后 while read CONTAINER 读出来,然后执行 dump_postgres ${CONTAINER}

    通过这个脚本,我们就可以一次导出所有 postgres 的数据,将其备份起来。

    相关文章

      网友评论

          本文标题:备份postgres数据库

          本文链接:https://www.haomeiwen.com/subject/lbnqgktx.html