EC2でPHP＋MySQL＋WordPressを試したら起きたトラブルまとめ

##はじめに
本記事は日経BPから出版されている参考書[「さわって学ぶクラウドインフラ AWS 基礎からのネットワーク＆サーバー構築（第２版）」](https://www.amazon.co.jp/Amazon-Web-Services-%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF-%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E6%A7%8B%E7%AF%89/dp/4822237443)を使って作業を進めたときに起こったトラブルについてまとめたものです。

記事執筆時点(2020/6/14)では第3版が出版されているようです。


## トラブルその１
####EC2インスタンスにMySQLをインストール、しかし起動後にMySQLに入れない

CHAPTER8-2で
`$ sudo yum -y install mysql-server`
を実行し、DBサーバーにMySQLをインストール。
（実はここでも微細なトラブルですが、元からあったmariaDBとバッティングしてしまいました。これはmariaDBをアンインストールしたら問題なし）
その後
`$ sudo service mysqld start`
で起動

ここまでは問題なし、しかしそこから先のmysqlコマンド、mysqladminコマンドなどが
`ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)`
と言われて何も実行できない。

#### 試したこと
`$ sudo cat /var/log/mysqld.log | grep root`
でrootの初期パスワードが見れるらしいので確認。しかし同じエラーを出されてしまう。

次にこちらを参考にしました
[https://blog.kuromusubi.com/develop/language/mysql/20180730-access-denied-root](https://blog.kuromusubi.com/develop/language/mysql/20180730-access-denied-root)

＜実践＞
まず
`$ sudo  mysqld_safe --skip-grant-tables &`
を実行。権限なしで立ち上げるオプションのようです。しかし
`-bash: mysqld_safe: コマンドが見つかりません`
と言われる。

どうやらインスタンスはLinux系のOSなので
>CentOS 7ではsystemdで管理されているため、mysqld_safeが使用できないようです。

これと同じ理由だと考えられます。

####解決手順

```
$ systemctl stop mysqld

$ systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

$ systemctl start mysqld

$ mysql -u root

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
    -> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

$ systemctl stop mysqld

$ systemctl unset-environment MYSQLD_OPTS

$ systemctl start mysqld
```

1. MySQLを停止した状態で`set-environment MYSQLD_OPTS="--skip-grant-tables"`を設定する。これが先ほどの権限なしで立ち上げるための設定のようです。
2. MySQLを起動し、無事に入れた！rootのパスワードを変更する。
3. **<重要>** `FLUSH PRIVILEGES;`を忘れずに実行
4. MySQLをもう一度停止し、先ほどの権限なしで立ち上げるオプションを解除
5. MySQLを起動


####筆者がハマったトラブル
この一連の操作がうまくできていないと次のwordpressのDBのセッティングで以下のコマンドを実行したとき
`mysql> grant all on wordpress.* to wordpress@"%" identified by 'wordpresspassword';`
以下のようなエラーがでます
`ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement`

確認のために
`mysql> select user(), current_user();`
をしてみると

```
mysql> select user(), current_user();
+--------+-----------------------------------+
| user() | current_user()                    |
+--------+-----------------------------------+
| root@  | skip-grants user@skip-grants host |
+--------+-----------------------------------+
1 row in set (0.00 sec)
```

先ほどのオプションがきちんと外れていません！

もう一度先ほどの手順をやり直してみたら解決しました！以下の結果になればOKです。

```
mysql> select user(), current_user();
+----------------+----------------+
| user()         | current_user() |
+----------------+----------------+
| root@localhost | root@localhost |
+----------------+----------------+
1 row in set (0.00 sec)
```

`flush privileges;`
↑のコマンドを実行した後にMySQLを再起動しないと反映されない仕様があるらしく、そこを知らずに最後の

```
$ systemctl stop mysqld
$ systemctl unset-environment MYSQLD_OPTS
$ systemctl start mysqld
```
をきちんと行えていなかった可能性があります。

##トラブルその２
####WordPressを問題なく入れたのに500エラー

参考書の手順に沿ってwebサーバーにPHPとWordPressを入れ、Apacheを再起動しても５００エラーでページが開けませんでした。

インスタンスの状態も問題ありませんでした。

調べたところ、webサーバー上で実行した
`wget http://ja.wordpress.org/latest-ja.tar.gz`
で最新版のWordPressを入れたのが問題だったようです。

webサーバーに入っていたphpのバージョンが5.4だったため、最新版のWordPressを動作できないようでした。
なので一度ワードプレスのデータをwebサーバーから消して、古いバージョンを入れてみました。
`wget https://wordpress.org/wordpress-5.0.7.tar.gz`
これでまた同じ手順でやり直したところ、無事にWordPressの管理画面にすすむことができました！


##トラブルその３
####そもそもWordPressを最新バージョンにできない問題は解決できていない

トラブルその２では一旦古いバージョンのWordPressを入れてとりあえず管理画面までは進めました
しかしphpのバージョンを上げないことにはWordPressのバージョンもあげることができません。

wordpressでは最低でもPHP5.6.2以上を要求されているので、
こちらの記事https://qiita.com/yamaguchi_takashi/items/d4b7b2693b42679dc3ae
などを参考にしながらバージョンアップを試みましたが、wordpressの管理画面が以下のようになり解決できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/293681/c92ba724-8f9a-5ba0-0f38-3080d9a84437.png)

こちらの解決策をご存知の方はコメントしていただけますと幸いです。