首页 > 解决方案 > 从 azure 容器实例备份 postgresql

问题描述

我创建了 Azure 容器实例并在其中运行了 postgresql。挂载了一个 azure 容器实例存储帐户。我怎样才能开始备份工作,可能是通过调度程序?

当我运行命令时

az container exec --resource-group Vitalii-demo --name vitalii-demo --exec-command "pg_dumpall -c -U postgrace > dump.sql"

我收到一个错误error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \ "pg_dumpall -c -U postgrace > dump.sql\": executable file not found in $PATH"

我读到了

Azure Container Instances currently supports launching a single process with az container exec, and you cannot pass command arguments. For example, you cannot chain commands like in sh -c "echo FOO && echo BAR", or execute echo FOO.

也许有机会作为任务运行?谢谢。

标签: postgresqlazuredockerazure-container-instances

解决方案


不幸的是——正如你已经提到的——不可能运行任何带有参数的命令,echo FOO或者将多个命令与&&.
https://docs.microsoft.com/en-us/azure/container-instances/container-instances-exec#run-a-command-with-azure-cli

您应该能够使用--exec-command /bin/bash.
但是,如果您想以编程方式安排备份,这将无济于事。

pg_dumpall也可以通过环境变量配置:
https ://www.postgresql.org/docs/9.3/libpq-envars.html

您可以使用正确的环境变量启动备份容器以连接数据库服务:

  • PGHOST
  • PGPORT
  • PG用户
  • PG密码

当设置了这些变量时,一个简单的pg_dumpall应该完全做你想要的。

希望有帮助。

更新:
是的,即使通过环境变量配置连接,您也无法声明所需的输出文件......对不起。

您可以使用预配置的脚本创建自己的 Dockerimage 来转储您的 PostgreSQL 数据库。
这样做,您可以在脚本中配置输出文件,然后简单地使用--exec-command dump_my_db.sh.
请记住,您的脚本必须位于默认值中的某个位置,$PATH例如/usr/local/bin.


推荐阅读