ラズパイでNode-REDの”node-red-node-mysql”プラグインを使おうとしたところ、”ER_NOT_SUPPORTED_AUTH_MODE”というエラーが標示され、うまくフローとDBを接続することができませんでした。
検索すると、同じ症状の報告と解決方法が見つかりますが、うまくいきません。
Node.jsでMySQL 8.0へ接続しようとする時に発生するエラー – Qiita
曰く、
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
これをやろうとすると、ラズパイのmariaDBのコンソール画面では
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USER `root`@`localhost'`IDENTIFIED WITH mysql_native_password BY `root`' at line 1
このようにエラーがでてうまくいきません。
ALTER USER `root`@`localhost` IDENTIFIED VIA mysql_native_password;
このようにやってもだめでした。
ユーザー追加とplugin
いろいろ調べて、root以外のユーザーを追加してから、
MariaDB [mydb]> select host, user , password,plugin from mysql.user;
としたところ、
pluginのところにunix_socketが標示されました。
MariaDBとunix_socketで検索し下記のサイトを発見。
Authentication Plugin – Unix Socket – MariaDB Knowledge Base
unix_socketのプラグインをdisableすればよさそうなのですが、うまくいかず。
いるかのボックス: Raspberry PiにMariaDBをインストールする
結局、新しいユーザーを追加したら解決
結果的には、新しく追加したユーザー “user1″にDBの権限を与えたら、あっさり解決しました。
grant all on `mydb`.* to `user1`;
ただ、ここにいたるため、シングルクォーテーションとバッククオテーションを間違え、かなりの時間を費やしてしましました。
最終的な解決方法
結局は、
1.新しいユーザーをユーザーを追加
CREATE USER user1;
2.そのユーザーにDBに接続する権限を与える
grant all on `mydb`.* to `user1`;
ということで解決しました。