##はじめに
本記事は日経BPから出版されている参考書「さわって学ぶクラウドインフラ AWS 基礎からのネットワーク&サーバー構築(第2版)」を使って作業を進めたときに起こったトラブルについてまとめたものです。
記事執筆時点(2020/6/14)では第3版が出版されているようです。
トラブルその1
####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
<実践>
まず
$ 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
- MySQLを停止した状態で
set-environment MYSQLD_OPTS="--skip-grant-tables"
を設定する。これが先ほどの権限なしで立ち上げるための設定のようです。 - MySQLを起動し、無事に入れた!rootのパスワードを変更する。
-
<重要>
FLUSH PRIVILEGES;
を忘れずに実行 - MySQLをもう一度停止し、先ほどの権限なしで立ち上げるオプションを解除
- 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
をきちんと行えていなかった可能性があります。
##トラブルその2
####WordPressを問題なく入れたのに500エラー
参考書の手順に沿ってwebサーバーにPHPとWordPressを入れ、Apacheを再起動しても500エラーでページが開けませんでした。
インスタンスの状態も問題ありませんでした。
調べたところ、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の管理画面にすすむことができました!
##トラブルその3
####そもそもWordPressを最新バージョンにできない問題は解決できていない
トラブルその2では一旦古いバージョンのWordPressを入れてとりあえず管理画面までは進めました
しかしphpのバージョンを上げないことにはWordPressのバージョンもあげることができません。
wordpressでは最低でもPHP5.6.2以上を要求されているので、
こちらの記事https://qiita.com/yamaguchi_takashi/items/d4b7b2693b42679dc3ae
などを参考にしながらバージョンアップを試みましたが、wordpressの管理画面が以下のようになり解決できません。
こちらの解決策をご存知の方はコメントしていただけますと幸いです。