DMZのリモートサーバー上のSQLデータベースをpg_dumpしようとしています。 2つの問題があります。
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 [email protected] | > /home/admin/testdb.sql.bak
私が達成しようとしていることが可能かどうかは誰にもわかりますか?
Sshでリモートサーバーに接続し、pg_dump呼び出しを接続して、出力をローカルマシンのstdoutに送り返すことができます。
ssh user@remote_machine "pg_dump -U dbuser -h localhost -C --column-inserts" \
>> backup_file_on_your_local_machine.sql
編集:タイプミスを修正。
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
次のように、テーブルの一部をローカルマシンのファイルにダンプしてみることができます(ローカルマシンに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を後でこのように別のdbにインポートできます。
COPY my_table FROM '/path/to/some_local_file.csv' WITH (FORMAT csv);
1つの可能な解決策-sshを介したパイプ-が言及されています。
DBサーバーにパブリックinetアドレスをリッスンさせ、pg_hba.confにバックアップマシンのhostsslエントリを追加し、セキュリティのためにクライアント証明書を設定し、pg_dump -h dbserver.example.com ...
を使用してクライアント/バックアップマシンでダンプを実行することもできます。
これは、無人バックアップの方が簡単です。
接続の構成(sslmode)については、 サポートされている環境変数 も参照してください。