我尝试通过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
按预期输出到控制台。
答案 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
将继续寻找简化的方法来执行此操作。