2014/08/03

WordPress を CentOS 6.5 から CentOS 7 に移行する


WordPress を CentOS 6.5 から CentOS 7 に移行してみます。

CentOS 7 から標準のデータベースが MySQL から MariaDB に変更になったこと、Systemd の採用など変更点が多く、移行は少々面倒だと思います。

具体的に、見ていきましょう。

WordPress のバックアップ

WordPress の BackWPup というプラグインをインストールして、WordPress をプラグインやデータを含めて丸ごとバックアップします。

バックアップ先は Dropbox などの外部サービスが望ましいですが、今回は作業の都合上、ローカルの以下の場所に tar.gz でバックアップを作成します(ローカルのパスまでは指定できない)。

/var/www/html/wp-content/uploads/backwpup-57d054-backups/backwpup_57d054_2014-03-09_03-52-37.tar.gz

CentOS 6.5 から CentOS 7 への移行

以下の記事を参考にして移行してください。

SELinux の無効化

CentOS 7 では SELinux がデフォルトで有効になっているので無効化します。

# vi /etc/sysconfig/selinux
SELINUX=disabled

# reboot

これを行っておかないと、後で /var/log/httpd/error_log で以下のエラーが発生してはまることになります。

[Sun Aug 03 10:50:39.938494 2014] [:error] [pid 2121] [client 192.168.11.7:62412] PHP Fatal error:  Unknown: Failed opening required '/var/www/html/index.php' (include_path='.:/usr/share/pear:/usr/share/php') in Unknown on line 0

 

Apache の設定

ブラウザで CentOS 7 のサーバーにアクセスしても、デフォルトの状態では Web ページは表示されません。

まずは、Apache を起動します。

#  systemctl start httpd.service
Job for httpd.service failed. See 'systemctl status httpd.service' and 'journalctl -xn' for details.

起動に失敗しました。メッセージに従ってステータスを確認します。

#  systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: failed (Result: exit-code) since 日 2014-08-03 06:17:45 JST; 1min 22s ago
  Process: 6825 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 6823 ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND (code=exited, status=1/FAILURE)
Main PID: 6823 (code=exited, status=1/FAILURE)

8月 03 06:17:45 localhost.localdomain httpd[6823]: httpd: Syntax error on l...
8月 03 06:17:45 localhost.localdomain systemd[1]: httpd.service: main proce...
8月 03 06:17:45 localhost.localdomain systemd[1]: Failed to start The Apach...
8月 03 06:17:45 localhost.localdomain systemd[1]: Unit httpd.service entere...
8月 03 06:18:23 localhost.localdomain systemd[1]: Unit httpd.service cannot...
Hint: Some lines were ellipsized, use -l to show in full.

どうも httpd 自体がダメな模様。仕方ないので、Apache を再インストールします。

# yum -y remove httpd
# yum -y install httpd

再度、Apache を起動します。

#  systemctl start httpd.service

今度はエラーが表示されずに済みました。

また、OS 起動時に Apache を起動するように設定します。

# systemctl enable httpd.service

ブラウザでアクセスしても問題なく表示することができました。

pic01

 

ついでに、mod_rewrite の設定もここで行っておきます。

/var/www/html ディレクトリの AllowOverride を All に設定し、Apache を再起動します。

# vi /etc/httpd/conf/httpd.conf
<Directory "/var/www/html">
   …
    AllowOverride All
   …
</Directory>

# systemctl restart httpd.service

PHP の設定

PHP がインストールされているか確認するために、以下のコマンドを実行します。

# php –v

なにやら警告が表示されました。

