CORESERVERでWordPressのDBバックアップを自動化する
MovableTypeで運用している時もそうでしたが、ブログのバックアップには無頓着な方だと思います。
気の向いたときにブログシステム上でエクスポートするくらい。
それでもMovableTypeの時は、静的ページを出力していたので、ブログ自体が表示されなくなることはありませんでしたが、WordPressだとそうもいきません。
今回の移行を機に、しっかりとバックアップを取るようにしたいと思います。
だが、しかし・・・
バックアップのためだけにサーバにログインするのはメンドくさい。。
phpMyAdminをインストールしてバックアップを取得することもできるが、ブラウザからアクセスする手間があり、効率的はない。。
WordPressのプラグインもあるけれど、Webで漁るかぎり、動作に不安がある。。
同じことを考えている人は他にもいる
世代管理やバックアップの自動化を実現するために、bashスクリプトを作成してcronで回すことに決定。
Google先生に聞いてみたら、すでに他の方が作成してくれていました。
CORESERVER.JPでMySQL(DB)を自動バックアップする方法 – ひとぅブログ,2009/01/04
そのまま拝借してもよかったのですが、少し自分なりの味付けを加えます。
自分の環境で事前テストは実施していますが、使用・導入は自己責任でお願いします。
変更履歴
- 2010/01/20 Ver0.3 バックアップ作成失敗/成功時に通知メールを送信するようにしました
- 2009/12/01 Ver0.2 WordPressのアップロードディレクトリ(デフォルト:wp-content)もバックアップ対象に追加しました
- 2009/11/27 Ver0.1 公開
ソース
#!/bin/bash ########################################################## # # Wordpress データベースバックアップ作成スクリプト # # FileName: # wpdb_backup.sh # # Description: # Wordpressのデータベースを作成するスクリプト # # Use: # sh wpdb_backup.sh # # 制限・前提: # coreserver上で動作している # データベースにMySQLを使用している # # Version: # 0.3 2010.01.20 matakichi # # Changelog: # 0.3 -> バックアップ作成失敗/成功時に通知メールを送信 # 0.2 -> wp-contentディレクトリをバックアップ対象に追加 # 0.1 -> 初回公開 # ########################################################## export LANG=ja_JP.UTF8 ########################################################## ### 個人設定 ########################################################## DBNAME="" DBUSERNAME="" DBPASSWORD="" CORESERVERUSERNAME="" BACKUPDIR="" KEEPCNT="" SITENAME="" WP_DIR="/virtual/${CORESERVERUSERNAME}/public_html/${SITENAME}" CONTENT_DIR="wp-content" MAIL_ADDRESS="" ########################################################## ### 初期化(CORESERVER用) ########################################################## DBSERVER="localhost" DATE=`date "+%Y/%m/%d %H:%M:%S"` NOWDATE=`date +%Y%m%d` DESTDIR="/virtual/${CORESERVERUSERNAME}/${BACKUPDIR}" DUMPFILE="${SITENAME}.${NOWDATE}.dump" TARFILE="${SITENAME}.${NOWDATE}.tar.gz" ########################################################## ### 保管ディレクトリがなければ作成 ########################################################## if [ -e ${DESTDIR} ]; then DESTDIR=${DESTDIR} else mkdir -p ${DESTDIR} fi ########################################################## ### MySQLダンプ/圧縮 ########################################################## cd ${WP_DIR} /usr/local/mysql/bin/mysqldump ${DBNAME} --host=${DBSERVER} -u ${DBUSERNAME} --password=${DBPASSWORD} > ${DUMPFILE} tar zcf ${DESTDIR}/${TARFILE} ${DUMPFILE} ${CONTENT_DIR} ########################################################## ### 処理判定 ########################################################## if [ $? != 0 -o ! -e ${DESTDIR}/${TARFILE} ]; then mail -s "自動バックアップ失敗(${SITENAME})" ${MAIL_ADDRESS} <<_EOF_ ${NOWDATE}分のバックアップ作成に失敗しました。 サーバにログインして確認してください。 _EOF_ exit 1 fi ########################################################## ### 圧縮前ファイル削除 ########################################################## rm -f ${DUMPFILE} ########################################################## ### KEEPCNT分を超えたバックアップファイルを削除 ########################################################## filecnt=`ls -l ${DESTDIR}/${SITENAME}* |wc -l` if [ ${filecnt} -gt ${KEEPCNT} ]; then rmfile=`ls -l ${DESTDIR}/${SITENAME}* |head -n 1 |awk '{ print $8 }'` rm -f ${rmfile} rmmsg="保存上限数「${KEEPCNT}」を超えたので、もっとも古いバックアップファイル(${rmfile})を削除しました。" else rmmsg="現在保管されているバックアップファイル数が「${filecnt}」のため、削除処理は実行されませんでした。" fi mail -s "自動バックアップ完了 (${SITENAME})" ${MAIL_ADDRESS} <<_EOF_ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ◆ Wordpressデータベース自動バックアップスクリプトからの通知 ${DATE} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【1】バックアップ作成 -------------------------------------------------------------------------------- ■新規作成ファイル名 ${DESTDIR}/${TARFILE} ■内容 ${DUMPFILE} ${CONTENT_DIR} ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 【2】バックアップファイルの削除 -------------------------------------------------------------------------------- ■バックアップファイル保管数 ${filecnt}個 ■削除処理 ${rmmsg} _EOF_
使い方
- ソースをテキストファイルにコピー、「個人設定」部分を各自の環境に合わせて設定し、適当な名前で保存
- FTPとかSCPとかで保存したファイルをサーバにアップロード
- ソースをテキストファイルにコピーし、「個人設定」部分を各自の環境に合わせて設定
- 実行権限を付与「chmod 755 アップロードしたファイル」
- スクリプト実行「sh アップロードしたファイル」
- バックアップが作成されていることを確認
- cronに登録
以上でデータベースのバックアップ自動化の設定完了です。
夜中に毎日実行して気が向いたときにFTPなりでダウンロードするのがよいでしょう。
もう少し機能追加を考えているので、変更したら再度エントリーいたします。