Docker容器中的pg_dump

时间:2018-04-23 11:36:24

标签: bash shell docker command-line kubernetes

我尝试通过pg_dump在Docker容器中运行kubectl并将输出保存到本地计算机。

这是我到目前为止所拥有的:

kubectl exec -it MY_POD_NAME -- pg_dump -h DB_HOST -U USER_NAME SCHEMA_NAME > backup.sql

然而,这只是暂停。我很确定这是因为--忽略了>

kubectl exec -it MY_POD_NAME -- pg_dump -h DB_HOST -U USER_NAME SCHEMA_NAME按预期输出到控制台。

3 个答案:

答案 0 :(得分:4)

使用kubectl port-forward POD_NAME 6000:5342将您的pod端口(假设在5432上展示)转发到localhost:6000

然后直接使用主机名pg_dump运行localhost,并将端口6000

$ pg_dump -h DB_HOST -U USER_NAME SCHEMA_NAME > backup.sql

答案 1 :(得分:1)

如果数据库确实在远程kubernetes实例中作为docker映像运行,那么我成功完成了

kubectl exec -it POD_NAME -- pg_dump -h localhost -U DB_USER DB_NAME > backup.sql

其中localhost指向远程实例中的localhost。直接从本地终端运行,无论数据库本身是否在云中运行,这都将数据库转储保存到本地计算机上。

答案 2 :(得分:0)

管理解决自己 - 不是最优雅的解决方案,但它有效。

首先,我在群集中的一个pod上打开一个shell,该shell具有对RDS实例的网络访问权限:

kubectl exec -it psql-xxx-xxx sh

连接到shell后,运行pg_dump备份数据库:

pg_dump -h db.internal.dns -U user schema_name > backup.sql

备份完成后,退出容器并将文件从pod复制到我的本地:

kubectl cp psql-xxx-xxx:/backup.sql ./backup.sql

将继续寻找简化的方法来执行此操作。