質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.58%

EC2+MySQLでのWordPress環境構築におけるデータベース接続確立エラー

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,275

shunk-py

score 12

 前提・実現したいこと

「Amazon Web Services 基礎からのネットワーク&サーバー構築」という書籍に沿って、
AWS上でWordPressの環境構築にトライしています。
書籍の通り、DBサーバーとWebサーバーのインスタンスは分かれており、DBサーバーはプライベートアドレスのみで、
今回WordPressをブラウザで開いて初期設定を行う段階でハマってしまったので、質問させていただきたく思います。

 発生している問題・エラーメッセージ

あらかたWebサーバー・DBサーバーのインスタンス作成・設定が済み、
Apatch + MySQL + PHP + WordPressのインストールまで完了して、いざブラウザからWordPressの初期設定(インストール)をしようとすると、
「データベース接続確立エラー」という画面に遷移してしまいます。

 試したこと

初期設定画面(setup-config.php)での「データベース名」、「ユーザー名」、「パスワード」、「ホスト名」に間違いはありません。「ホスト名」にはDBサーバーのプライベートIPアドレス「10.0.2.0」を割り当てています。因みにwp-config.phpファイルはまだ生成されていないようでした。

※追記:DBサーバーのプライベートアドレス「10.0.2.10」でした。。大変失礼致しました。。。

Webサーバーにssh接続して「mysql -h (ホスト名) -u (ユーザー名) -p (パスワード)」とすると問題なく接続ができます。
MySQLの権限設定の問題かと思い、データベース接続後にテーブル作成や削除等の操作をしてみましたが問題なく実行できました。

なにが原因かよくわからず、作業ができない状況になっています。
もし原因が特定できそうな方がいらっしゃいましたら、何卒お力添えをお願いしたく思います。

 補足情報(FW/ツールのバージョンなど)

OS: Amazon Linux 2 AMI (HVM)
Apache:2.4.34
MySQL: 8.0.12
PHP: 5.4.16 (Zend Engine v2.4.0)

不足情報等あればすぐに追記いたします。
何卒どうかよろしくお願い致します。

10/29追記
php -iで出てくる情報

/etc/php.d/mysqlnd.ini,
/etc/php.d/mysqlnd_mysql.ini,
/etc/php.d/mysqlnd_mysqli.ini,
/etc/php.d/pdo_mysqlnd.ini,
PHP Warning:  Unknown: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now, but please set date.timezone to select your timezone. in Unknown on line 0
mysql
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: ●●●● $
mysql.allow_local_infile => On => On
mysql.allow_persistent => On => On
mysql.connect_timeout => 60 => 60
mysql.default_host => no value => no value
mysql.default_password => no value => no value
mysql.default_port => no value => no value
mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
mysql.default_user => no value => no value
mysql.max_links => Unlimited => Unlimited
mysql.max_persistent => Unlimited => Unlimited
mysql.trace_mode => Off => Off
mysqli
Client API library version => mysqlnd 5.0.10 - 20111026 - $Id: ●●●● $
mysqli.allow_local_infile => On => On
mysqli.allow_persistent => On => On
mysqli.default_host => no value => no value
mysqli.default_port => 3306 => 3306
mysqli.default_pw => no value => no value
mysqli.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock
mysqli.default_user => no value => no value
mysqli.max_links => Unlimited => Unlimited
mysqli.max_persistent => Unlimited => Unlimited
mysqli.reconnect => Off => Off
mysqlnd
mysqlnd => enabled
Version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Loaded plugins => mysqlnd,example,debug_trace,auth_plugin_mysql_native_password,auth_plugin_mysql_clear_password
API Extensions => mysql,mysqli,pdo_mysql
mysqlnd statistics =>
PDO drivers => mysql, sqlite
pdo_mysql
Client API version => mysqlnd 5.0.10 - 20111026 - $Id: ●●●● $

/var/log/httpd/error_logの内容

