我目前的做法是在wsl2上安裝docker,並以container的形式啟動mariadb
但很奇怪的是,我其他的服務,如swagger,在windows這邊都能用localhost來連到(目前試都是用edge連線)
但唯獨mariadb,我在windows使用heidisql這個工具,一定要輸入wsl eth0的ip才能成功連線
我如果用localhost連線,一律都會拒絕連線access denied for user 'root'@'localhost' (using password: yes)
目前還沒試過其他種類的db,但不能用localhost來連線我感覺滿不方便的
沒什麼奇怪的,就是「它認為的 localhost 不是你認為的 localhost」而已。
要嘛,在 wsl 所看到的你的連線並不是來自 127.0.0.1,那當然就不會跟 localhost 相同。
要嘛,就是 mariadb 沒啟用 domane 解析 (求速度,預設不解析),那當然就直接判定 localhost == 127.0.0.1 。
也有可能是mariadb不允許你用root@localhost登入
你可以試著進mariadb的console,執行下面這指令看看
GRANT ALL PRIVILEGES on *.* to 'root'@'localhost' IDENTIFIED BY '<password>';
FLUSH PRIVILEGES;
之前自己架設MySQL也是有遇到相同的問題,
我用 docker exec -it [contianer-name] bash
,
進去裡面以後再登入MySQL然後輸入以下語法就可以了,
預設是只能在"localhost"
的ip位址下才被允許登入,
所以要給予連線的權限因此改用"%"
就可以了。
GRANT ALL PRIVILEGES on *.* to 'root'@'%' IDENTIFIED BY 'Password';
FLUSH PRIVILEGES;
希望有幫到你 =)
另外補充,
建議可以另外寫一個專門跟DB做連線的Script檔案,
這樣你在其他程式的開發上只要引用這個檔案就可以直接做連線,
應該也能稍稍解決你直接引用host = "localhost"
的困擾。