何らかの理由で、サーバーへの単純な接続を確立できません。デフォルト設定を使用して、最新の MySQL Community 8.0 データベースを Node.JS とともにインストールしました。
これは私のnode.jsコードです
リーリーコマンド プロンプトで見つかったエラーは次のとおりです:
リーリー次のようなものを読みました。 https://dev.mysql.com/doc/refman/5.5/en/old-client.html https://github.com/mysqljs/mysql/issues/1507
しかし、問題を解決する方法がまだわかりません。
###まとめ###
を犠牲にしてバグを排除したいだけの場合は、- @Pras の回答 -- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password' 次に、権限を更新します
(- mysql
-
###どうしたの?
まずは何が起こったのかを解明する必要があります。これを修正したいが理由がわからない場合は、
mysql2の代わりに) をインストールして使用してください -
npm mysql2および
mysql = require('mysql2');。
あなたが好奇心旺盛で常に学びたがっている開発者であれば、読み続けてください... :)
MySQL 8 は、プラグ可能な認証方法をサポートしています。デフォルトでは、古い
mysql_native_password(
source) の代わりに、
ここで、問題は、Node の mysqljs (npm i mysql を使用してインストールし、Node コードで使用するパッケージ) が、MySQL 8 のこの新しいデフォルト認証をサポートしていないことです。メソッドはまだ利用できません。この問題はここにあります:
https://github.com/mysqljs/mysql/issues/1507caching_sha2_password
という名前のパスワードの 1 つが使用されます。どうやら、複数のハンドシェイクを使用する暗号化アルゴリズムは、##24 で使用される単純なパスワードの受け渡しよりも安全であるようです。年###!2019 年 7 月現在、3 年経った今でもオープンしています。
2019 年 6 月更新:
これを修正するための新しい PR が mysqljs a> にあります。2020 年 2 月更新: どうやら、mysqljs バージョン 3 で提供される予定のようです。 a>
2020 年 7 月の更新: どうやらまだ (少なくとも 2020 年 4 月の時点では) にはないようですが、 は
node-mysql2 と主張しています。 認証切り替えリクエストをサポートします。 node-mysql2 がこの問題を適切に解決する場合は、以下にコメントを残してください。 - 後ほど自分でテストします。 2021 年 4 月の更新: 問題はまだ存在しているようですが、わずか 3 日前に
認証切り替えを適切にサポートしているようです。誰かがフォークを作成して実装しました - ただし、mysql.js パッケージ内ではまだ公式ではありません。また、以下のコメントによると、
mysql2 パッケージ は正常に動作し、あなたの現在のオプション
オプション 1) [非推奨] 認証に古い「mysql_native_password」を使用するように「MySQL」をダウングレードする
これは、ここにいる誰もが提案していることです (上記の ベストアンサー のように)。
良いニュースは、生活がより簡単になり、mysql
にアクセスし、古いmysql_native_password
メソッドを使用してroot
を認証できることを示すクエリを実行するだけです。 リーリー何も質問することなく、Sequel Pro のような古き良きツールを引き続き使用できることです。しかし問題は、より安全なものを利用していないことです(そしてクールです、下記をお読みください)。 オプション 2) [まあ...] 「ノード」パッケージを MySQL Connecter X DevAPI に置き換えます
MySQLこれは、caching_sha2_password 認証をサポートする魅力のように機能します。 (#XX プロトコル通信 には必ずポート 33060 を使用してください。)
悪いのは、私たち全員が慣れ親しんで依存していた古い
利点は、アプリケーションの安全性が向上し、私たちの古き良き友人が提供していない大量の新機能を利用できることです。 XX DevAPI チュートリアル をチェックしてみると、便利な新しいセクシーな機能がたくさんあることがわかります。テクノロジーのアップグレードには必ず伴う学習曲線の代償を支払う必要があるだけです。 :)
PS.残念ながら、この XDevAPI パッケージには (TypeScript が理解できる) 型定義がまだないため、mysql
パッケージからあなたが離れてしまったことです。typescript
オプション 3) [推奨] 「mysql.js」を「mysql2.js」パッケージに置き換えますを使用すると問題が発生します。 dts-gen と dtsmake を使用して .d.ts を生成しようとしましたが、成功しませんでした。したがって、このことを念頭に置いてください。
前述したように、mysql パッケージ (NPM パッケージのリンク
) には まだこの問題が存在します (2021 年 4 月の時点)。しかし、mysql2 パッケージ (NPM パッケージのリンク) はそうではありません。したがって、おそらく次のことが簡単な答えになるはずです。
リーリーmysql2 は人気のある mysql のフォークですが、その人気 (mysql2 は 2020 年 4 月時点で週あたり 620,000 ダウンロードでした) であることに注意してください。元のパッケージ (2021 年 4 月の週あたり 72 万ダウンロード mysql
) に近いため、切り替えるのが合理的だと思われます。MYSQL Workbench で次のクエリを実行します
ユーザー 'root'@'localhost' を mysql_native_password BY 'password' で識別されるように変更します;
ここで
root
はユーザーですlocalhost
を URL として使用しますpassword
をパスワードとして使用します次に、次のクエリを実行して権限を更新します:
権限を更新;
これを実行した後、ノードを使用して接続してみます。
これが機能しない場合は、
@'localhost'
部分を使用しないようにしてください。