BookStack データのバックアップ方法
🧭 はじめに
本記事では、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 が同日付で揃えば成功。