TypeORMを使ってていきなりエラーが出たので対処してみました
エラー
code: 'ER_NOT_SUPPORTED_AUTH_MODE',
errno: 1251,
sqlMessage:
'Client does not support authentication protocol requested by server; consider upgrading MySQL client',
対処方法
mysqlのuserを作るときに、パスワードをmysql_native_password
で設定する
ダメな例:
> CREATE USER 'foouser'@'localhost' IDENTIFIED BY 'foopassword';
okな例:
> CREATE USER 'foouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foopassword';
IDENTIFIED BY
ではなく IDENTIFIED WITH mysql_native_password BY
と書いて「mysql_native_password
を使うよ」と指定します
もしすでにCREATE USER
していた場合は、以下のクエリでuserの設定を変更します
> ALTER USER 'foouser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'foopassword';
> FLUSH PRIVILEGES;
を実行する
解説
デフォルトのパスワード設定だとなぜかダメで、mysql_native_password
っていうauth_pluginを使う必要があるようです
ログインは、デフォルトのパスワードを設定したユーザと同じように、
$ mysql -u foouser -p
Enter Password:
でできます
FLUSH PRIVILEGES
は、mysqlのサーバを再起動せずにユーザの設定を更新できる命令
この場合は、mysql_native_password
を追加したという更新を反映させるために実行する
エラーが直らない場合
-
ormconfig.json
の設定を確認する - mysqlの走ってるPORTを確認する
- DBが存在するか確認する i.e.
SHOW DATABASES;
を実行
参考
https://github.com/typeorm/typeorm/issues/2093
https://dev.mysql.com/doc/refman/8.0/en/create-user.html
https://linuxize.com/post/how-to-create-mysql-user-accounts-and-grant-privileges/