サーバー移行で WordPressを丸ごと移行

はじめに

先日自宅サーバーを CentOS7 から CentOS8 に移行しました。
最初は WordPress の移行がうまく行くものか不安だったので、尻込みしていました。

でも私の場合はディレクトリ構造やデータベース構造を全く変えずに移行しますので、恐らく簡単な作業だけだろうと、思い切ってやってみることにしました。

環境は以下の通りです。

【移行前】
OS                 :CentOS7
WEBサーバー:Apache 2.4.6
PHP               :PHP7.3
DB                 :mariadb 10.3.17

【移行後】
OS                 :CentOS8.1
WEBサーバー:Apache 2.4.37
PHP               :PHP7.3
DB                 :mariadb 10.3.17

旧サーバーにおけるバックアップ

WordPressコンテンツのバックアップ

WordPressコンテンツについては、WordPressインストールディレクトリ (例として「/path-to-wordpress-data/wordpress」) を丸ごとバックアップすればオッケーです。なお、スーパーユーザーで実行しておけば、所有者情報やパーミッション情報も維持したままアーカイブ・圧縮されます。

# tar cvzf wordpress_back.tar.gz -C /path-to-wordpress-data wordpress

WordPressデータベースのバックアップ

mariadb のDB (例として DB名「wordpress」) もエクスポートします。

# mysqldump -u root -p -h localhost wordpress > wordpress_back.sql

新サーバーにおける事前作業

Apacheの設定

CentOS7 から CentOS8 に変更したことにより Apacheのバージョンは 2.4.6 から 2.4.37 に変わりましたが、WordPressを移行するに当たり留意することは特にありません。
新サーバーでも旧サーバーと同様の設定を行い、WEBサービスを稼働できる状態にします。

PHP の設定

CentOS7 の標準リポジトリでインストールされる PHPは PHP5系でしたが、私は PHP7.3 をインストールして利用していました。
ちなみに私が PHP7.4 を利用していなかったのは、単に ownCloud が2020年5月時点で PHP7.3 までしか対応していなかったからであり、WordPressのことだけ考えるのであれば PHP7.4 以降でも全然問題ありません。

そんな訳で私の場合は新サーバー (CentOS8.1) においても PHP7.3 をインストールすることにします。私の場合は下記のようなパッケージをインストールしました。

# dnf install epel-release
# dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# dnf module install php:remi-7.3
# dnf install php php-{devel,xmlrpc,gd,pdo,pecl-mcrypt,mysqlnd,pecl-mysql,pear,intl,pecl-zip}

php.ini の編集についても、CentOS7 の時と変わりありません。
私の場合は以下のように編集しました。

# cp /etc/php.ini /etc/php.ini.bak
# vi /etc/php.ini
max_execution_time = 180
memory_limit = 1G
post_max_size = 20G
upload_max_filesize = 20G
date.timezone = "Asia/Tokyo"
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none
# systemctl restart httpd

mariadb の設定

CentOS8 の標準リポジトリから mariadb をインストールすると旧バージョンがインストールされます。
私も一度旧バージョンをインストールしてしまったので、アンインストールしてから再び最新バージョンをインストールし直したのですが、そうするとなぜか初期セットアップのパスワード入力のところでエラーが発生してしまい、その先へ進めない状態になってしまいました。
単に dnf コマンドでアンインストールするだけでなく、関連ディレクトリも完全に削除することで問題は解決しました。

# systemctl stop mariadb
# systemctl disable mariadb
# dnf remove mariadb                  ← 旧バージョンをインストールしていた場合は一旦削除
# rmdir -fr /var/lib/mysql/           ← ディレクトリごと完全に削除

この上で最新バージョンをインストールします。

# curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
# dnf install --enablerepo=mariadb mariadb mariadb-server

初期セットアップを起動し、管理者パスワード等の設定を行います。

# systemctl start mariadb
# systemctl enable mariadb
# mysql_secure_installation        ← インストラクションに従いながら管理者パスワード等を設定

旧サーバーでバックアップした WordPress用DBを新サーバーに書き戻すためには、旧サーバーで使用していたユーザー名およびDB名を新サーバーにもあらかじめ追加しておきます。(例として、ユーザー名:wordpress、DB名:wordpress)

# mysql -u root -p
MariaDB [(none)] > CREATE USER wordpress@localhost IDENTIFIED BY "**********";
MariaDB [(none)] > CREATE DATABASE wordpress;
MariaDB [(none)] > GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost;
MariaDB [(none)] > quit

以上で、バックアップデータを書き戻すための準備作業は完了です。

新サーバーにおけるバックアップデータ書き戻し作業

WordPress コンテンツの書き戻し

旧サーバーでバックアップしておいた「wordpress_back.tar.gz」を新サーバーに書き戻します。旧サーバー上で所有者情報・パーミッション情報を維持したままアーカイブ・圧縮しましたので、単純に解凍するだけです。
私の場合は新サーバーにおけるWEBサーバーのドキュメントルートは旧サーバーと全く同じです。wordpress コンテンツも旧環境と同様にその直下に配置します。(例として「/path-to-document-root/wordpress」)

# cp wordpress_back.tar.gz /path-to-document-root/
# tar cvzf /path-to-document-root/wordpress_back.tar.gz

WordPress データベースの書き戻し

旧サーバーでバックアップしておいたmariadb のDB (ここではDB名:「wordpress」) を新サーバーに書き戻します。
既に述べた通り、あらかじめ旧サーバーで使用していたmariadbユーザー名とDB名と同じものを新サーバーのmariadbにも追加しておきます。
その上で以下のコマンドを実行します。

# mysql -u root -p -h localhost wordpress < wordpress_backup.sql

 動作確認

WordPressサイトにアクセスしてみると、すべてのページが問題なく表示されています。
複雑なデータベース構造をしているWordPressサイトですが、ディレクトリ構造などを全く変更しないようなサーバー移行であれば、特にDBを修正することなく、単純にデータをコピーするだけで大丈夫なんですね。

コメント

タイトルとURLをコピーしました