このブログのバックアップロジックを書いたメモ
はじめに
このブログの環境
バックアップの概要
定期的にバックアップファイルを作成して、個人利用しているDropboxにアップロードする。
バックアップするもの
- Ghostの設定ファイル
- ブログのコンテンツ(テーマや画像など)
- 記事データ
ロジック
以下のスクリプトを /usr/local/bin/backup_ghost.sh
として保存。
crontabで 0 5 * * 1 backup_ghost.sh
として毎週月曜のAM5:00に定期実行する。
#!/bin/sh
# backup ghost blog
NOW=`date "+%Y%m%d%H%M"`
BACKUP="blog_${NOW}"
BACKUP_NAME="${BACKUP}.tar.gz"
BACKUP_ROOT="${HOME}/tmp/backup"
BACKUP_PATH="${BACKUP_ROOT}/${BACKUP}"
DB_EXTRA_FILE="${HOME}/.backup_ghost_database.my"
#
############
# make dir
if [ ! -e ${BACKUP_PATH} ]; then
mkdir -p ${BACKUP_PATH}
fi
#
############
# copy files
cp -r /var/www/ghost/config.production.json "${BACKUP_PATH}/"
cp -r /var/www/ghost/content "${BACKUP_PATH}/"
#
############
# backup database
mysqldump --defaults-extra-file="${DB_EXTRA_FILE}" ghost_prod > "${BACKUP_PATH}/ghost_prod_${NOW}.dump"
#
############
# complession files
cd ${BACKUP_ROOT}
tar czf ${BACKUP_NAME} ${BACKUP}
#
############
# upload backup file
dropbox_uploader.sh -q upload ${BACKUP_NAME} "backup/${BACKUP_NAME}"
#
############
# remove
rm -rf "${BACKUP_PATH}"
処理の流れ
- 現在日時を年月日時分のフォーマットで取り出し、バックアップファイル名にする。
- バックアップファイルを配置するディレクトリは
$HOME/tmp/backup
無かったら作る - Ghostの設定ファイルとコンテンツをバックアップディレクトリに複製
- 記事データはGhostのCUIでExportできないのでmysqlのデータベースをdumpする
- 圧縮
- Dropboxにアップロード
- バックアップディレクトリを削除(圧縮ファイルは一応残している)
補足
Dropboxにファイルアップロード
DropboxへのアップロードはDropbox-Uploaderを使用する。
クローンしてPATHを通す。今回は/usr/local/binに配置からシンボリックリンク。
$ cd /usr/local/src/
$ git clone https://github.com/andreafabrizi/Dropbox-Uploader
$ ln -s /usr/local/src/Dropbox-Uploader/dropbox_uploader.sh /usr/local/bin/dropbox_uploader.sh
DropboxのMy Appsでアプリを作成する。
※参考 https://blog.bgbgbg.net/archives/2507
mysql(mysqldump)コマンドでパスワードをコマンドに書かない方法
今回はcrontabで実行するため対話的にパスワードを入力することができない。
しかしパスワードをワンライナーで入力するとワーニングが発生する。
例としてユーザを saito
パスワードを himitsu
データベース名を ghost_prod
として。
$ mysqldump -u saito --password=himitsu -h localhost ghost_prod > ghost_prod_202002110918
mysqldump: [Warning] Using a password on the command line interface can be insecure.
回避する為に --defaults-extra-file
を指定する。
内容は下記の通り。これを今回は ~/.backup_ghost_database.my
として配置。
[client]
user=saito
password=himitsu
host=localhost
あとは通常通りmysqldumpコマンドを実行。
mysqldump --defaults-extra-file="${DB_EXTRA_FILE}" ghost_prod > "${BACKUP_PATH}/ghost_prod_${NOW}.dump"
追記
記事データはGhostのCUIでExportできないのでmysqlのデータベースをdumpする
できたっぽい。
ghost export {path_to_export}
ファイルの中身は管理画面でExportするものと同じものに見えました(ちゃんと確認していない)。