「本番DBのバックアップ、ちゃんと取れていますか?」と聞かれて即答できるチームは意外と少ない。MySQL・PostgreSQL・MongoDBなど複数エンジンが混在する現場ではcronとシェルスクリプトが乱立し、誰がどのDBをいつバックアップしているか把握できないまま運用が続いてしまう。Databasementはそんな散らばったバックアップ運用を単一のWebUIに集約するセルフホスト型OSSだ。MIT・PHP(Laravel)製で、Docker1コマンドで起動し、SSHトンネル経由のプライベート接続、AES-256暗号化、S3/SFTP保存、MCPサーバー経由のAI連携まで網羅する。

この記事ではセルフホスト型のDBバックアップ管理OSS Databasementを解説します。AI時代の自動化ツール全体像についてはAI自動化ツール|ノーコードからコードまで2026年版の比較と選び方をご覧ください。

この記事のポイント

  • DatabasementはMySQL・PostgreSQL・MariaDB・MongoDB・SQLite・Redis/Valkeyを単一画面で管理できるセルフホスト型バックアップOSS(MITライセンス、★379)
  • SSHトンネル接続・AES-256暗号化・S3互換ストレージ・GFSリテンションに対応し、エンタープライズ要件にもDocker一発で応える
  • REST APIに加えMCPサーバーが組み込まれており、Claude CodeやCursorからの自然言語操作が可能

Databasement banner

Databasementとは何か:散らばるバックアップを1画面に集約するOSS

DatabasementはDavid-Crty氏が公開しているセルフホスト型データベースバックアップ管理アプリケーションだ。2026年4月時点で★379、最新版は4月29日リリースのv1.1.4、PHP(81%)+ Laravelで実装されている。「DB管理者がやることを全部1つの画面に詰め込んだダッシュボード」と表現するのが近い。

従来のバックアップ運用は次の問題を抱えていた。

  • スクリプトが各サーバーに分散:MySQLのcronはAサーバー、PostgreSQLはBサーバー、Mongoはまた別…と散らかる
  • 失敗通知がない/届かない:ログを見に行くまで気づかず、復旧時にバックアップが壊れていることが発覚
  • リストア手順が属人化:バックアップは取れているがリストア訓練がされず、いざという時に動かない
  • SaaSは情報セキュリティの壁:BackupBuddyやSimpleBackupsなどのSaaSはコンプライアンス要件で使えない現場が多い

Databasementはこれらを単一のDocker コンテナに収めることで解決する。WebUIから接続情報を登録し、スケジュールを設定すれば、後はキューワーカーが自動で取得・圧縮・暗号化・転送・通知まで行う。

設計思想:「自前で構築できるBackBlazeのようなUI」を目指しており、設定画面はSaaS製品と遜色ない。一方でデータは100%自社インフラに留まる。GDPR・改正個人情報保護法・PCI DSSなど、データの越境を許さない要件下でも導入しやすい。

対応データベースとストレージ:6エンジン × 4ストレージのマトリクス

Databasementの強みは「対応の幅広さ」にある。1つのインスタンスでリレーショナル・ドキュメント・KVS・組み込み型まで横断管理できる。

対応データベース

エンジン バックアップ方式 増分対応 備考
MySQL mysqldump × 5.7/8.0系で動作確認
PostgreSQL pg_dump × カスタムフォーマット出力可
MariaDB mysqldump派生 × MySQLとほぼ同等
MongoDB mongodump × 認証DB指定可
SQLite ファイルコピー × ロック不要のオンライン取得
Redis / Valkey RDBスナップショット × Valkey 7系も動作

対応ストレージ(保存先)

ストレージ 用途 特徴
ローカルディスク 検証・小規模 コンテナ内ボリュームに保存
S3互換 本番運用 AWS S3/Backblaze B2/MinIO/Wasabi/Cloudflare R2
SFTP オンプレ移送 SSH鍵認証で安全に外部サーバーへ
FTP レガシー連携 パッシブモード対応

S3互換が広く使えるため、コスト最適化のためBackblaze B2やCloudflare R2へ逃がす運用がしやすい。「本番MySQLは毎日Backblaze B2、月次はAWS S3 Glacier」のような階層運用もWebUIだけで設計できる。