[Sun Oct 28 03:11:02.081931 2018] [lbmethod_heartbeat:notice] [pid 11679] AH02282: No slotmem from mod_heartmonitor
[Sun Oct 28 03:11:02.082011 2018] [http2:warn] [pid 11679] AH10034: The mpm module (prefork.c) is not supported by mod_http2. The mpm determines how things are processed in your server. HTTP/2 has more demands in this regard and the currently selected mpm will just not do. This is an advisory warning. Your server will continue to work, but the HTTP/2 protocol will be inactive.
[Sun Oct 28 03:11:02.082017 2018] [http2:warn] [pid 11679] AH02951: mod_ssl does not seem to be enabled
[Sun Oct 28 03:11:02.094453 2018] [mpm_prefork:notice] [pid 11679] AH00163: Apache/2.4.34 () PHP/5.4.16 configured -- resuming normal operations
[Sun Oct 28 03:11:02.094465 2018] [core:notice] [pid 11679] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Sun Oct 28 18:17:00.142714 2018] [cgi:error] [pid 14709] [client 50.232.243.66:62110] AH02811: script not found or unable to stat: /var/www/cgi-bin/getinfo
pdo_mysql.default_socket => /var/lib/mysql/mysql.sock => /var/lib/mysql/mysql.sock


10/30追記
wp-content/debug.logの内容

[29-Oct-2018 16:42:02 UTC] PHP Warning:  mysqli_real_connect(): Server sent charset (255) unknown to the client. Please, report to the developers in /var/www/html/wp-includes/wp-db.php on line 1531
[29-Oct-2018 16:42:02 UTC] PHP Warning:  mysqli_real_connect(): (HY000/2054): Server sent charset unknown to the client. Please, report to the developers in /var/www/html/wp-includes/wp-db.php on line 1531
[29-Oct-2018 16:42:02 UTC] PHP Warning:  mysql_connect(): Server sent charset (255) unknown to the client. Please, report to the developers in /var/www/html/wp-includes/wp-db.php on line 1562
[29-Oct-2018 16:42:02 UTC] PHP Warning:  mysql_connect(): Server sent charset unknown to the client. Please, report to the developers in /var/www/html/wp-includes/wp-db.php on line 1562

my.cnfの内容

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

collation-server = utf8mb4_general_ci
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4

※参考サイト

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • shunk-py

    2018/10/29 22:11

    Sammo_Hung様、すみません、、見るところを間違えておりまして、「php -v」で出てくるPHPのversionは5.4.16でした。。v2.4.0というのはZend Engineのバージョンだったようです。至らぬところが多く申し訳ありません。質問の記載を修正いたしました。

    キャンセル

  • 退会済みユーザー

    退会済みユーザー

    2018/10/29 23:57

    遠回りかもしれんが例えばphpMyAdminを入れてブラウザでDBにアクセス可能か試してみてはいかがかね?PHPでDBにアクセス可能か問題の切り分けがしやすくなるかもね。

    キャンセル

  • shunk-py

    2018/10/30 01:50

    Sammo_Hung様、アドバイスありがとうございます!なんとかログを取得することに成功し、おそらくPHP実行の際の文字コードの問題であるというところまではわかりました。ただその後の設定がよくわからず。。掲載のmy.cnfのようにしましたが同じエラー(debug.log)が出てしまいました。

    キャンセル

回答 3

+3

該当ユーザの認証プラグインがcaching_sha2_passwordになっていないでしょうか

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session    | localhost | caching_sha2_password |
| mysql.sys        | localhost | caching_sha2_password |
| root             | localhost | mysql_native_password |
+------------------+-----------+-----------------------+


mysql8でデフォルトが caching_sha2_password になったらしいのですが、phpが対応していないため mysql_native_password でなければ認証失敗します。
※mysqlコマンドは対応しているので接続できてしまう。

CREATE USERのときにオプション指定するか

> CREATE USER ユーザ IDENTIFIED WITH mysql_native_password BY 'パスワード';


my.cnfを書き換えてください

[mysqld]
default_authentication_plugin=mysql_native_password

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/30 21:48

    yukky1201様、回答ありがとうございました!
    先ほど解決し、正にyukky様がダイレクトに正解でした。
    あともう一つ、DBサーバーではなくWebサーバー側のmy.cnfを編集していたようです・・・
    yukky1201様の回答が正解だったので本来なら本回答にベストアンサーを差し上げるべきですが、
    最初から丁寧に回答頂き、実践的なアドバイスも頂いたtanat様に譲らせて頂きました。
    皆様のおかげで大変助かりました。本当にありがとうございました!

    キャンセル

checkベストアンサー

+1

[追記]
以下の回答は直接解決二は結びつかなかったものなので、閲覧時には注意してください。


「Amazon Web Services 基礎からのネットワーク&サーバー構築」
で指示されている構築方法がわからないので確実なことは言えませんが
SSHでログインしてMySQLに接続できているという事は
PHPかwordpressのどちらかに設定ミスがある可能性が高いと思われます。

