データベース - postgreSQL - 消せないデータベースの回復 - データベースのコピーを作成
- 1. 概要
- 2. 環境作成
- 3. バックアップ
- 4. 一次マシンへリストア
- 5. 一次マシンからのバックアップ
- 6. 運用マシンへリストア
1. 概要
筋書きは、こうである。
別のマシンにデータベースを作成しておく。
現行のマシンのユーザといらないデータベースを除くデータベースの情報をエクスポートする。
別のマシンに現行マシンのユーザと必要なデータベースをインポートする。
別のマシンから、まるまる情報をエクスポートする。
現行マシンを「initdb」する。
現行マシンに別マシンの情報をインポートする。
という寸法なのであります。
2. 環境作成
ターゲットマシンは、「FreeBSD」でありまして、サブのマシンが調子悪いもので、「jail」を利用してデータベースの環境を作成しました。
「jail」に関しては、「仮想化ソフトウェア - FreeBSD - jail」をご参照ください。
データベースの環境作成に関しては、「FreeBSD 13.2 RELEASE - データベース postgreSQL」あたりをご参照ください。
3. バックアップ
元マシンのバックアップを作成します。
ユーザとデータベースに分けて、ここは「postgres」ユーザで。
ユーザのバックアップ。
pg_dumpall --roles-only --clean --if-exists > user.sql
ユーザは、これで全ユーザのバックアップがとれます。
データベースのバックアップ。
pg_dump -Fc データベース名 > データベース名.dmp
これは、データベース数分実行します。
「template0」と「template1」は更新するものではないので、バックアップはとりません。
大きなデータベースであれば、圧縮も必要でしょうし、時間もものすごくかかるかと思いますが、今回の環境は小さなものだったのですぐに終わりました。
バックアップをとった時点で、データベースが更新されないようにデータベースを停止します。
「root」ユーザ権限で。
service postgresql stop
停止後、前のデータを一応残したまま、データベースのイニシャルまでやっておきます。
mv /var/db/postgres/data96 /var/db/postgres/data96_bak
「data96」は、「postgreSQL」が「9.6」だからですな。
そのうえで。
service postgresql initdb
まで、やっておいて。
設定ファイルは、前のものを持ってきて上書きしておきます。
「postgres」ユーザで。
cp /var/db/postgres/data96_bak/pg_hba.conf /var/db/postgres/data96/pg_hba.conf
cp /var/db/postgres/data96_bak/postgresql.conf /var/db/postgres/data96/postgresql.conf
4. 一次マシンへリストア
一次マシンへリストアします。
一次マシンは、「initdb」が終わった直後の状態です。
ユーザのリストア。
psql -f user.sql postgres
データベースのリストア。
pg_restore --clean --create -d データベース名 データベース名.dmp
これももちろん、データベース数分、実行します。
ここ失敗です。データベースは、作成してからでないとうまく動作しませんでした。
なんかコマンドの使い方に問題があるような・・・。
5. 一次マシンからのバックアップ
できあがった、一次マシンからバックアップします。
ここでは、「pg_dumpall」でユーザもデータベースもバックアップできるようになっています。
「postgres」ユーザで。
pg_dumpall --column-inserts --username=postgres> pg_dumpall.sql
6. 運用マシンへリストア
いよいよ最後の仕上げです。
運用マシンへ一次マシンで出力した「pg_dumpall.sql」を持っていきます。
「root」ユーザ権限で。
service postgresql start
「postgres」ユーザで。
psql --username=postgres --file pg_dumpall.sql postgres
これで、うまいこといくはずなんだがな。
一応、「.dmp」のリストアが予定通りでない以外は、いまんとこうまくいっています。
|
|