• SCRAM authentication requires libpq version 10 or above


        今天需要对生产环境的postgres进行备份,使用pg_dump命令:

    pg_dump -h 10.0.0.171 -p 5432 -U pguser -d alchemy_lab -f ./backup.sql

    提示需要输入密码,也可以利用环境变量预置密码:

    export PGPASSWORD=pgpasswd

    另外老版本的pg_dump命令没有-d选项,选择的数据库都写到最后,而且-W仅仅是需要密码的意思,并不能通过-W passwd来指定密码:

    1. pg_dump dumps a database as a text file or to other formats.
    2. Usage:
    3. pg_dump [OPTION]... [DBNAME]
    4. General options:
    5. -f, --file=FILENAME output file or directory name
    6. -F, --format=c|d|t|p output file format (custom, directory, tar,
    7. plain text (default))
    8. -v, --verbose verbose mode
    9. -V, --version output version information, then exit
    10. -Z, --compress=0-9 compression level for compressed formats
    11. --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock
    12. -?, --help show this help, then exit
    13. Connection options:
    14. -h, --host=HOSTNAME database server host or socket directory
    15. -p, --port=PORT database server port number
    16. -U, --username=NAME connect as specified database user
    17. -w, --no-password never prompt for password
    18. -W, --password force password prompt (should happen automatically)
    19. --role=ROLENAME do SET ROLE before dump
    20. If no database name is supplied, then the PGDATABASE environment
    21. variable value is used.

    但是报错SCRAM authentication requires libpq version 10 or above:

    1. |># pg_dump -h 10.0.0.171 -p 5432 -U pguser alchemy_lab -f ./backup.sql
    2. pg_dump: [archiver (db)] connection to database "alchemy_lab" failed:
    3. SCRAM authentication requires libpq version 10 or above

    应该是本地pg客户端版本太低,而centos通过 ```yum update psql``` 命令也无法提升版本。尝试了网上几个办法都没有成功,于是脾气暴躁的我变得毫无耐心,于是决定用docker来解决。

    现在本地准备好脚本 dump.sh, 将其放在/data1/dump/目录下,对应下面的本地文件挂载目录: 

    1. #!/bin/bash
    2. docker run --name pd -e POSTGRES_PASSWORD=pgpasswd -e PGPASSWORD=pgpasswd \
    3. -v /data1/dump:/var/lib/postgresql/data postgres:14 pg_dump -h 10.0.0.171 \
    4. -p 5432 -U pguser -f /var/lib/postgresql/data/pd.sql -d alchemy_lab
    5. docker rm pd
    6. date=$(date +%Y%m%d)
    7. mv /data1/dump/pd.sql /data1/dump/pd.sql.$date
    1. POSTGRES_PASSWORD是pg容器初始化启动时需要的密码;
    2. PGPASSWORD是pg_dump执行时需要的远程pg数据库的密码;
    3. -f 指定将备份文件存在/var/lib/postgresql/data/pd.sql, 其实就是本地文件/data1/dump/pd.sql;
    4. 将文件名加入日期,接下来可以将文件传到oss
  • 相关阅读:
    计算机网络 - 应用层 选择复习题
    tp6获取请求参数
    seatunnel-web-1.0.0运行时候报错
    说说Mysql的四种隔离级别
    使用定时器中断进行延时,可能会遇到的一个小bug
    【电路参考】缓启动电路
    .NET8.0 AOT 经验分享 FreeSql/FreeRedis/FreeScheduler 均已通过测试
    mysql数据库基本操作中select查询
    【JAVA开发】提高开发效率的工具分享
    C#/.NET/.NET Core拾遗补漏合集(24年6月更新)
  • 原文地址:https://blog.csdn.net/uestczshen/article/details/133340979