Edited at

Growiのバックアップとリストア


バックアップ手順


1. Growiのバックアップ/リストアに必要なもの


  • アップロードされたファイル

    growiのインストールフォルダ/public/uploads の中身

  • Mongodbのダンプファイル

以上二つがリストアに必要なものとなる。


2. Growi用バックアップ取得スクリプト

/usr/local/bin/backup-scripts/growi-backup.shを作成。

リストアに必要なファイルをyyyymmdd_growi-backup.tar.gzとしてまとめて

/mnt/backups/growi内に保存し、31日以前の古いファイルを消す。

:/usr/local/bin/backup-scripts/growi-backup.sh

#!/bin/bash

# 変数
TODAY=`date +"%Y%m%d"`
INSTALL_PATH=/usr/local/bin/growi
BACKUP_PATH=/mnt/backups/growi

# Backup
#### upload-files
tar -C ${INSTALL_PATH}/public -cf ${BACKUP_PATH}/upload-files.tar uploads
#### db-data
mongodump -d growi --gzip --archive=${BACKUP_PATH}/dbdump.gz
#### Archive-files+db
tar -C ${BACKUP_PATH} -zcvf ${BACKUP_PATH}/${TODAY}_growi-backup.tar.gz upload-files.tar dbdump.gz

#### delete tmp-files
rm -fR ${BACKUP_PATH}/upload-files.tar
rm -fR ${BACKUP_PATH}/dbdump.gz

# Delete older 31days
find ${BACKUP_PATH} -name "*.tar.gz" -mtime +31 -delete


3. cronで登録

毎日4:15にバックアップスクリプトを実行させる。

crontab -eで編集モードに入るので以下を追記。

15 4 * * * sh /usr/local/bin/backup-scripts/growi-backup.sh

crontab -lで結果確認

$ crontab -l

15 4 * * * sh /usr/local/bin/backup-scripts/growi-backup.sh

cronのログは/var/log/cron



リストア手順


1. バックアップファイルの解凍

/mnt/bakups/growi/に保存されたファイルから戻したいものを選択し、

解凍して適用可能な状態にする。

$ tar zxvf growi-backup.tar.gz

tarを解凍すると以下の2ファイルが出てくる。

upload-files.tar

dbdump.gz

さらにupload-files.tarを解凍する。

mongodbはgzipから戻せるのでdbdump.gzは解凍不要

$ tar xvf upload-files.tar

dbdump.gzとディレクトリuploadsが揃えばリストアできる。


3. Growiの停止

一度サービスを停止する。

$ systemctl stop  growi.service

$ systemctl status growi.service

inactive (dead)であることを確認する。


3. アップロードファイルのリストア

uploadsフォルダを上書きすればOK

$ cp -rf uploads /usr/local/bin/growi/public/.


4. DBデータのリストア

mongorestreコマンドを使用し、gzipから復旧する。

バックアップと同じく -dはDB名指定。

環境に合わせて実行すること。

$ mongorestore --gzip --archive=dbdump.gz -d growi --drop

--dropでDB完全消去して入れ直し。

忘れると復旧はしたがキーが重複してるとエラーが出る。

無くても良いかもしれないがあったほうが無難そう。


5. Growiの再開

$ systemctl start  growi.service

データに問題ないか確認して終了。