アーキテクチャ:シングルコンテナで完結する設計

Databasementは「バックアップ取得→圧縮→暗号化→転送→通知」までを内部のキュー処理で完結させる。Laravel Horizon相当のキューワーカーがENABLE_QUEUE_WORKER=trueで同居起動し、外部のRedisやSidekiqを別途用意する必要がない。

flowchart LR A["WebUI
(Laravel + Blade)"] --> B["Job Queue
(SQLite/Postgres)"] B --> C{"Worker"} C -->|"mysqldump
pg_dump
mongodump"| D["Source DB
(SSH Tunnel可)"] C --> E["圧縮
(gzip / zstd)"] E --> F["暗号化
(AES-256)"] F --> G{"保存先"} G --> H["S3 / R2 / B2"] G --> I["SFTP / FTP"] G --> J["Local Volume"] C --> K["通知
Slack / Discord
Telegram / Email"]

このシンプルさはコンテナ運用と相性が良い。LogBullのようにSQLiteで状態を持つアプローチを採用しているため、外部DBレスでも動作する。永続化が必要なデータは/dataボリューム1つに集約され、可搬性が高い。ログ収集の自前運用についてはLog Bull徹底解説:Docker一発で立つOSSログ収集システム、ELK/Lokiの軽量代替も併せて参照したい。

クイックスタート:Dockerで2分で起動

公式が提示している最短手順は次の通り。SQLiteを使い、ボリュームをカレントディレクトリのdatabasement-dataに置く構成だ。

docker run -d \
  --name databasement \
  -p 2226:2226 \
  -e DB_CONNECTION=sqlite \
  -e DB_DATABASE=/data/database.sqlite \
  -e ENABLE_QUEUE_WORKER=true \
  -v ./databasement-data:/data \
  davidcrty/databasement:1

起動後はhttp://localhost:2226にアクセスし、初期管理者アカウントを作成する。ENABLE_QUEUE_WORKER=trueはワーカーをコンテナ内で同時起動するフラグで、これを忘れるとUIから「キューにジョブを入れたまま実行されない」状態になる。

docker-composeでの本番構成例

PostgreSQLを永続化バックエンドにし、別ホストのMySQLをバックアップ対象にする想定で書くと次のようになる。

services:
  databasement:
    image: davidcrty/databasement:1
    container_name: databasement
    restart: unless-stopped
    ports:
      - "2226:2226"
    environment:
      DB_CONNECTION: pgsql
      DB_HOST: db
      DB_PORT: 5432
      DB_DATABASE: databasement
      DB_USERNAME: databasement
      DB_PASSWORD: ${DB_PASSWORD}
      ENABLE_QUEUE_WORKER: "true"
      APP_KEY: ${APP_KEY}
      APP_URL: https://backup.example.com
    volumes:
      - ./data:/data
    depends_on:
      - db

  db:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: databasement
      POSTGRES_USER: databasement
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - ./pgdata:/var/lib/postgresql/data

APP_KEYphp artisan key:generate --show相当で生成した32バイトのbase64文字列が必要だ。コンテナ内で一度docker execして取得するか、Laravelで使える既存のキー生成手段で発行しておく。

Kubernetesへのデプロイ

公式リポジトリ配下にcharts/としてHelmチャートが提供されている。永続ボリューム・Ingress・サブパス配信に対応しており、社内基盤での標準デプロイに向く。

helm repo add databasement https://david-crty.github.io/databasement-helm
helm install backup databasement/databasement \
  --set ingress.enabled=true \
  --set ingress.hosts[0].host=backup.example.com \
  --set persistence.size=50Gi

スケジュールと保持ポリシー:GFSで世代管理する

Databasementの真価はスケジューリングにある。WebUIで対象DBを選び、cron式で取得頻度を、リテンションで保持期間を指定するだけで世代管理が始まる。

サポートされる保持戦略

戦略 説明 想定ユース
期間ベース 「30日間保持」のように単純なTTL 開発DB、変更頻度の高いDB
GFS Grandfather-Father-Sonの3階層世代管理 本番運用、コンプラ要件あり
個別タグ 「リリース直前」など名前付きで永続保持 デプロイ前後の手動セーフポイント

GFS(Grandfather-Father-Son)は古典的な世代管理戦略で、「日次7世代+週次4世代+月次12世代」のように複数粒度で残す。Databasementはこれを設定UIから直接定義でき、ストレージコストと復旧粒度のバランスが取りやすい。

スケジュール例

# 毎日午前3:00に実行(タイムゾーンはApp設定に従う)
0 3 * * *

# 平日のみ午前2:00
0 2 * * 1-5

# 1時間ごと
0 * * * *

cron欄は秒単位ではなく一般的な5フィールド形式。タイムゾーンはコンテナのTZ環境変数あるいはアプリ設定で統一される。

SSHトンネル接続とセキュリティ機能

本番DBはVPCやプライベートサブネットの内側にあり、外部から直接接続できない構成が一般的だ。DatabasementはSSHトンネルをネイティブサポートし、踏み台サーバー越しに対象DBへ到達できる。

設定項目は以下のとおり。

  • 踏み台ホスト名/ポート
  • 踏み台ユーザー名
  • 認証方法:パスワード or SSH鍵(コピペ貼り付け)
  • 内部DBのホスト:localhostdb-internal.svc.cluster.localなど、踏み台から見たアドレス

これにより「踏み台に手動でSSH→ダンプ→S3にアップ」というオペレーションを完全に自動化できる。

暗号化と認証

機能 詳細
バックアップ暗号化 AES-256-CBC、ユーザー指定パスフレーズ/自動生成キー
圧縮 gzip/zstd(高速・高圧縮率の選択可)
認証 メールアドレス+パスワード、TOTPベースの2FA
認可 ロールベース(Admin / Operator / Viewer想定)
監査 操作ログを内部DBに保存

データ越しの暗号化が前提になっているため、S3バケット側のSSE-KMSと組み合わせれば二重暗号化になる。コンプライアンス監査時に「鍵管理は誰の責任か」を明確に説明できる構成だ。

REST APIとMCPサーバー:CIとAIから操作する

Databasementは「人がブラウザで操作する」だけのツールではない。REST APIに加え、Model Context Protocol(MCP)サーバーを公式で同梱している。これがインフラOSSとしてはかなり先進的な点だ。

REST APIの典型的な使い方

CI/CDから手動バックアップを差し込みたいケースを考える。たとえばマイグレーション直前にスナップショットを残しておくユースケースだ。

# トリガーのみ。実行はキュー任せ
curl -X POST "https://backup.example.com/api/v1/jobs/123/run" \
  -H "Authorization: Bearer ${DBM_TOKEN}" \
  -H "Content-Type: application/json"

# 完了状況をポーリング
curl -X GET "https://backup.example.com/api/v1/jobs/123/runs/latest" \
  -H "Authorization: Bearer ${DBM_TOKEN}"

GitHub Actionsからこれを叩けば、リリースワークフローに「バックアップ完了を待ってからマイグレーションを流す」フェーズを組み込める。

MCPサーバーでClaude Code/Cursorから操作

Databasement v1.1系からはMCPサーバーが組み込まれており、Claude CodeやCursorのMCP設定から接続するだけでAIエージェントから操作できる。

{
  "mcpServers": {
    "databasement": {
      "command": "npx",
      "args": ["@databasement/mcp", "--url", "https://backup.example.com", "--token", "${DBM_TOKEN}"]
    }
  }
}

これを設定しておくとClaude Codeに「本番MySQLのバックアップを今すぐ取って、終わったらSlackに通知」と話しかけるだけで、ジョブの実行・状態監視・通知設定変更まで自然言語で完結する。日々のSREオペレーションが対話で進められるようになるのは、2026年のAI×インフラ運用の象徴的な体験だ。

通知チャンネルと監視:失敗したらすぐ気づく仕組み

バックアップ運用最大の落とし穴は「失敗したのに気づかないこと」だ。Databasementは7つの通知チャンネルを内蔵しており、組織のコミュニケーション基盤に合わせて選択できる。

チャンネル 主な用途
Email 監査ログ・週次サマリ
Slack エンジニアリングチームのリアルタイム通知
Discord OSS/コミュニティ運営の現場
Telegram モバイル即応のSRE
Pushover 個人の常駐デバイスへ通知
Gotify 自前のpush通知サーバー
Webhook PagerDuty/Opsgenieなどへの統合

通知ルールは「失敗時のみ」「成功時も含む」「2回連続失敗時」のように粒度を変えられる。ノイズになりすぎず、本当に必要なときだけページングする運用が実現しやすい。

リアルタイム監視ダッシュボードはジョブごとの実行履歴・所要時間・転送サイズをグラフ化する。トレンドが見えるので「最近MongoDBのダンプが30%重くなった」のような兆候を早期に拾える。

類似ツールとの比較:BackupNinja・SimpleBackups・PgBackRestと何が違うか

DBバックアップOSSは古くから存在するが、Databasementは「マルチエンジン×WebUI×MCP対応」が同居する点で独自性がある。

ツール 対象DB 形態 強み 弱み
Databasement MySQL/PG/Maria/Mongo/SQLite/Redis セルフホストWeb マルチエンジン・MCP・SSHトンネル 増分バックアップ非対応
BackupNinja 多数(拡張ハンドラ) CLI/cron 軽量・スクリプト派に向く UIなし、設定が分散
PgBackRest PostgreSQL専用 CLI PITR、増分バックアップ、並列 PG以外には使えない
Percona XtraBackup MySQL/MariaDB CLI ホットバックアップ、増分 MySQL系のみ
SimpleBackups 多数 SaaS UI洗練・運用不要 データが外部、コスト

「PostgreSQLしか使わないし、PITRが欲しい」ならPgBackRestが王道だ。一方で現場のDB構成が混在していて、人と機械の両方から扱える管理面が欲しいならDatabasementが最も近い選択肢になる。

想定ユースケースと導入時の注意点

向いているシーン

  • 個人開発・スモールチームのSaaS運用:MySQLとMongoが混在し、cronスクリプトを書く時間がない
  • 社内ツール・kintoneを置き換えたNoCodeアプリ群:複数のSQLite/PostgreSQLが同居し、誰がどれを管理するか曖昧になりがち
  • 規制業界のオンプレ運用:データが外部SaaSに出ない要件があるが、UIなしのcronはレビューが厳しい
  • AI時代のSRE実験場:MCP経由でClaude CodeやCursorから操作できる「AI-Operableなインフラ」を試したいチーム

注意すべきポイント

  • 増分バックアップ非対応:論理ダンプベースのため、TB級のDBは取得時間が課題になる。100GBを超えるならPgBackRestやXtraBackupとの併用を検討する
  • Laravel製の本体DB:内部状態用にSQLiteかPostgreSQLが必要。SQLiteは検証用、本番運用ではPGを別建てするのが安全
  • APP_KEY漏洩は致命的:Laravelの暗号化キーが漏れるとバックアップ取得設定の認証情報が復号される恐れがある。SecretManagerなどで管理する
  • SSH鍵の管理:踏み台用のSSH秘密鍵をUI入力するため、ロール権限とアクセスログを必ず監査する

インフラコスト最適化の観点では、Infracost活用ガイド:Terraformのクラウドコストをデプロイ前に可視化するOSSツール完全解説と組み合わせて、バックアップストレージのコスト試算をTerraformレベルで管理するのも有効だ。

まとめ:DBバックアップを「整理整頓」するタイミング

DBバックアップは「動いてさえいれば見直さない」領域になりやすい。だが、複数エンジンを並行運用しているチームにとって、Databasementは散らかったcronとスクリプトを一気に整理する好機を与えてくれる。MIT・Docker一発・MCP対応という現代的なパッケージングで、しかも自社インフラに閉じ込められる。SaaSバックアップに払っていた料金を見直すきっかけにもなる。

まずはローカルでdocker runしてみて、開発DBを1本繋いでみるのが最短ルートだ。WebUIの完成度に驚くはずだ。

参照ソース