WordPressのバックアップ

2017年6月4日

インストールのところで説明したように、WordPressはMySQLデータベースを利用します。

バックアップすべきデータとしてはMySQLのデータとWordPressディレクトリ下にある画像データ等のメディアファイルや子テーマのカスタム内容といったところでしょうか。

WordPressファイルのバックアップ

簡単な方から手を付けましょう。

上記のとおりメディアファイルや子テーマディレクトリ内のファイルが肝ですが、面倒なのでドキュメントルート内のすべてのファイルを保存しておくと良さそうです。

以前サーバーの引っ越しをしたとき、ドキュメントルート内のすべてのファイルを移動したらすごく楽だったので、ディレクトリ構造を含めてパックしてしまいましょう。

cd /usr/local/www
tar -cvzf /root/backup/junkworks-backup.tar.gz junkworks

戻すときはこう。

cd /usr/local/www
tar -xvzf /root/backup/junkworks-backup.tar.gz

MySQLデータのバックアップ

例によってMySQLを直接操作してデータを吸い出します。mysqldumpコマンドを使うとデータベース単位でデータの書き出しができます。

これはsqlファイルというテキストファイルになります。

mysqldump -uuser_name -h localhost -p --opt database_name > database_name.sql

戻すときはこう。あらかじめ元に戻す空のデータベースを作っておきます。

mysql -uuser_name -h localhost -p database_name < database_name.sql

sqlファイルはsqlコマンドを含んだもので、mysqlにリダイレクトしてやるだけでデータベースを復元できます。

これね、パラメータとかいちいち覚えるの面倒だし、データベース名やユーザー名なんか全部wp-config.phpに書いてあるんだからそこから抜き出したほうがいいよね。で、バックアップコマンドやレストアコマンドを組み立てて表示させれば適宜コピペできて便利じゃない?

#! /bin/sh
WORD_LIST='DB_NAME DB_USER DB_PASSWORD DB_HOST table_prefix'
printf "%s\n" "[WordPress settings]"
for n in `echo $WORD_LIST`
do
  value=`grep wp-config.php -e $n | sed -e "s/.*\('[^']*'\)[^']*/\1/"`
  eval $n=$value
  echo "$n=$value"
done
printf "\n%s\n" "[Backup command]"
echo "mysqldump -u$DB_USER -h $DB_HOST -p --opt $DB_NAME > ${DB_NAME}.sql"
printf "\n%s\n" "[Restore command]"
echo "mysql -u$DB_USER -h $DB_HOST -p $DB_NAME < ${DB_NAME}.sql"

出力結果はこんな感じになります。

[WordPress settings]
DB_NAME='database_name'
DB_USER='user_name'
DB_PASSWORD='password'
DB_HOST='localhost'
table_prefix='wp_'

[Backup command]
mysqldump -uuser_name -h localhost -p --opt database_name > database_name.sql

[Restore command]
mysql -uuser_name -h localhost -p database_name < database_name.sql