WordPressをバックアップ・リストアする方法

WordPressでは

  • ファイル
  • データベース

をバックアップする

この2種類をバックアップしておけば
リストアして過去の状態に巻き戻したり
別のサーバーにWordPressを移転したりできる

wp_exampleというデータベースからバックアップを取得して
wp_exampleというデータベースにリストアすることを想定
(バックアップデータにCREATE DATABASEを含まない)

mysqldump --single-transaction -u root -pxxx wp_example > wp_example.sql

-pxxxxxxは、rootユーザーのパスワード
-pとパスワードのあいだにスペースは要らない

wp_exampleというデータベースをバックアップして、wp_example.sqlというファイルに書き出している

cd /home/user1/WordPress
tar cJf example.com.tar.xz example.com

example.comというディレクトリ(WordPressのドキュメントルート)を圧縮
example.com.tar.xzというファイルを作成する

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 {} +

日付をベースに出力先のファイル名を動的に設定している
それ以外は
データベースバックアップ(単発)
ファイルバックアップ(単発)
の操作と同等

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に保存

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

定期バックアップで使うコマンドと同じ

mysql -u root -p wp_example < wp_example.sql

rootユーザーでmysqlへログイン
wp_example.sqlファイルに書かれたSQLコマンド群を一括で実行する

復元対象のデータベース名として、wp_exampleを指定している

wp_example.sqlの中には
DROP TABLECREATE TABLEINSERTなどのデータベースを復元するためのコマンドが書かれている
CREATE DATABAEは含まない)

mysql -u root -p < wp_example.sql

rootユーザーでmysqlへログイン
wp_example.sqlファイルに書かれたSQLコマンド群を一括で実行する

wp_example.sqlの中には
CREATE DATABAECREATE TABLEINSERTなどのデータベースを復元するためのコマンドが書かれている

tar xJf example.com.tar.xz

example.com.tar.xzというファイルを解凍
example.comのようなディレクトリが生成される

example.comディレクトリをWordPressのドキュメントルートと置き換える

  • 最終更新: 2023/05/25 18:14