ErogameScapeは毎日1回pg_dumpでバックアップを取得しています。
※差分バックアップを使わなくていい程度のデータ量なのです…
バックアップを使うのは致命的な障害が発生した場合と、誤ってデータを削除した場合の2通りあるのですが、先日、後者の事例が発生して10日前のバックアップを用いてpg_restoreしました。
すると以下のメッセージが出て、いくつかのテーブルの復旧に失敗しました。
pg_restore: [(db)] TOC1779; 1259 104147143 SEQUENCE mod_musicitemlist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 4 in file "global/12791": read only 0 of 8192 bytes
: CREATE SEQUENCE mod_musicitemlist_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
pg_restore: [(db)] TOC1780; 1259 104147145 TABLE mod_musiclist ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 7 in file "global/12791": read only 0 of 8192 bytes
: CREATE TABLE mod_musiclist (
id integer NOT NULL,
music integer NOT NULL,
name text NOT NULL,
furigana text ...
pg_restore: [(db)] TOC1781; 1259 104147155 SEQUENCE mod_musiclist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 8 in file "global/12791": read only 0 of 8192 bytes
: CREATE SEQUENCE mod_musiclist_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
おそらくメッセージのとおりでglobal/12791が壊れているのだと思います。
どのように復旧すればいいか分かりませんでした。
とりあえず現在の現用のデータベースは生きているので、pg_dumpallでデータベースを書き出して、読み込んでみたら問題なく完了しました。
そこで最新のpg_dumpの出力をpg_restoreしてみたところ、やはり問題なく完了しました。
推測になりますが、実際のglobal/12791は壊れていないので、pg_dumpしたときに読み取りに失敗していたのかな…と思います。
マニュアルに「pg_dumpの実行中は、標準エラーに出力される警告(特に後述の制限に関する警告)が出力されていないか確認してください。 」と書いてあるのですがlogを取得してないので、logを取得してちゃんと見ないとダメだな…と思いました。
※差分バックアップを使わなくていい程度のデータ量なのです…
バックアップを使うのは致命的な障害が発生した場合と、誤ってデータを削除した場合の2通りあるのですが、先日、後者の事例が発生して10日前のバックアップを用いてpg_restoreしました。
すると以下のメッセージが出て、いくつかのテーブルの復旧に失敗しました。
pg_restore: [(db)] TOC1779; 1259 104147143 SEQUENCE mod_musicitemlist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 4 in file "global/12791": read only 0 of 8192 bytes
: CREATE SEQUENCE mod_musicitemlist_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
pg_restore: [(db)] TOC1780; 1259 104147145 TABLE mod_musiclist ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 7 in file "global/12791": read only 0 of 8192 bytes
: CREATE TABLE mod_musiclist (
id integer NOT NULL,
music integer NOT NULL,
name text NOT NULL,
furigana text ...
pg_restore: [(db)] TOC1781; 1259 104147155 SEQUENCE mod_musiclist_id_seq ap2
pg_restore: [(db)] could not execute query: ERROR: could not read block 8 in file "global/12791": read only 0 of 8192 bytes
: CREATE SEQUENCE mod_musiclist_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;
おそらくメッセージのとおりでglobal/12791が壊れているのだと思います。
どのように復旧すればいいか分かりませんでした。
とりあえず現在の現用のデータベースは生きているので、pg_dumpallでデータベースを書き出して、読み込んでみたら問題なく完了しました。
そこで最新のpg_dumpの出力をpg_restoreしてみたところ、やはり問題なく完了しました。
推測になりますが、実際のglobal/12791は壊れていないので、pg_dumpしたときに読み取りに失敗していたのかな…と思います。
マニュアルに「pg_dumpの実行中は、標準エラーに出力される警告(特に後述の制限に関する警告)が出力されていないか確認してください。 」と書いてあるのですがlogを取得してないので、logを取得してちゃんと見ないとダメだな…と思いました。