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のドキュメントルートと置き換える