web-dev-qa-db-ja.com

PHP 7.2.8 PDOがAWS EC2 LEMPスタックのMySQL 8.0.12(GA)に接続できない

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:無関係であることが判明した設定とトラブルシューティング情報を削除しました。この質問のより簡潔で短い編集を期待することは、後でそれを見つける人にとってより有用です。

4
HumanJHawkins

さらなる調査の結果、PHPは、caching_sha2_authenticationをまだサポートしていないため、mysqlをネイティブに戻す必要がありました。

注:アカウントを簡単に作成することはできませんWITH mysql_native_password、ただしデフォルトをmysql_native_passwordに設定する必要があります。

編集:問題とは無関係であることが判明した情報をカットします。

2
Gerard H. Pille

リンクした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に戻ることが唯一の選択肢です。

4
Michael Hampton

MySQL WorkbenchでMYsql8のデフォルトの認証方法を変更するには、次のようにします。

  1. 管理者としてMySQLワークベンチを開く
  2. 最初に、リンクされたスクリーンショットの横に1が強調表示されている[オプションファイル]画面に移動します。
  3. スクロールして認証方法を変更し、ドロップダウンの横に2をハイライト表示して、右下にある[適用]をクリックします。

MySQL8 workbench screenshot

0
mikeLundquist