pg_dump 当端口 5432 被阻止时来自远程服务器的 postgres 数据库

pg_dump postgres database from remote server when port 5432 is blocked

我正在尝试 pg_dump 我们 DMZ 中远程服务器上的 SQL 数据库。有2个问题。

  1. 远程服务器上没有多少 space 所以正常命令 运行 在本地备份数据库 由于 space 个问题,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

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

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

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

已提及一种可能的解决方案 - 通过 ssh 进行管道传输。

您还可以让您的数据库服务器侦听 public inet 地址,为您的备份机器添加一个 hostssl 条目到 pg_hba.conf,也许配置一个客户端证书以确保安全,然后简单地 运行 client/backup 机器上的转储 pg_dump -h dbserver.example.com ...

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

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

您可以像这样尝试将 table 的一部分转储到本地计算机中的文件中(假设您的本地计算机已安装 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);

让我们使用 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

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

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