# php -v
PHP Warning:  PHP Startup: apc: Unable to initialize module
Module compiled with module API=20090626
PHP    compiled with module API=20100525
These options need to match
in Unknown on line 0
PHP 5.4.16 (cli) (built: Jun 10 2014 02:52:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

以下のコマンドを実行して、最新の apc を再インストールします。インストール時の問い合わせは全てデフォルトのままでかまいません。

# pecl uninstall apc
# pecl install apc

再度バージョンを確認すると、またエラーが表示されていまいます(出ない場合もある)。

# php -v
PHP Warning:  Module 'apc' already loaded in Unknown on line 0
PHP 5.4.16 (cli) (built: Jun 10 2014 02:52:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

これは、apc.so モジュールが、/etc/php.ini と /etc/php.d/apc.ini の両方で定義されているためです。ですので、php.ini の1行目にある extension="apc.so" をコメントアウトして保存します。

これでエラーが表示されなくなりました。

# php -v
PHP 5.4.16 (cli) (built: Jun 10 2014 02:52:47)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

ただし、コマンドラインの PHP はデフォルトでインストールされているのですが、このままでは Web サイトの PHP は実行されないので、PHP をインストールします。

# yum –y install php php-mysql
# systemctl restart httpd.service

動作確認をするための PHP ファイルを作成します。

# echo '<?php phpinfo() ?>' > /var/www/html/phpinfo.php

phpinfo.php にブラウザでアクセスし、以下のように phpinfo が表示されれば問題ありません。

pic02

 

MySQL の設定

CentOS 7 からは、MariaDB が標準のデータベースになってしまったため、MySQL はデフォルトではインストールされなくなりました。また、標準リポジトリにも存在しません。

まずは状況確認をします。MariaDB がインストールされていますね。

# yum list installed | grep maria
mariadb.x86_64                       1:5.5.37-1.el7_0               installed
mariadb-devel.x86_64                 1:5.5.37-1.el7_0               installed
mariadb-libs.x86_64                  1:5.5.37-1.el7_0               installed
mariadb-server.x86_64                1:5.5.37-1.el7_0               installed

MariaDB のパッケージをアンインストールします。

# yum -y remove maria*

続いて、MySQL をインストールします。

MySQL の公式リポジトリをインストールします。

# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

MySQL のパッケージをインストールします。

# yum -y install mysql mysql-devel mysql-server mysql-utilities

MySQL のサービスを起動します。

# systemctl start  mysqld.service

この時、反応がなくなり以下のエラーが表示されることがあります。

Job for mysqld.service failed. See 'systemctl status mysqld.service' and 'journalctl -xn' for details.

これがやっかいなエラーで、正直原因不明なのですが、MySQL と MariaDB のパッケージを全て削除し、/var/lib/mysql を削除した後に、MySQL を再インストールすることで解決します。もしかしたら、以下のコマンドを実行する必要があるかもしれません。

# mysql_install_db --user=mysql

あと、OS 起動時に MySQL が自動で起動するように下記コマンドを実行します。

# systemctl enable mysqld.service

WordPress の復元

一番最初に、以下の場所に WordPress のバックアップを行いました。これを復元します。

/var/www/html/wp-content/uploads/backwpup-57d054-backups/backwpup_57d054_2014-03-09_03-52-37.tar.gz

まずは、バックアップしたファイルを /tmp/backup ディレクトリに解凍します。

# cd /tmp
# mkdir backup
# cp /var/www/html/wp-content/uploads/backwpup-57d054-backups/backwpup_57d054_2014-03-09_03-52-37.tar.gz /tmp/backup
# cd backup
# tar xzvf backwpup_57d054_2014-03-09_03-52-37.tar.gz
# rm -f backwpup_57d054_2014-03-09_03-52-37.tar.gz

復元先のデータベースとユーザーを作成します。データベースの設定は、wp-config.php に記載されているので、それを元に設定を行います。

# mysql -u root –p
# Enter password:
mysql> grant all privileges on データベース名.* to ユーザー名@localhost identified by 'パスワード';
mysql> create database データベース名;
mysql> quit;

まずは、データーベースの内容を sql ファイルから復元します。soouce コマンドの引数には、SQL ファイルのパスを指定してください。

# mysql -u root –p
Enter password:
mysql> use データベース名;
mysql> source /tmp/backup/wordpress_db.sql;
mysql> quit;

コンテンツの内容を復元します。復元先と不要なファイルを削除してから復元しています。

#pwd
/tmp/backup
# rm –f *.txt *.sql *.json
# rm –rf /var/www/html/*
# cp –rfa * /var/www/html
# chmod –R 755 /var/www/html

ブラウザで Web サイトを表示します。

pic03

問題なく表示できてますね。

画面遷移も問題ありませんし、プラグインも問題なさそうです。

おわりに

WordPress を CentOS 6.5 から CentOS 7 に移行する方法をご紹介しましたが、いかがだったでしょうか。

記事だと簡単に感じますが、実際にはかなり試行錯誤をしました。

CentOS 6.5 と CentOS 7 は変更点が多く、移行には手を焼くと思いますが、この記事が参考になれば幸いです。

参考サイト


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。


    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから