monga3日記

Java+SpringでWebシステムの構築をやっていきます。

Node.jsでMySQL 8.0へ接続しようとする時に発生するエラー

Node.jsでチャットツールを作成中にこんなことがありました。

事象

Node.jsでMySQL 8.0へ接続しようとする時に、以下のエラーでちょっとハマりました。 クライアントツールでは問題なくSQLを実行できるのに、Node.jsからはエラーが発生してしまいました。

ER_NOT_SUPPORTED_AUTH_MODE: Client does not support authentication protocol requested by server; consider upgrading MySQL client

環境

 OS: Windows 10 Home 64bit

 DB: MySQL Server 8.0 Community Edition

 node: v10.14.2

 npm: 6.4.1

 mysql: 2.16.0

原因・解決策

MySQL8.0でパスワードの認証形式が変更されているが、 Node.jsの「mysql」にはまだ実装されていないことが原因でした。

認証方法を「mysql_native_password」に変更することで、 この問題は解決できました。

以下のSQLを実行することで認証方法を変更することが出来ます。 ユーザー名とパスワードは各自の環境に置き換えてください。

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'

参考になったサイト stackoverflow.com

まとめ

エラーが発生した場合は、エラーの内容を良く読みましょう。 今回の場合は「ER_NOT_SUPPORTED_AUTH_MODE」と出力されているので、 大体の内容はわかると思います。

多少難しい英語の場合は翻訳サイトなどを使ってみるのも良いかもしれません。