はじめに
先日自宅サーバーを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を修正することなく、単純にデータをコピーするだけで大丈夫なんですね。
コメント