メインコンテンツまでスキップ

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