Skip to content

feat(backup): ネイティブ postgres をダンプして復元訓練に入れる - #519

Merged
gapul merged 1 commit into
mainfrom
feat/dump-native-postgres
Aug 30, 2026
Merged

feat(backup): ネイティブ postgres をダンプして復元訓練に入れる#519
gapul merged 1 commit into
mainfrom
feat/dump-native-postgres

Conversation

@gapul

@gapul gapul commented Aug 30, 2026

Copy link
Copy Markdown
Owner

なぜ

Matrix のブリッジで過去ログを取り込むことにしたが、その履歴が入る先がバックアップとして成立していなかった。

ネイティブの PostgreSQL(atuin が database.createLocally で生やしたクラスタ)はダンプ対象に入っていない。/var/libpaths に入っているので PGDATA のファイルは restic に入るが、それは稼働中のコピーで起動する保証が無い。このファイル自身が dawarich についてそう書いている。コンテナ側だけ見ていて、ホスト側を見落としていた。

ブリッジで取り込んだ過去ログは相手のネットワークから取り直せるとは限らない(Signal の履歴は端末にしか無い)。壊れたコピーしか無い状態にはしない。

復元訓練にも入れた

ダンプを足すだけでは「戻せる」ことの確認にならない。訓練側で 2 つ直した:

直したもの なぜ
識別子の引用 matrix-synapse はハイフンを含む。引用なしの CREATE DATABASE drill_matrix-synapse は構文エラー
照合順序を本番に合わせる Synapse は C 以外の DB を見つけると起動を拒否する。 戻せても起動しないなら復元できたことにならない

2 つめは dawarich の PostGIS で踏んだのと同じ形の穴。訓練の意味はここにある。

Matrix のブリッジで過去ログを取り込むことにしたが、その履歴が入る先が
バックアップとして成立していなかった。

ネイティブの PostgreSQL (atuin が database.createLocally で生やしたクラスタ) は
ダンプ対象に入っていない。/var/lib は paths に入っているので PGDATA のファイルは
restic に入るが、それは稼働中のコピーで起動する保証が無い。このファイル自身が
dawarich についてそう書いている。コンテナ側だけ見ていて、ホスト側を見落としていた。

ブリッジで取り込んだ過去ログは相手のネットワークから取り直せるとは限らない
(Signal の履歴は端末にしか無い) ので、壊れたコピーしか無い状態にはしない。

復元訓練にも入れた。ダンプを足すだけでは「戻せる」ことの確認にならない。
訓練側で 2 つ直した:

  - 識別子を引用する。matrix-synapse はハイフンを含むので、引用なしの
    CREATE DATABASE drill_matrix-synapse は構文エラーになる。
  - 照合順序を本番に合わせる。Synapse は C 以外の DB を見つけると起動を拒否する
    ので、戻せても起動しないなら復元できたことにならない。dawarich の PostGIS で
    踏んだのと同じ形の穴。
@gapul
gapul merged commit b34cc30 into main Aug 30, 2026
5 checks passed
@gapul
gapul deleted the feat/dump-native-postgres branch August 30, 2026 18:22
gapul added a commit that referenced this pull request Aug 30, 2026
深く取れるのはポータルが初めて作られる一度きり。既定は 50 件で、後から遡るには
backfill queue が要るが、上流の設定にこう書いてある:

  Settings for the backwards backfill queue. This only applies when connecting to
  Beeper as standard Matrix servers don't support inserting messages into history.

素の Synapse は履歴の途中に差し込めない (MSC2716 が廃止された)。空の部屋へ順に
流し込む初回だけは効くので、そこで取れるだけ取る。既定のまま入ってしまうと、
やり直すには部屋を消すことになる。だからログインより先に入れる。

bridgev2 (signal / meta 2本) は max_initial_messages と max_catchup_messages を
5000 に。discord は 0.7.7 で旧形式なので DM / チャンネル / スレッドを個別指定し、
チャンネルは 1000 に抑えた。ギルドのチャンネルは桁が違うので、DM と同じ深さに
すると初回同期が終わらない。

どれだけ取れるかは相手次第で、こちらの設定では決まらない:
  Telegram / Discord      サーバ側に履歴がある。いちばん深く取れる
  Meta / LinkedIn / Slack サーバ側にある
  Signal                  端末にしか無い。過去は基本的に取れない

貯める先は #519 で先に固めた (ネイティブ postgres のダンプと復元訓練)。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant