システムの信頼性は「復元できること」で証明される。
こんにちは!「LINUX工房」管理人の「リナックス先生」です。
Webサイトの運用において、最も重要なタスクの一つがバックアップです。
あなたは現在、どのような方法でWordPressのデータを保護していますか?
便利なプラグイン(UpdraftPlusやAll-in-One WP Migrationなど)は多数存在し、これらは手軽で素晴らしいツールです。
しかし、エンジニアとしてサーバー運用を行う場合、プラグインだけに依存することにはいくつかの技術的な課題があります。
- リストア時のリソース制限: データ量が数GBを超えると、PHPのメモリ制限やタイムアウトにより、管理画面からの復元が完了しない場合がある。
- OS設定の範囲外: プラグインは通常、
httpd.confやphp.ini、Cron設定などのOSレベルの設定までは保存しない。 - ブラックボックス化: 障害発生時にWebサーバー自体が起動しない場合、プラグイン画面にアクセスできず復旧手段がなくなる。
どのような状況下でも確実に復旧させるためには、「OSの標準コマンドを用いた、シンプルかつ完全なバックアップ」が最も信頼できます。
今回は、AlmaLinux 9 環境を前提に、WordPressの全データ(コンテンツ、データベース、OS設定)をバックアップし、真っ更なサーバーへ確実にリストア(復元)する手順を解説します。
先生、バックアップの重要性は理解しているつもりですが、黒い画面(ターミナル)での操作は少し不安です。
AlmaLinuxを使っているのですが、SELinuxの設定や権限周りでつまづくことが多くて…。
コマンドだけで確実にバックアップし、元通りに戻せる手順を知りたいです!
良い心がけね、コウ君。
RHEL系OS(AlmaLinux)では、ファイルの所有権だけでなく、SELinuxのコンテキスト管理もバックアップ戦略の重要な要素よ。
今回は手動での実行手順から、スクリプトによる自動化まで、実務で使える技術を丁寧に解説するわね。
本記事では、WordPress環境の完全バックアップとリストア手順を、実際のコマンド付きで解説します。
📚 参考となる公式ドキュメント
目次
1. バックアップの全体像と戦略
作業を始める前に、AlmaLinux 9上でWordPressがどのように動作しているか、バックアップ対象を整理しましょう。
完全な復元のためには、以下の3つの領域を保存する必要があります。
バックアップすべき3つの領域
| 領域 | 具体的なパス (AlmaLinux 9標準) | 役割 |
|---|---|---|
| 1. コンテンツ領域 (ファイルシステム) |
/var/www/html/ |
WordPress本体、テーマ、プラグイン、アップロード画像。サイトの見た目と機能を構成します。 |
| 2. データベース領域 (SQL) |
MariaDB 10.5 (データそのもの) | 投稿記事本文、設定、ユーザー情報。サイトの主要データを保持します。 |
| 3. OS設定領域 (Config) |
/etc/httpd/, /etc/php.ini, /etc/my.cnf.d/ |
WebサーバーやDBのチューニング設定。これを保存しないと、復旧後にパフォーマンスが出なかったり、動作不良の原因になります。 |
2. 【実践】手動バックアップ:構造を理解する
スクリプトで自動化する前に、まずは手動でコマンドを実行し、各プロセスの意味を理解しましょう。
※本手順はrootユーザーでSSH接続している前提で進めます。
2-1. データベース情報の確認
WordPressの設定ファイルから、データベースへの接続情報を確認します。
# ドキュメントルートへ移動 cd /var/www/html # wp-config.php からDB情報を抽出 grep -E "DB_NAME|DB_USER|DB_PASSWORD" wp-config.php
出力結果の例:
define( 'DB_NAME', 'wp_database' ); define( 'DB_USER', 'wp_user' ); define( 'DB_PASSWORD', 'StrongPassword123' );
この情報(DB名、ユーザー、パスワード)を控えておきます。
2-2. データベースのバックアップ (mysqldump)
データベースの中身をSQLファイルとしてエクスポートします。
# バックアップディレクトリ作成 mkdir -p /backup/manual # ダンプ実行 mysqldump -u wp_user -p'StrongPassword123' \ --single-transaction --no-tablespaces wp_database > /backup/manual/db_dump.sql
💡 AlmaLinux 9での注意点
AlmaLinux 9標準のMariaDB 10.5では、バックアップユーザーの権限によっては LOCK TABLES 時にエラーが出ることがあります。--no-tablespaces オプションを付与することで、これを回避しスムーズにバックアップを取得できます。
2-3. コンテンツのバックアップ (tar)
WordPressのファイル群をアーカイブ(圧縮)します。
# ドキュメントルートを圧縮 # pオプションでパーミッション情報を維持することが重要です tar -czvpf /backup/manual/wp_files.tar.gz -C /var/www/html .
2-4. OS設定のバックアップ
ミドルウェアの設定ファイルも退避させます。
mkdir -p /backup/manual/configs # Apache設定 cp -r /etc/httpd/conf /backup/manual/configs/httpd_conf cp -r /etc/httpd/conf.d /backup/manual/configs/httpd_conf_d # PHP設定 cp /etc/php.ini /backup/manual/configs/ cp -r /etc/php.d /backup/manual/configs/php_d cp -r /etc/php-fpm.d /backup/manual/configs/php_fpm_d # DB設定 cp -r /etc/my.cnf.d /backup/manual/configs/my_cnf_d # Cron設定 cp -r /var/spool/cron /backup/manual/configs/cron_tabs # まとめて圧縮 tar -czvf /backup/manual/server_configs.tar.gz -C /backup/manual/configs .
3. 【実践】自動化シェルスクリプトの作成
手動で行った手順を自動化し、さらに古いバックアップを自動削除するスクリプトを作成します。
3-1. バックアップスクリプト (wp_backup.sh)
vi /root/wp_backup.sh でファイルを作成し、以下の内容を記述します。
※設定変数(DB_USERやDB_PASS等)はご自身の環境に合わせて書き換えてください。
#!/bin/bash
# ==========================================
# 設定エリア (環境に合わせて変更)
# ==========================================
# バックアップ保存先
BACKUP_ROOT="/backup/wordpress"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="${BACKUP_ROOT}/${DATE}"
# WordPress設定
WP_ROOT="/var/www/html"
DB_NAME="wp_database"
DB_USER="wp_user"
DB_PASS="StrongPassword123"
DB_HOST="localhost"
# 保存期間(日)
RETENTION_DAYS=7
# ログファイル
LOG_FILE="/var/log/wp_backup.log"
# ==========================================
# 処理開始
# ==========================================
mkdir -p ${BACKUP_DIR}
echo "[${DATE}] Backup started." >> ${LOG_FILE}
# 1. データベースのダンプ
echo "Dumping database..."
mysqldump -u ${DB_USER} -p"${DB_PASS}" -h ${DB_HOST} \
--single-transaction --no-tablespaces ${DB_NAME} > ${BACKUP_DIR}/db_dump.sql
if [ $? -eq 0 ]; then
echo "DB Dump Success." >> ${LOG_FILE}
else
echo "DB Dump FAILED!" >> ${LOG_FILE}
exit 1
fi
# 2. コンテンツの圧縮
echo "Archiving files..."
tar -czpf ${BACKUP_DIR}/wp_files.tar.gz -C ${WP_ROOT} .
if [ $? -eq 0 ]; then
echo "File Archive Success." >> ${LOG_FILE}
else
echo "File Archive FAILED!" >> ${LOG_FILE}
exit 1
fi
# 3. OS設定のバックアップ
echo "Archiving configs..."
mkdir -p ${BACKUP_DIR}/configs
[ -f /etc/php.ini ] && cp /etc/php.ini ${BACKUP_DIR}/configs/
[ -d /etc/httpd ] && cp -r /etc/httpd ${BACKUP_DIR}/configs/
[ -d /etc/my.cnf.d ] && cp -r /etc/my.cnf.d ${BACKUP_DIR}/configs/
[ -d /var/spool/cron ] && cp -r /var/spool/cron ${BACKUP_DIR}/configs/
tar -czf ${BACKUP_DIR}/server_configs.tar.gz -C ${BACKUP_DIR} configs
rm -rf ${BACKUP_DIR}/configs
# 4. 全体をまとめて1つのファイルに圧縮
cd ${BACKUP_ROOT}
tar -czf ${DATE}_full_backup.tar.gz ${DATE}
rm -rf ${DATE} # 一時ディレクトリ削除
# 5. 古いバックアップの削除
echo "Cleaning up old backups..."
find ${BACKUP_ROOT} -name "*_full_backup.tar.gz" -mtime +${RETENTION_DAYS} -delete
echo "[$(date +%Y%m%d_%H%M%S)] Backup completed successfully." >> ${LOG_FILE}
exit 0
3-2. 実行権限の付与とテスト
chmod +x /root/wp_backup.sh /root/wp_backup.sh
実行後、/backup/wordpress/ 配下に YYYYMMDD_HHMMSS_full_backup.tar.gz が生成されていれば成功です。
3-3. Cronへの登録
例として、毎日深夜3時に自動実行するよう設定します。
crontab -e # 以下の行を追加 0 3 * * * /root/wp_backup.sh
4. 【実践】完全リストア(復元)の手順
バックアップ運用のゴールは「正常に復旧できること」です。
ここでは、OS(AlmaLinux 9)とミドルウェア(Apache, MariaDB, PHP)のみインストールされた真っ更な状態のサーバーへ、バックアップファイルからサイトを復元する手順を解説します。
前提条件と準備
バックアップファイル(例: 20260208_030000_full_backup.tar.gz)をサーバーの /root/ ディレクトリに配置してください。
4-1. バックアップの解凍
# 作業用ディレクトリで解凍 mkdir -p /root/restore_work tar -xzvf 20260208_030000_full_backup.tar.gz -C /root/restore_work # 中に入ってさらに解凍 cd /root/restore_work/20260208_030000/ # 以下のファイルがあることを確認 # db_dump.sql # wp_files.tar.gz # server_configs.tar.gz
4-2. データベースの復元
まず、WordPress用の空のデータベースとユーザーを作成します。
# MySQLにログイン mysql -u root # 以下SQLを実行 CREATE DATABASE wp_database CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT ALL PRIVILEGES ON wp_database.* TO 'wp_user'@'localhost'; FLUSH PRIVILEGES; EXIT;
データを流し込みます。
mysql -u wp_user -p'StrongPassword123' wp_database < db_dump.sql
4-3. コンテンツの復元と権限設定(重要)
ここがAlmaLinux 9での重要なポイントです。
ファイルの所有者(apache)と、SELinuxコンテキストを正しく設定しないと、Webサーバーがファイルを読み込めずエラーになります。
# 念のため既存のドキュメントルートを空にする rm -rf /var/www/html/* # ファイルの展開 tar -xzvf wp_files.tar.gz -C /var/www/html/ # 権限の修正 (AlmaLinuxではWebサーバー実行ユーザーは 'apache') chown -R apache:apache /var/www/html chmod -R 755 /var/www/html
4-4. SELinuxコンテキストの修復
tarで展開したファイルは、SELinuxのラベル情報が正しく付与されていない場合があります。
これを修復しないと、403 Forbidden エラーの原因となります。
# Webコンテンツとしての正しいラベルを再適用 restorecon -R -v /var/www/html
4-5. OS設定の復元と再起動
設定ファイルを上書きします(既存の設定と差異がないか注意してください)。
tar -xzvf server_configs.tar.gz cp -rf configs/httpd /etc/ cp -f configs/php.ini /etc/ # 設定反映のためサービス再起動 systemctl restart php-fpm httpd
これでリストアは完了です。Webブラウザからアクセスし、正常に表示されるか確認してください。
5. プロのノウハウ:トラブルシューティングと運用
現場でよく遭遇する問題とその対策について補足します。
5-1. リストア後に「データベース接続確立エラー」
wp-config.php内のパスワードと、復元先DBユーザーのパスワードが一致しているか確認してください。- SELinuxがDB接続をブロックしている可能性があります。以下のコマンドで許可設定を行います。
setsebool -P httpd_can_network_connect_db 1
5-2. 画像のアップロードができない
/var/www/html/wp-content/uploadsディレクトリの所有者がapache:apacheになっているか確認してください。- SELinuxコンテキストが
httpd_sys_rw_content_t(読み書き可能)になっているか確認してください。ls -Z /var/www/html/wp-content/uploads
5-3. 「3-2-1 ルール」の徹底
作成したバックアップファイル(tar.gz)を、同一サーバー内に置いておくだけでは不十分です。rclone 等のツールを使い、Amazon S3やGoogle Drive等の外部ストレージへ転送する処理をスクリプトの最後に追加することを強く推奨します。
まとめ:バックアップは運用の要
お疲れ様でした!
これであなたは、AlmaLinux 9環境において、特定のプラグインに依存せず、OSレベルでサイトを確実に保護し、復元する技術を習得しました。
今回の達成項目:
- WordPressの構成要素(ファイル、DB、Config)を理解した。
- AlmaLinux 9特有の権限(apacheユーザー)とSELinux対応(restorecon)を習得した。
- シェルスクリプトによる完全自動バックアップを実現した。
- 真っ更な環境への完全リストア手順をマスターした。
先生、SELinuxのrestoreconコマンド、知らなかったら絶対ハマってました!
「ファイルはあるのに403エラー」ってこれが原因だったんですね。
これでどんなトラブルが起きても、自信を持って復旧作業ができます!
素晴らしいわ、コウ君。
バックアップは「保険」ですが、自分でコントロールできる保険ほど頼りになるものはありません。
この技術は、WordPressに限らずあらゆるLinuxサーバー運用に応用できる普遍的なスキルです。
自信を持って、安全なサーバー運用を続けてくださいね!
▼ 安定したバックアップ運用には ▼
ディスク容量が豊富で安い
「おすすめVPS」
インフラエンジニアを目指す
「ITエンジニア転職」

コメント