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_

使い方

  1. ソースをテキストファイルにコピー、「個人設定」部分を各自の環境に合わせて設定し、適当な名前で保存
  2. FTPとかSCPとかで保存したファイルをサーバにアップロード
  3. ソースをテキストファイルにコピーし、「個人設定」部分を各自の環境に合わせて設定
  4. 実行権限を付与「chmod 755 アップロードしたファイル」
  5. スクリプト実行「sh アップロードしたファイル」
  6. バックアップが作成されていることを確認
  7. cronに登録

以上でデータベースのバックアップ自動化の設定完了です。
夜中に毎日実行して気が向いたときにFTPなりでダウンロードするのがよいでしょう。
もう少し機能追加を考えているので、変更したら再度エントリーいたします。