サーバー移行で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をコピーしました