我试图在我们的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
有谁知道我想要实现的目标是否可行?
答案 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
答案 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备份到本地主机,这对您很有用: