通过 SSH 从 Docker 转储 PostgreSQL 数据库
Dump PostgreSQL Database from Docker through SSH
我正在租用远程服务器。在该服务器上,我在 Docker 实例中 运行 设置了一个 PostgreSQL 数据库。我想直接将数据库备份到我的本地主机,而不必在远程服务器上制作副本。
我知道我可以使用以下方法将数据库从 Docker 实例转储到远程服务器的本地文件 (sqlbkp.bak
):
docker exec <container_name> pg_dump <schema_name> > /tmp/sqlbkp.bak
然后我可以使用 Rync
从我的本地主机将该远程备份传输到我的本地主机,例如:
rsync -a user@remoteserver:/tmp/sqlbkp.bak /home/sqlbkp.bak
但是,使用这两个步骤,我需要在远程服务器上使用额外的磁盘 space 进行备份(至少与数据库一样大)。然后,在传输备份后,我可以立即释放遥控器 space。我觉得这很不方便,而且似乎没有必要。有没有办法将这些步骤合并为一个,这样我就可以 运行 pg_dump
通过 SSH(针对 Docker 实例中的数据库)?
您可以使用 ssh 在远程执行任何命令,然后该命令的标准输出通过 ssh 通道传回成为 ssh 的标准输出,并且可以重定向到本地计算机上的文件。
ssh user@dockerhost 'docker exec <container_name> pg_dump <schema_name>' > /home/sqlbkp.bak
我正在租用远程服务器。在该服务器上,我在 Docker 实例中 运行 设置了一个 PostgreSQL 数据库。我想直接将数据库备份到我的本地主机,而不必在远程服务器上制作副本。
我知道我可以使用以下方法将数据库从 Docker 实例转储到远程服务器的本地文件 (sqlbkp.bak
):
docker exec <container_name> pg_dump <schema_name> > /tmp/sqlbkp.bak
然后我可以使用 Rync
从我的本地主机将该远程备份传输到我的本地主机,例如:
rsync -a user@remoteserver:/tmp/sqlbkp.bak /home/sqlbkp.bak
但是,使用这两个步骤,我需要在远程服务器上使用额外的磁盘 space 进行备份(至少与数据库一样大)。然后,在传输备份后,我可以立即释放遥控器 space。我觉得这很不方便,而且似乎没有必要。有没有办法将这些步骤合并为一个,这样我就可以 运行 pg_dump
通过 SSH(针对 Docker 实例中的数据库)?
您可以使用 ssh 在远程执行任何命令,然后该命令的标准输出通过 ssh 通道传回成为 ssh 的标准输出,并且可以重定向到本地计算机上的文件。
ssh user@dockerhost 'docker exec <container_name> pg_dump <schema_name>' > /home/sqlbkp.bak