NextcloudのDBを自動バックアップする
ただのメモ
メモなのでコマンドミスとかあったらry
バックアップ先フォルダの作成と権限の設定
バックアップ保存先は自由に変更してください
sudo mkdir -p /var/backups/nextcloud/db
sudo chown -R root:root /var/backups/nextcloud
sudo chmod -R 750 /var/backups/nextcloud
外部にさらにバックアップする場合【必要なら】
外部バックアップソフトやrsync等が接続できるよう、特定のユーザー(例: backup_user)に権限を与えます。
www-dataに追加してるのはNextcloudフォルダをバックアップする必要がある場合用
sudo usermod -aG www-data backup_user
sudo mkdir -p /var/backups/nextcloud/db
sudo chown -R root:backup_user /var/backups/nextcloud
sudo chmod -R 750 /var/backups/nextcloud
パスワードの設定ファイルを作成する
sudo vi /root/.nextcloud_db.cnf
以下を追加
[client]
user=nextcloud
password="パスワードを入力してください"
host=localhost
sudo chmod 600 /root/.nextcloud_db.cnf
バックアップテスト(接続確認)
設定ファイルを使ってバックアップが作成できるかテストします。
※テストファイルは確認後 sudo rm で消しても大丈夫です。
sudo mysqldump --defaults-extra-file=/root/.nextcloud_db.cnf --single-transaction --default-character-set=utf8mb4 nextcloud | gzip > /var/backups/nextcloud/db/nextcloud_db_test.sql.gz
シェルスクリプトを使う場合(例)
sudo mkdir -p /root/scripts
sudo vi /root/scripts/nextcloud_backup.sh
以下を追加
#!/bin/bash
# 設定
BACKUP_DIR="/var/backups/nextcloud/db"
CONFIG_FILE="/root/.nextcloud_db.cnf"
DATE=$(date +%F_%H-%M-%S)
FILENAME="nextcloud_db_$DATE.sql.gz"
# ディレクトリがなければ作成
mkdir -p "$BACKUP_DIR"
# エラーがあった場合は失敗として処理する
set -o pipefail
# 1. バックアップ実行
if mysqldump --defaults-extra-file=$CONFIG_FILE --single-transaction --default-character-set=utf8mb4 nextcloud | gzip > "$BACKUP_DIR/$FILENAME"; then
echo "Backup Successful: $FILENAME"
# 2. 古いバックアップの削除(バックアップ成功時に実行)
# 7日以上前のファイルを削除
find "$BACKUP_DIR" -name "nextcloud_db_*.gz" -mtime +7 -delete
echo "Old backups cleaned up."
else
echo "Backup FAILED!"
# 失敗時はエラー終了
exit 1
fi
権限追加
sudo chmod 700 /root/scripts/nextcloud_backup.sh
cronへ登録
0 3 * * * /root/scripts/nextcloud_backup.sh
Cronだけでやる場合
Cronへ追加
sudo crontab -u root -e
以下のように設定する
0 3 * * * mysqldump --defaults-extra-file=/root/.nextcloud_db.cnf --single-transaction --default-character-set=utf8mb4 nextcloud | gzip > /var/backups/nextcloud/db/nextcloud_db_$(date +\%F_\%H-\%M-\%S).sql.gz
古いバックアップを自動削除する
古いバックアップの削除 (3:10に実行)
10 3 * * * find /var/backups/nextcloud/db/ -name "nextcloud_db_*.gz" -mtime +7 -delete