Ubuntu Server 18.04 LTS、NGINX 1.14、PHP 7.2.8、およびMySQL 8.0.12で構築された新しいLEMP Webサーバーをテストしています。これは公式のCanonical AMIを使用するAWS EC2インスタンスです。 WebとPHPデータベース接続を除いて、意図したとおりに機能します。しかし、他の(MySQL 5.7 PHP 7.1)ケース。
PDOが使用するのと同じ資格情報を使用して、ターミナルのサーバー(SSH経由のMySQL)で確実に接続できます。また、MySQL Workbenchと同じ資格情報を使用してリモートから確実に。サーバー上のファイアウォールはありません。ファイアウォールは、Amazonのセキュリティグループのみを経由します。ポート3306が広く開いている場合、PHPはまだPDOを使用して接続しません。MySQLiを使用したことはありませんが、この環境でPDOを介して接続する方法を決定して文書化することがこの目的の1つです。 。したがって、それは解決策にはなりません。
MySQL 8で変更されたパスワードセキュリティを理解しています(そして、インストール時に新しい強力なデフォルトパスワードを使用することを選択しました)。しかし、私は http://php.net/manual/en/ref.pdo-mysql.php からも印象を受けましたPHP 7.2.4、これはうまくいくはずですが、関連する段落で彼らが何を言おうとしているのか本当にわかりません...
これはまだ動作しないでしょうか?
EDIT:無関係であることが判明した設定とトラブルシューティング情報を削除しました。この質問のより簡潔で短い編集を期待することは、後でそれを見つける人にとってより有用です。
さらなる調査の結果、PHPは、caching_sha2_authenticationをまだサポートしていないため、mysqlをネイティブに戻す必要がありました。
注:アカウントを簡単に作成することはできませんWITH mysql_native_password
、ただしデフォルトをmysql_native_passwordに設定する必要があります。
編集:問題とは無関係であることが判明した情報をカットします。
リンクしたPHPドキュメントページのテキストは次のとおりです。
MySQL 8
7.1.16より前のPHPバージョン、または7.2.4より前のPHP 7.2を実行する場合は、MySQL 8サーバーのデフォルトのパスワードプラグインをmysql_native_passwordまたは、次のようなエラーが表示されますサーバーがクライアントに不明な認証方法を要求しました[caching_sha2_password]中古。
これは、MySQL 8がデフォルトで、古いPHP(mysqlnd)リリースで認識されないプラグインであるcache_sha2_passwordになっているためです。代わりに、my.cnfでdefault_authentication_plugin = mysql_native_passwordを設定して変更します。 caching_sha2_passwordプラグインは、将来のPHPリリースでサポートされる予定です。それまでの間、 mysql_xdevapi 拡張はそれをサポートします。
これは、PHPが現在cache_sha2_passwordをサポートしているという意味ではありません。ありません。つまり、PHPは、caching_sha2_passwordのサポートをアドバタイズするMySQL 8.0サーバーに接続するときに、致命的なエラーをスローしなくなりました。
必要に応じて名前付きPECL拡張機能をインストールできますが、これにはmysqlndとは異なるAPIがあるため、それはドロップイン置換ではなく、mysqlndのAPIを使用する既存のPHPコードでは機能しません。
現時点では、実際にcache_sha2_passwordによる認証をサポートするPHP mysqlndの新しいバージョンがリリースされるまでは、それを使用せず、ドキュメントに記載されているmysql_native_passwordに戻ることが唯一の選択肢です。