# 📘 BookStack データのバックアップ方法
— 手動バックアップから cron・外部退避まで(検証付き)—
🧭 はじめに
本記事では、BookStack を安全に運用するためのバックアップ方法を、 手動 → 自動(cron)→ 外部媒体へのコピーという段階構成で整理する。
特に重視するポイントは以下の3点:
- どのコマンドを実行するのか
- 実行結果が正しいかをどう確認するか
- どこで失敗しやすいか
「バックアップは取った“つもり”だった」という事態を防ぐため、 すべて確認方法付きで解説する。
📦 BookStackにおけるバックアップの考え方
📌 バックアップ対象の全体像
BookStackの完全バックアップには、必ず以下3点が必要。
- データベース(記事本文・構造・履歴)
- アップロードファイル(画像・添付)
- 設定ファイル(.env)
この3点のうち1つでも欠けると、完全復旧はできない。
特に .env は再生成できないため最重要。
🧪 ① 事前確認:サイズを把握する
🗄 データベースのサイズ確認
mysql -u bookstackuser -p -e "
SELECT table_schema AS db,
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS size_mb
FROM information_schema.tables
WHERE table_schema = 'bookstackdb'
GROUP BY table_schema;
"
✔ 正常な結果例
db size_mb
bookstackdb 43.59
数十MB程度なら極めて健全。
文章中心のBookStackでは、記事数が多くてもDBは小さくなる。
📁 uploads(添付ファイル)のサイズ確認
du -sh /var/www/BookStack/storage/uploads
✔ 正常な結果例
40K /var/www/BookStack/storage/uploads
画像・PDFを使っていなければ 数KB〜数MB が普通。
🛠 ② 手動バックアップ(初回・検証用)
🗄 データベースのバックアップ
sudo mkdir -p /var/backups/bookstack
sudo mysqldump -u bookstackuser -p bookstackdb \
| sudo tee /var/backups/bookstack/bookstackdb_$(date +%F).sql > /dev/null
✔ 成功確認
ls -lh /var/backups/bookstack
-rw-r--r-- 1 root root 20M bookstackdb_2025-12-27.sql
ファイルが存在し、サイズが極端に小さくなければOK。
内容確認(破損チェック)
head -n 5 /var/backups/bookstack/bookstackdb_2025-12-27.sql
-- MariaDB dump ...
-- Host: localhost Database: bookstackdb
MariaDB dump と Database 名が出ていれば正常。
📁 uploads のバックアップ
sudo tar czf /var/backups/bookstack/bookstack_uploads_$(date +%F).tar.gz \
/var/www/BookStack/storage/uploads
✔ 確認
ls -lh /var/backups/bookstack
⚙️ .env のバックアップ(最重要)
sudo cp /var/www/BookStack/.env \
/var/backups/bookstack/bookstack.env.$(date +%F)
.env が無いと DB があっても復旧できない。
必ずバックアップ対象に含める。
⏱ ③ cron による自動バックアップ設定
📄 バックアップスクリプト作成
sudo nano /usr/local/bin/bookstack_backup.sh
#!/bin/bash
set -e
DATE=$(date +%F)
BACKUP_DIR=/var/backups/bookstack
APP_DIR=/var/www/BookStack
DB_NAME=bookstackdb
DB_USER=bookstackuser
mkdir -p "$BACKUP_DIR"
# DB
mysqldump -u "$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" \
| gzip > "$BACKUP_DIR/bookstackdb_${DATE}.sql.gz"
# uploads
tar czf "$BACKUP_DIR/bookstack_uploads_${DATE}.tar.gz" \
"$APP_DIR/storage/uploads"
# env
cp "$APP_DIR/.env" "$BACKUP_DIR/bookstack.env.${DATE}"
# 世代管理(14日)
find "$BACKUP_DIR" -type f -mtime +14 -delete
sudo chmod +x /usr/local/bin/bookstack_backup.sh
🕒 cron 登録(毎日 03:30)
sudo crontab -e
30 3 * * * DB_PASSWORD=<DBのパスワード> /usr/local/bin/bookstack_backup.sh
cron は OS のタイムゾーン依存。
date で JST か UTC かを必ず確認する。
🔍 cron 動作確認(即時)
sudo DB_PASSWORD=<DBのパスワード> /usr/local/bin/bookstack_backup.sh
ls -lh /var/backups/bookstack
.sql.gz / uploads / .env が同日付で揃えば成功。
☁️ ④ 外部媒体へのコピー(推奨)
Lightsail 内だけのバックアップは不十分。
インスタンス削除・ディスク破損には無力。
💻 ローカルPCへコピー(最小構成)
rsync -av lightsail:/var/backups/bookstack ./bookstack_backup
☁️ S3 へコピー(発展)
aws s3 sync /var/backups/bookstack s3://your-bucket/bookstack
S3 を使う場合は バージョニング や 暗号化 も検討すると安心。
✅ まとめ:バックアップ完了の判定基準
以下が 同一日付で揃っていれば完全バックアップ。
bookstackdb_YYYY-MM-DD.sql(.gz)
bookstack_uploads_YYYY-MM-DD.tar.gz
bookstack.env.YYYY-MM-DD
この3点があれば、BookStackはいつでも完全復旧可能。
🏁 おわりに
BookStackは 文章中心で軽量・バックアップしやすい設計になっている。
だからこそ、
- 正しく対象を理解し
- 確認可能な形で
- 自動化する
この3点を押さえることで、 安心して「知識を書く」ことに集中できる環境が完成する。
このマニュアルが、その土台になれば幸い。