FLAG Journal

フラッグな日常

PostgreSQLでバックアップから一部のデータを復旧する|幡司

お客様からのお問い合わせで、誤ってデータが消えてしまったのでバックアップから復旧できませんか?と問い合わせがありました。

 幸いデイリーで毎日0時にdumpバックアップを取っていたので、ここから復旧することにします。

しかし、該当のテーブルをすべて戻してしまうと、他のお客さんのデータが巻き戻ってしまいます。

そこで一部のデータだけ差分で復旧出来ないか調べたところ以下の方法で復旧できました。


 

バックアップ複製用のDB作成
(リストア時にパラメータを指定して作ることも出来るみたいです)

cratedb mainDB_20170211

 

バックアップファイルからリストアします

pg_restore -d mainDB_20170211 backup_dump

中身が入っていることを確認します。
(今回はhogehogeテーブルの id = 1000とします) 

select * from hogehoge where id = 1000)

 

コピーコマンドで該当データだけ、ファイルに抽出します。 

copy (select * from hogehoge where id = 1000) TO '/temp/1000_restore.csv';


vimで抽出したファイルの先頭に以下を追加します。 

COPY "hogehoge(テーブル名)" FROM stdin;

 

ファイルの最後に 

.

 を付けて保存。 

本番dbをバックアップ

pg_dump -Fc mainDB > mainDB_20170201.dump

mainDBに入ってID 1000を消します。

psql mainDB

begin;
delete from hogehoge where id = 1300 ;
commit;

 

 

DBから抜けて、SQL流し込みます

psql mainDB < 1000_restore.csv

以上

keyboard_arrow_left

NEWS一覧へ

HOMEkeyboard_arrow_rightNEWSkeyboard_arrow_right

PostgreSQLでバックアップから一...