はじめに
- 社内WordPressサイトを収めていたQNAPがハードウェア故障した
- WordPressコンテンツを別サーバに復元した時の手順と内容を記す
WordPressコンテンツのサルベージ
よく知られているように、次の2つのデータを新サーバに持っていく
- MySQL(MariaDB)のWordPressデータベースをバックアップ
- WordPressコンテンツファイルをバックアップ
sh
# 1.
mysql -u root -p WORDPRESS_DATEBASE > /tmp/wp-content.sql
# 2.
cd /var/www/html/wordpress/ && tar cvzf /tmp/wp-content.tar.gz wp-content/
新サーバにWordPressの環境構築
- 新サーバにログイン
- php、MySQL(MariaDB)、phpmyadmin、apache2
- WordPressのインストール
- WordPressコンテンツファイルをコピー
- WordPressデータベースの復元とWordPressのDB接続設定を編集
- WordPressサイトにアクセス
sh
# 0.旧サーバの名称はqnapとする
# 1.は省略
# 2.
wget https://ja.wordpress.org/latest-ja.tar.gz -O /tmp/latest.tar.gz
tar xvzf /tmp/latest.tar.gz
# 3.
scp USER@qnap:/tmp/wp-content.sql /tmp
scp USER@qnap:/tmp/wp-content.tar.gz /tmp
# もし、中間ファイルを作りたくない場合は
# cd /var/www/html/wordpress/
# ssh USER@qnap "cd /var/www/html/wordpress/ && tar cvzf - wp-content/" | tar xvzf -
# 旧サーバからなら
# cd /var/www/html/wordpress/
# tar cvzf - wp-content/ | ssh USER@新サーバ "cd /var/www/html/wordpress/ && tar xvzf -"
# 4.
sudo mysql -u root -p WORDPRESS_DATABASE < /tmp/wp_content.sql
cd /var/www/html/
sudo tar xvzf /tmp/wp-content.tar.gz
sudo cp -pr wp-config-example.php wp-config.php
sudo chown -R www-data:www-data .
sudo vi wp-config.php
# db接続設定を編集
define('DB_NAME', '${WORDPRESS_DATABASE}');
define('DB_USER', 'root');
define('DB_PASSWORD', '${PASSWORD}');
define('DB_HOST', 'localhost');
define('DB_CHARSET', 'utf8mb4_general_ci');
# 5.
# Webブラウザで新サーバへアクセス http://qnap/wordpress/index.php
#問題と対策
phpのエラー
挙動がおかしい時は、wp-config.phpのWP_DEBUGをfalseからtrueにすること。
旧URL参照でのリンク切れ
phpmyadminからWORDPRESS_DATEBASEデータベースのwp_optionsテーブルの次の項目を修正
- siteurl: http://新サーバ/wordpress
- home: http://新サーバ/wordpress
もし、データベース名で振り替えているなら新サーバでシンボリックリンクを貼っておく
- siteurl: http://新サーバ/WORDPRESS_DATABASE
- home: http://新サーバ/WORDPRESS_DATABASE
sh
cd /var/www/html/
sudo ln -s wordpress WORDPRESS_DATABASE
リンク切れ対策
これまでの手順では、index.htmlは表示されるけれども、個別記事の参照で404 Not Foundが出る可能性がある
その場合は、apacheの設定の問題なので追加設定。
sh
# 0.WordPressでパーマリンクの設定を保存しておくと、.htaccessが生成される
# 1. apacheにmod_rewriteを組み込む
e2enmod rewrite
AllowOverrideをNoneからAllに。
/etc/apache2/apache2.conf
<Directory /var/www/>
Options Indexes FollowSymLinks ExecCGI
AllowOverride All
Require all granted
</Directory>
sh
sudo apachectl restart