代码之家  ›  专栏  ›  技术社区  ›  poisoned_monkey

目录格式的k8s pod中的数据库pg_dump

  •  0
  • poisoned_monkey  · 技术社区  · 1 年前

    我需要使用pg_dump创建一个Postgres数据库转储。位于Kubernetes pod中的数据库。我正在尝试以目录格式获取转储,而不仅仅是一个.sql文件。但我不明白如何指定目录。

    当我尝试此命令时:

    kubectl exec patroni-0 -- bash -c "pg_dump -U username db_name --format=d" > db_dump_folder
    

    我有一个错误:

    pg_dump: [directory archiver] no output directory specified
    command terminated with exit code 1
    

    提前感谢!

    1 回复  |  直到 1 年前
        1
  •  1
  •   helpinghand    1 年前

    使用时 pg_dump 要以目录格式创建数据库转储,需要指定一个输出目录 pg_泵 可以直接写入。您使用的命令试图将stdout重定向到一个目录,但不是这样 pg_泵 以目录格式工作。相反,您需要使用 -f 选项或 --file 直接在您的 pg_泵 命令

    但是,由于转储需要在Kubernetes pod中完成,因此您希望存储转储的本地机器上的目录必须可供pod访问,或者您可以将其存储在pod中并复制到本地。

    对于第二种选择,您可以这样做:

    1. 处决 pg_泵 在吊舱内 ,在pod上为转储指定一个临时目录:
    kubectl exec patroni-0 -- bash -c "mkdir /tmp/db_dump"
    kubectl exec patroni-0 -- bash -c "pg_dump -U username -d db_name --format=d -f /tmp/db_dump"
    
    1. 将转储从pod复制到本地机器 :
    kubectl cp patroni-0:/tmp/db_dump ./db_dump_folder
    
    1. 然后你可以清理pod中的临时目录 :
    kubectl exec patroni-0 -- bash -c "rm -rf /tmp/db_dump"
    

    希望这能有所帮助。