SCRAM authentication requires libpq version 10 or above

文章讲述了在生产环境中使用pg_dump对PostgreSQL进行备份时遇到的问题,由于服务器版本过低导致无法使用SCRAM认证。作者通过创建Docker容器解决此问题,提供了一个包含脚本的解决方案,用于在容器中执行备份并自动管理版本和权限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    今天需要对生产环境的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来指定密码:

pg_dump dumps a database as a text file or to other formats.

Usage:
  pg_dump [OPTION]... [DBNAME]

General options:
  -f, --file=FILENAME          output file or directory name
  -F, --format=c|d|t|p         output file format (custom, directory, tar,
                               plain text (default))
  -v, --verbose                verbose mode
  -V, --version                output version information, then exit
  -Z, --compress=0-9           compression level for compressed formats
  --lock-wait-timeout=TIMEOUT  fail after waiting TIMEOUT for a table lock
  -?, --help                   show this help, then exit

Connection options:
  -h, --host=HOSTNAME      database server host or socket directory
  -p, --port=PORT          database server port number
  -U, --username=NAME      connect as specified database user
  -w, --no-password        never prompt for password
  -W, --password           force password prompt (should happen automatically)
  --role=ROLENAME          do SET ROLE before dump

If no database name is supplied, then the PGDATABASE environment
variable value is used.

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

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

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

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

#!/bin/bash
docker run --name pd -e POSTGRES_PASSWORD=pgpasswd -e PGPASSWORD=pgpasswd \
-v /data1/dump:/var/lib/postgresql/data postgres:14 pg_dump -h 10.0.0.171 \
-p 5432  -U pguser -f /var/lib/postgresql/data/pd.sql -d alchemy_lab
docker rm pd
date=$(date +%Y%m%d)
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值