何らかのエラーログが
Apache(/var/log/httpd/error.logあたり)
wordpressのエラーログ(参考
に出力されている可能性が高いので、まずはエラーログを確認してみて下さい。


debug.logの内容から推測すると

collation-server = utf8mb4_general_ci
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4


collation-server = utf8_general_ci
character-set-server = utf8

[client]
default-character-set = utf8

とすると動く予感がします。
MySQLのバグっぽい?

参考
https://stackoverflow.com/questions/43437490/pdo-construct-server-sent-charset-255-unknown-to-the-client-please-rep

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/30 02:18 編集

    MySQL自体のバグというのは特定と対応が難しい部類なので、
    「難しすぎてめげそうです。」は仕方ないと思います。。

    書籍からはちょっと離れてしまいますが、多分一番簡単な方法としては
    MySQLをアンインストールしてMariaDBを入れなおすでしょうか。
    sudo yum remove mysql-server(みたいな感じでインストールした際に使用したパッケージ名を指定してください)

    sudo yum install mariadb-server mariadb-client
    とすればMariaDBがインストールされます。
    インストール出来たらMySQLと同様の手順(名前がMariaDBになっているのでその辺は適宜差し替えて)で起動すればPHPからはMySQLと概ね同様に扱えます。

    EC2にMySQLを入れるのはとりあえずやめにして、RDSを使うという手もあります。

    あとは、一旦今の環境は止めておいて、新しいインスタンスでAWSのチュートリアルにLAMP環境を入れてしまうのもありかなと。
    https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

    キャンセル

  • 2018/10/30 21:13 編集

    tanat様、先ほど作業を進めて、ようやく解決することができました!!
    原因は2つ、「DBサーバーではなくWebサーバー側のmy.cnfを設定していたこと(バカ)」
    「mysql8からパスワードの認証プラグインが"caching_sha2_password"になっていたため」でした。。

    DBサーバーからmysqlにrootで入って、以下コマンドを叩くことで解決しました。
    ```
    mysql> select user, host, plugin from mysql.user;
    +------------------+-----------+-----------------------+
    | user | host | plugin |
    +------------------+-----------+-----------------------+
    | wordpress | % | caching_sha2_password |
    | mysql.infoschema | localhost | caching_sha2_password |
    | mysql.session | localhost | caching_sha2_password |
    | mysql.sys | localhost | caching_sha2_password |
    | root | localhost | caching_sha2_password |
    +------------------+-----------+-----------------------+
    5 rows in set (0.00 sec)

    mysql> alter user 'wordpress'@'%' identified with mysql_native_password by 'password';
    Query OK, 0 rows affected (0.09 sec)

    mysql> select user, host, plugin from mysql.user;
    +------------------+-----------+-----------------------+
    | user | host | plugin |
    +------------------+-----------+-----------------------+
    | wordpress | % | mysql_native_password |
    | mysql.infoschema | localhost | caching_sha2_password |
    | mysql.session | localhost | caching_sha2_password |
    | mysql.sys | localhost | caching_sha2_password |
    | root | localhost | caching_sha2_password |
    +------------------+-----------+-----------------------+
    5 rows in set (0.00 sec)
    ```
    ダイレクトな正解だったのはyukky1201様でしたが、
    本業の昼休みにmysql8について調べて自己解決できたこと、
    最初から何度も丁寧に面倒見てくださり、実践的なアドバイスも頂いたことからtanat様をベストアンサーにさせていただきたいと思います。
    (初心者故、これが問題ある行為でしたら申し訳ありません。。ご指摘ください)

    書籍に各ソフトのバージョンを合わせなかったのが事の元凶でしたが、
    今回壁にあたって色々調べたりするうち、Linuxの操作に慣れたりやwebやデータベースの知識が少しついたような気がします。
    また、質問させていただくことで、情報不足の中こんなに丁寧に回答してくださる方が複数いることに感動しました。。
    より勉強して、今度は自分が貢献しようと勉強の励みになります。

    今回は本当にありがとうございました。

    キャンセル

  • 2018/10/30 22:58

    解決してよかったです。
    該当の書籍はAmazonでも評判がい良いようですし、同様の問題を持つ人の助けになると嬉しいですね。
    (ukky1201さんの回答が先頭に表示されているので良かったです)

    キャンセル

0

my.cnfを元に戻してwp-config.phpのdefine('DB_CHARSET', 'utf8');define('DB_CHARSET', 'utf8mb4');にすればどうかね?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/30 21:43

    Sammo様、先ほど解決することができました!
    原因はmysqlサイドのパスワードの認証プラグインでした。
    回答頂いてありがとうございました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.58%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る