質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

985閲覧

postgresqlの簡単で確実なバックアップとリストア方法

akiyama3284pga

総合スコア186

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2022/04/18 00:58

編集2022/04/18 01:07

データのバックアップを取りたいのですが、
簡単かつ確実な方法はありますでしょうか?

自分は今まで /var/lib/postgresql/virsion/main 以降を単にコピーしておいて、
それを別サーバで復元するなりする際にそのまま入れてやればよいものとばかり思っておりました。

その方法をとった場合、
psqlに入ろうとしたとき、

psql: error: could not connect to server: そのようなファイルやディレクトリはありません
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

のようなエラーが発生しました。
因みにpostgresqlのバージョンは2つほど違うものに入れました。(それが原因ではないと思う...)

やはり専用のツールなどで行うことになるのでしょうか。

※もちろんバックアップ作業中はpostgresを停止しています。
※サーバAのpostgres 10 からサーバBのpostgres 12 へリストアしようとしています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/04/18 01:08

ありがとうございます。 あまりツールを使用せず物理的にバックアップができたらと考えているのですが、 難しいでしょうか?
hoshi-takanori

2022/04/18 01:15

pg_dump や pg_restore は postgresql を普通に入れれば付いてくると思いますし、スクリプト形式でダンプすれば SQL コマンドとして出力されるのでリストアはツールなくても (psql があれば) できます。 というか、postgresql 10 から 12 って、ファイル形式が変わってる可能性が高い気がします。リストア (復元) とは同じ状態を再現するという意味で、バージョンが変わればリストアではなく移行 (migration) と言うのでは…。
sazi

2022/04/18 01:46 編集

何を以って簡単と言うかですが、先ずは、ロールとか権限の理解をしてからだと思います。
maisumakun

2022/04/18 01:47

> あまりツールを使用せず物理的にバックアップができたらと考えているのですが 仮想サーバやクラウドなら、「サーバごとコピー・バックアップする」ような選択肢もありえます。
68user

2022/04/18 02:50 編集

停止してバックアップ&リストアを行うなら別に間違ってません。 https://www.postgresql.jp/document/12/html/backup.html における「ファイルシステムレベルのバックアップ」ですね。 それが別バージョンで動くかは別の話で、ドキュメントでは pg_dumpall を推奨しています。 https://www.postgresql.jp/document/12/html/upgrading.html > あまりツールを使用せず物理的にバックアップができたら そういう謎のこだわりは捨てて、公式のドキュメントを読むべきと思います。 それはそれとして、psql のエラーは PostgreSQL を起動させていない or 起動時にエラーが発生して失敗しているのでしょう (別バージョンのファイルを持っていったのでエラーになっているのかもしれないし、それ以外の理由かもしれない)。
guest

回答2

0

同じDBに復元するのをリストアと言います。別のDBにデータをコピーするのはリストアとは言いません。まして、バージョンの異なるDBにコピーするのであれば、バイナリーデータの互換性があるとは限らないので、バイナリーダンプするような手法は使えません。

psqlを使って、CSVデータとしてサーバAでエクスポート、サーバBでインポートするのが、手軽で安全な方法です。
https://www.ashisuto.co.jp/db_blog/article/how-import-and-export-data-using-csv-files-postgresql.html

投稿2022/04/18 03:40

nukasa

総合スコア406

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

akiyama3284pga

2022/04/18 03:48

ご回答ありがとうございます。 今回、自分のDBへ理解不足で混乱を生んでしまいました。 今後はこのようなケースの場合にはインポート、エクスポートという言葉を選びたいと思います。 また、今回の解決方法で解決できない場合にはCSVでのおっしゃるやり方でのインポートエクスポートで対応いたします。
guest

0

自己解決

皆様、ご意見ご協力ありがとうございます。
参考にさせていただき、無事成功いたしまいたので、手順を記します。
hoshi-takanori様のアドバイスから、
一時停止しなくていよいオンラインでのバックアップを行いました。
また、postgresqlのバージョンもできるだけ近いものといたしました。

バックアップ元 postgresql 10.19
バックアップ先 postgresql 10.20

サーバ間のバックアップデータの渡しは危険を承知ながらgithubで行いました。
また、その関係でプレーンテキスト形式でバックアップを行いました。


バックアップ
pg_dump --format=plain -U postgres バックアップ対象DB > gitリポジトリ

リストア
psql -d バックアップするDBを入れるためのDB -f gitcloneしたバックアップデータの場所


68user様のおっしゃる通り、postgresを停止していた原因で、エラーとなっていたようです。
maisumakun様のおっしゃる全体バックアップも検討したいと存じます。

投稿2022/04/18 03:37

akiyama3284pga

総合スコア186

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問