■ バックアップ対象
* 他にもあるかもしれませんが...【a】 DBファイル「taskboard.db」 【b】アップロードしたファイル群が格納されたディレクトリ「uploads」
主なディレクトリ構成
/var/www/taskboard + api + taskboard.db ... SQLite の DBファイル + uploads ... アップロードしたファイル群を格納するディレクトリ
■ バックアップについて
環境
* バックアップ元 : CentOS7 / TaskBoard * バックアップ先 : Windows Server 2008
バックアップ方針概要
シンプルに... 【1】 バックアップ対象「taskboard.db」「uploads」を日時を付加して圧縮し、バックアップ先に格納 【2】 古いファイルは削除する 【3】 【1】【2】をシェルで行い、cronで定期実行(一日夜間に一回実行)
■ 設定手順
【1】 バックアップ先のWindowsでバックアップ用のユーザおよびバックアップ用の共有ファルダを作成する 【2】 バックアップ元のCentOS7 からWindows共有フォルダをマウントする 【3】 バックアップ用のシェルスクリプトを作成 【4】 cronでバックアップ用のシェルスクリプトを定期実行
【1】 バックアップ先でバックアップ用のユーザ/共有ファルダを作成する
* バックアップ用のユーザ「backup-admin (一般ユーザ)」でパスワード「password」にする * バックアップ用の共有ファルダ「shards」は、「Everyone:書き込み、読み込み」にする
【2】 バックアップ元のCentOS7 からWindows共有フォルダをマウントする
* マウント先を「/home/admin/backups」にする * やり方は以下の関連記事を参照https://blogs.yahoo.co.jp/dk521123/37415363.html
コマンド例
mkdir -p /home/admin/backups sudo vi /etc/fstab ~~~~ //192.168.16.XXX/shared /home/admin/backups cifs username=backup-admin,password=password 0 0 ~~~~ # fstab の反映 sudo mount -a
【3】 バックアップ用のシェルスクリプトを作成
* 以下を圧縮し、日時を付加して圧縮 ~~~~~ 【a】 DBファイル「/var/www/taskboard/api/taskboard.db」 【b】 ディレクトリ「/var/www/taskboard/api/uploads」 ~~~~~ * /etc/backups/backups-taskboard.sh に保存/etc/backups/backups-taskboard.sh
#!/bin/bash # 付加する日付 NOW=$(date "+%Y%m%d_%H%M%S") # 削除対象日数(7日以上前のファイルを消す) DAY_TO_DELETE="+7" # バックアップ先(マウント先)のパス情報 BACKUP_DIR="/home/admin/backups/taskboard" BACKUP_FILENAME="${NOW}-taskboard.tar.gz" BACKUP_FULLPATH="${BACKUP_DIR}/${BACKUP_FILENAME}" # バックアップ対象 BACKUP_TARGET1="/var/www/taskboard/api/taskboard.db" BACKUP_TARGET2="/var/www/taskboard/api/uploads" # 一時ディレクトリ(もっとちゃんとやるならランダム生成した方がいいが簡易でいいので) TMP_ROOT_DIR="/tmp" WORK_DIR_NAME="taskboard-${NOW}" WORK_DIR="${TMP_DIR}/${WORK_DIR_NAME}" mkdir -p ${WORK_DIR} # 一時ディレクトリにバックアップ対象をコピー cp ${BACKUP_TARGET1} "${WORK_DIR}/." [ ! -d ${BACKUP_TARGET2} ] && cp -R ${BACKUP_TARGET2} "${WORK_DIR}/." # 圧縮 tar -zcvf ${BACKUP_FULLPATH} -C ${TMP_ROOT_DIR} ${WORK_DIR_NAME} # 念のため権限変更 chmod 777 ${BACKUP_FULLPATH} # 古いファイルを削除 find ${BACKUP_DIR} -type f -mtime ${DAY_TO_DELETE} -exec rm {} \; # 後片付け rm -R ${WORK_DIR}
【4】 cronでバックアップ用のシェルスクリプトを定期実行
* cron については、以下の関連記事を参照https://blogs.yahoo.co.jp/dk521123/36463384.html
サンプル:平日23:45にバックアップ用のシェルスクリプトを定期実行
crontab -e ~~~~~~~~~ 45 23 * * 1-5 /etc/backups/backups-taskboard.sh ~~~~~~~~~
■ リストア
前提条件
* 以下の関連記事のようにTaskBoard の環境が整っていることhttps://blogs.yahoo.co.jp/dk521123/37620136.html
手順
【1】 バックアップの圧縮ファイルを解凍 ~~~~~ tar xvzf 20180816_234500-taskboard.tar.gz ~~~~~ 【2】 デプロイ ~~~~~ sudo cp /var/www/taskboard/api/taskboard.db /var/www/taskboard/api/taskboard.db.orig sudo mv taskboard.db /var/www/taskboard/api/taskboard.db sudo mv uploads /var/www/taskboard/api/. ~~~~~ 【3】 サーバ再起動 ~~~~~ sudo systemctl restart httpd ~~~~~
■ 補足 : 使用したTips
付加する日付
`date "+%Y%m%d_%H%M%S"` # 変数として利用するなら... NOW=$(date "+%Y%m%d_%H%M%S")参考文献
https://qiita.com/mochizukikotaro/items/f3a78d631595f9744a75
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/240datefilename.html
古いファイルを削除
* findコマンドのmtimeオプションを使う参考文献
https://curecode.jp/tech/find-mtime-delete/
https://qiita.com/makaaso/items/474d9f198c35d9587f15