pg_dump postgres数据库来自远程服务器

时间:2015-04-15 10:52:50

标签: postgresql ssh remote-server pg-dump

我试图在我们的DMZ中的远程服务器上pg_dump一个SQL数据库。有两个问题。

1)远程服务器上没有剩余大量空间,因此正常命令运行以本地备份数据库 pg_dump -C database > sqldatabase.sql.bak因空间问题而无法工作。

2)我也无法使用其他版本的pg_dump命令将数据库从远程服务器转储到本地服务器:

pg_dump -C -h remotehost -U remoteuser db_name | psql localhost -U localuser db_name

因为服务器在我们的DMZ中并且端口5432被阻止。我希望看到的是,是否可以pg_dump数据库并立即将其(ssh或其他形式)作为文件保存到远程服务器。 我的尝试是:pg_dump -C testdb | ssh admin@ourserver.com | > /home/admin/testdb.sql.bak

有谁知道我想要实现的目标是否可行?

5 个答案:

答案 0 :(得分:64)

您可以将ssh连接到远程服务器,连接pg_dump调用并将输出发送回本地机器的stdout。

ssh user@remote_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
 >> backup_file_on_your_local_machine.sql

编辑:修正了一个拼写错误。

答案 1 :(得分:5)

使用pg_dump从远程Postgresql数据库创建备份:

pg_dump -h [host address] -Fc -o -U [database user] <database name> > [dump file]

以后可以使用以下命令在同一远程服务器上将其还原:

sudo -u postgres pg_restore -C mydb_backup.dump

例如:

pg_dump -h 67.8.78.10 -Fc -o -U myuser mydb > mydb_backup.dump

完整(所有数据库和对象)

pg_dumpall -U myuser -h 67.8.78.10 --clean --file=mydb_backup.dump

从pg_dumpall --clean恢复:

psql -f mydb_backup.dump postgres #it doesn't matter which db you select here

复制自:https://codepad.co/snippet/73eKCuLx

答案 2 :(得分:4)

您可以尝试将部分表格转储到本地计算机上的文件中(假设您的本地计算机已安装psql):

psql -h ${db_host} -p 5432 -U ${db_user} -d ${db_name} \
-c "\copy (SELECT * FROM my_table LIMIT 10000) to 'some_local_file.csv' csv;"

您可以稍后将导出的csv导入另一个数据库:

COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);

答案 3 :(得分:2)

已经提到了一种可能的解决方案 - 通过ssh管道。

您还可以让您的数据库服务器侦听公共inet地址,将备份计算机的hostssl条目添加到pg_hba.conf,也可以为安全性配置客户端证书,然后只需在客户端/备份计算机上运行转储与pg_dump -h dbserver.example.com ...

这对于无人值守备份来说更简单。

有关连接的配置(sslmode),另请参阅the supported environment variables

答案 4 :(得分:0)

如果您想通过在pg_dump上使用ssh定期将远程服务器中容器内部的数据库PostgreSQL备份到本地主机,这对您很有用:

https://github.com/omidraha/periodic-pgdump-over-ssh