LoginSignup
0
0

MySQLサーバーと接続できない問題

Last updated at Posted at 2024-06-14

MySQLのコネクションエラーについて

MySQLに接続しようとすると、なぜか以下のようなエラーが出現しました。

Can't Connect to MySQL Server on 'localhost:3306'

ただMySQLをインストールしてから特に何もいじっていないのに、起動しようとしたらこのようなエラーが出ます。

また、mysqldやmysqldlogなどをファイルから起動してmysqlを開いたり、そのエラーのログを見ようとしてもなぜかすぐ落ちてしまいます。
こうした原因は何なのか、いろいろウェブサイトやAIに聞いて調べてみましたが、なかなか答えとなるようなものが出ませんでした。

結局何が問題なのか

このエラーが現れている原因は何個か考えられます。
それを見ていきましょう。

1. MYSQLサーバーが実行されていない

最もシンプルな理由で、MySQLサーバーが開いていないことが理由となります。

2. FireWallが邪魔をしている

もし、あなたのPCでFireWallが3306ポートへの接続をブロックするように設定されているのなら、あなたのその接続は失敗します。

3. 接続の設定が間違っている

ポート先、ホストネームやIPアドレスが接続設定として間違っているかもしれません。

4. ネットワークの問題

単純にネットワークが悪いのかもしれません。

解決した

ただ単にmysqlと打っても

ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' (using password: NO)

こうしたエラーが出ていましたが、そうではなくて

mysql -u root -p

と入力することで、その後パスワードを求められ、そして正しいパスワードを無事入力することができ、MySQLサーバーと接続することができました。

更なる問題

このようにしてMySQLサーバーと接続することができましたが、node.jsでMySQLサーバーと接続しようとしても以下のようなエラーが出ます。

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

調べてみると、これはNode.jsがMySQLサーバーが要求する認証プロトコルをサポートしていないそうです。
MySQL8.0.4以降のログイン認証方式はcaching_sha2_password方式がデフォルトになっています。
しかし、nodeはそれをサポートしていないため、元のmysql_native_passwordに戻す必要があります。

そのためには以下のコマンドをSQLコマンドラインで入力する必要があります。

alter user 'root'@'localhost' identified with mysql_native_password by '新パスワード';

これを実行して
Query OK, 0 rows affected (0.05 sec)
と帰ってくれば成功です。
その後に
select user, plugin from mysql.user;
を実行すると

user plugin
mysql.infoschema caching_sha2_password
mysql.session caching_sha2_password
mysql.sys caching_sha2_password
root mysql_native_password

といったように、rootにmysql_native_passwordの認証方法が当たるようになったことが分かります。

これで無事にnodeからmysqlに接続することができます!

備忘録

ちなみにWindowsの人はMySQLでエラーが出た際に、my.iniファイルをいじる必要がでるかもしれませんが、my.iniファイルは初期ダウンロードの際にはProgramFileフォルダではなくて、ProgramDataフォルダの中に入っています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0