WordPressをバックアップ・リストアする方法
WordPressでは
- ファイル
- データベース
をバックアップする
この2種類をバックアップしておけば
リストアして過去の状態に巻き戻したり
別のサーバーにWordPressを移転したりできる
WordPressのデータベースをバックアップ(単発)
wp_exampleというデータベースからバックアップを取得して
wp_exampleというデータベースにリストアすることを想定
(バックアップデータにCREATE DATABASEを含まない)
mysqldump --single-transaction -u root -pxxx wp_example > wp_example.sql
-pxxxのxxxは、rootユーザーのパスワード
-pとパスワードのあいだにスペースは要らない
wp_exampleというデータベースをバックアップして、wp_example.sqlというファイルに書き出している
WordPressのファイルをバックアップ(単発)
cd /home/user1/WordPress tar cJf example.com.tar.xz example.com
example.comというディレクトリ(WordPressのドキュメントルート)を圧縮
example.com.tar.xzというファイルを作成する
WordPressのファイルとデータベースをバックアップ(cronで定期実行)
WordPressのファイルとデータベースをバックアップするシェルスクリプトを作成し
crontabで定期実行する
バックアップ用のディレクトリを作成
cd /home/user1/WordPress mkdir -p Backup/Archives
/home/user1/WordPressディレクトリの下に
- example.com
- aaa.com
のようなサイトごとのドキュメントルートが作成してあると想定
/home/user1/WordPressの下に
Backup/Archives
というディレクトリを作成する
(バックアップデータの保管場所として利用するため)
Archivesディレクトリの下に
xxx_日付.tar.xz(ファイルバックアップ)xxx_日付.sql(データベースバックアップ)
のようなファイルを定期的に保存することを想定
バックアップ用のシェルスクリプトを作成
cd /home/user1/WordPress vi Backup/backup_xxx.sh
Backupディレクトリにbackup_xxx.shのようなファイルを新規作成、バックアップ用のシェルスクリプトを書く
(サイトごとに別々のbackup_xxx.shを作成)
- backup_xxx.sh
#!/bin/sh # バックアップ対象のディレクトリ名 SITE=example.com # データベース名 DBNAME=wp_example # MySQLのrootユーザーのパスワード PASSWORD=xxx # バックアップファイルの保管期間 STORAGE_DAYS=14 # WordPressディレクトリへ移動 cd $(dirname $0)/.. # バックアップの保存先ディレクトリ DIR_ARCHIVES=./Backup/Archives # ファイルバックアップの対象を設定 DIR_TARGET1=./$SITE # プロジェクト名と今日の日付をベースに.tar.xzのファイル名を設定 TODAY=$(date +%Y%m%d) FNAME1=${SITE}_$TODAY.tar.xz FPATH1=$DIR_ARCHIVES/$FNAME1 # ファイルをバックアップ tar cJf $FPATH1 $DIR_TARGET1 echo "Created backup: $FNAME1" # プロジェクト名と今日の日付をベースに.sqlのファイル名を設定 FNAME2=${DBNAME}_$TODAY.sql FPATH2=$DIR_ARCHIVES/$FNAME2 # データベースをバックアップ mysqldump --single-transaction -u root -p$PASSWORD $DBNAME > $FPATH2 echo "Created backup: $FNAME2" # 古いバックアップを削除 find $DIR_ARCHIVES -type f -mtime +$STORAGE_DAYS -exec rm -f {} +
日付をベースに出力先のファイル名を動的に設定している
それ以外は
データベースバックアップ(単発)
ファイルバックアップ(単発)
の操作と同等
crontabでバックアップを定期実行
su crontab -e
- crontab
1 2 */3 * * sh /home/user1/WordPress/Backup/backup_xxx.sh > /tmp/cron.backup_wordpress_xxx.log
backup_xxx.shを3日に1回、2時1分に実行、ログをcron.backup_wordpress_xxx.logに保存
WordPressのファイルとデータベースをバックアップ(サーバー移転用)
データベースをバックアップ
wp_exampleというデータベースからバックアップを取得して
wp_exampleというデータベースがない環境にリストアすることを想定
(バックアップデータにCREATE DATABASEを含む)
mysqldump --single-transaction -u root -pxxx --databases wp_example > wp_example.sql
wp_exampleというデータベースをバックアップして
wp_example.sqlというファイルに保存
--databasesを指定することで、出力結果にCREATE DATABASEが含まれる
(定期バックアップのデータベースバックアップにはCREATE DATABASEが含まれていない)
ファイルバックアップ
cd /home/user1/WordPress tar cJf example.com.tar.xz example.com
定期バックアップで使うコマンドと同じ
WordPressのデータベースをリストアする(定期バックアップから)
mysql -u root -p wp_example < wp_example.sql
rootユーザーでmysqlへログイン
wp_example.sqlファイルに書かれたSQLコマンド群を一括で実行する
復元対象のデータベース名として、wp_exampleを指定している
wp_example.sqlの中には
DROP TABLE・CREATE TABLE・INSERTなどのデータベースを復元するためのコマンドが書かれている
(CREATE DATABAEは含まない)
WordPressのデータベースをリストアする(サーバー移転用バックアップから)
mysql -u root -p < wp_example.sql
rootユーザーでmysqlへログイン
wp_example.sqlファイルに書かれたSQLコマンド群を一括で実行する
wp_example.sqlの中には
CREATE DATABAE・CREATE TABLE・INSERTなどのデータベースを復元するためのコマンドが書かれている
WordPressのファイルをリストアする
tar xJf example.com.tar.xz
example.com.tar.xzというファイルを解凍
example.comのようなディレクトリが生成される
example.comディレクトリをWordPressのドキュメントルートと置き換える