この記事ではレンタルサーバーを借りて自分でPHPやMySQLをアップグレードできる人向けのものです。
レンタルサーバーによってはバージョンアップしてくれるプランを選んでいる場合もあるので調べてみて下さい。
少し前から気付いていましたがWordPressのバージョンを更新できなくなってました。どうやら古いPHPやMySQLのサポート終了が終了し始めていたようです。
2019年4月からWordPressのphpバージョンは5.6以上が必要になるよ!
バージョンアップが面倒でしばらく放置していましたがプラグインも動かなくなってきたので重い腰を上げることにしました。
そして予想通り大変でした。あらかじめ手順をメモしてやりましたがその通り動かなければ当然調べまくる羽目になって。。
動くところまで行きつけたのでログを残しておきます。
この記事は以下のような流れで書きます。
- 推奨環境の確認
- 自分の環境のバージョンの確認
- WordPressをできるだけ最新にしておく
- バックアップ
- PHPのアップグレード
- MySQLのアップグレード
推奨環境の確認
WordPress要件
どうやら以下のバージョンが良いらしい。
- PHP バージョン 7.3 以上。
- MySQL バージョン 5.6 以上、または MariaDB バージョン 10.1 以上。
- HTTPS 対応
自分の環境のバージョンの確認
>php --version PHP 5.3.3 (cli) (built: Aug 6 2014 05:54:27) >mysql --version mysql Ver 14.14 Distrib 5.1.73, for redhat-linux-gnu (x86_64) using readline 5.1
古!(これは何か起こる確率が上がった・・)
WordPressをできるだけ最新にしておく
- 更新できるものを更新
- 動作確認
- PHP Compatibility Checker
更新できるものはしておいて動作確認しておきましょう。もともとおかしくなってしまうのか、バージョンアップによっておかしくなるのか、問題の切り分けができます。あと「PHP Compatibility Checker」というプラグインも入れておいてチェックしておきましょう。
バックアップ
WordPressとMySQLのバックアップを取っておきます。
最悪これを元にして元に戻します。
# WordPressのバックアップ tar -zcvf 20190526_wordpress.tar.gz /var/www/html/wordpress (解凍する場合:tar -zxvf 20190526_wordpress.tar.gz) # MySQLバックアップ >mysqldump -u root -p -A > /tmp/20190526_mysql_dump.sql (リストアする場合:mysql -u root -p < /tmp/20190526_mysql_dump.sql)
php.iniやmy.cnfもバックアップを取っておきましょう。
特殊な設定がある場合は設定し直す必要があります。
PHPのアップグレード
参考:CentOS7のPHPを5.6/7.0/7.1/7.2/7.3系にバージョンアップする
すんなりいけば簡単ですがかなりはまりました・・
現在入っているものを確認(うまくいかなかった場合これを元に入れなおします。)
>yum list installed | grep php php.x86_64 5.3.3-27.el6_5.1 @updates php-cli.x86_64 5.3.3-27.el6_5.1 @updates php-common.x86_64 5.3.3-27.el6_5.1 @updates php-gd.x86_64 5.3.3-27.el6_5.1 @updates php-mbstring.x86_64 5.3.3-27.el6_5.1 @updates php-mysql.x86_64 5.3.3-27.el6_5.1 @updates php-pdo.x86_64 5.3.3-27.el6_5.1 @updates php53-mcrypt.x86_64 5.3.3-1.el5 @epel phpMyAdmin.noarch 2.11.11.3-2.el5 @epel
準備:リポジトリの追加
>yum install epel-release >rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
念のため欲しいバージョンが存在するかチェック
>yum search --disablerepo=* --enablerepo=remi,remi-php73 php73
ここから先は現在動いているものに影響を与えるので注意してください!
PHP関連を削除
>yum remove php-*
念のため消し残しがないか確認
>yum list installed | grep php
・インストール
>yum install --disablerepo=* --enablerepo=epel,remi,remi-php73 php73 php73-php
しかし私の環境では失敗してしまいました・・
いろいろ調べた結果以下のようにすればインストールできました。
>sudo yum whatprovides libtcl8.5.so >sudo yum -y install tcl >yum provides /usr/sbin/semanage >sudo yum -y install policycoreutils-python >yum install --disablerepo=* --enablerepo=epel,remi,remi-php73 php73 php73-php
※最初php73-phpを入れずにいたのですがApacheを再起動したらPHPが動かなくなっていました。
どうやらlibphp7.soが入らず動かなかったようです。
いろいろ調べた結果、php73-phpもインストールすることでlibphp7.soも作成され正常に動くようになりました。
参考:CentOS7にPHP7.2.xをインストールする
この時点ではまだ動かず。。
どうやらPHP73をインストールしただけでは動かずパスが通っていなかったようです。
/etc/profileに追加
export PATH=/opt/remi/php73/root/usr/bin:/opt/remi/php73/root/usr/sbin${PATH:+:${PATH}} export LD_LIBRARY_PATH=/opt/remi/php73/root/usr/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export MANPATH=/opt/remi/php73/root/usr/share/man:${MANPATH}
もしかするとこの時点で再ログインが必要になるかもしれないです。
ちゃんとPHPが適用されたか確認
>php --version PHP 7.3.5 (cli) (built: May 1 2019 07:59:34) ( NTS )
他のやつもインストール
>yum install --disablerepo=* --enablerepo=epel,remi,remi-php73 php73-php-gd php73-php-mbstring php73-php-mysql php73-php-pdo php73-php-mcrypt
Apacheを再起動します。
service httpd restart
これでPHPのアップグレードができました。
これでWordPressが動くはずです。確かめてください。
MySQLのアップグレード
参考:MySQL5.1から5.7にバージョンアップさせるための手順
現在入っているものを確認
>yum list installed | grep mysql mysql.x86_64 5.1.73-3.el6_5 @updates mysql-devel.x86_64 5.1.73-3.el6_5 @updates mysql-libs.x86_64 5.1.73-3.el6_5 @updates mysql-server.x86_64 5.1.73-3.el6_5 @updates
リポジトリの追加
>yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
でも失敗。。なんとかして入れる。
>wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm >rpm -Uvh mysql-community-release-el6-5.noarch.rpm
yum-config-managerを使えるようにする
>yum -y install yum-utils
今入っているものを削除
>yum remove mysql*
インストール
>service mysqld stop >yum-config-manager --disable mysql55-community >yum-config-manager --enable mysql57-community-dmr >yum install mysql mysql-devel mysql-server mysql-utilities >service mysqld start
が失敗。
まあ前のmysqlのディレクトリがそのまま残っているのだからそれもそうかということで
mv mysql mysql_backup
として0からmysqlを設定し直してバックアップを適用することにしました。
service mysqld start sudo cat /var/log/mysqld.log | grep password mysql_secure_installation
rootのパスワードポリシーが厳しくて辛い・・。
参考:CentOS 7 に MySQL 5.7 を yum インストールして初期設定までやってみた
MySQLの初期設定など参考になります。ありがとうございます!
これでとりあえずmysqldを起動できた。。
MySQLリストア
>mysql -u root -p < /tmp/20190526_mysql_dump.sql
しばし待つ。
これでWordPressにアクセスしてみたら「データベース接続確立エラー」。
パスワードを設定し直さないとだめなのかな、と思ってパスワードを再設定してみると
mysql>SET PASSWORD FOR wp_user@"localhost"=password('xxxxxxxxxxxxxxx'); ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 39. The table is probably corrupted
なるほど、テーブルの構造が変わったのね。まあそうだよねってことでちょっと調べると以下で良いらしい。
>mysql_upgrade -u root -p
なんか通ったらしいのでもう一度WordPressにアクセス。
動いた。。
これで一通りインストール完了です。
おまけ
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
こんなエラーも出たんだけど以下を参考に
参考:CentOS6.xでEPELリポジトリ入れたときのエラー対処
sudo sed -i "s/mirrorlist=https/mirrorlist=http/" /etc/yum.repos.d/epel.repo
とすることで動きました。