Mac+MariadbでAccess denied for user 'root'@'localhost'
現象
Mac(M1)にhome brewからmariadbをインストール。rootで接続しテーブルとユーザーを作成後、GRANTしようと思ったらAccess denied for user 'root'@'localhost' database ***
で権限付与できない。
mysql -u root mysql
CREATE USER 'profit-admin'@'localhost';
CREATE DATABASE IF NOT EXISTS `dev-profit` DEFAULT CHARACTER SET utf8;
GRANT ALL ON `dev-profit`.* to 'profit-admin'@'localhost';
Access denied for user 'root'@'localhost' database dev-profit
という感じです。
今まではrootが自動的に特権ユーザーになっていて、なんでも出来たんですが、バージョンの問題か、何か手順がもれたのか原因はいまいちはっきりしてません。
構成はこんな感じです。
- macOS 12.0.1
- Homebrew 3.3.9
- Server version: 10.6.4-MariaDB Homebrew
解決した手順
-
ps -ef | grep mariadb
で--datadir
を確認しておく。 -
brew services stop mariadb
でmariadbをストップ。 -
mysqld_safe --skip-grant-tables --datadir=/path/to/datadir
で権限無視モードで起動する。 -
sudo mysql -u root
で接続。sudo
は必要ないかも。 -
flush privileges;
を実行(必要ないかも)。 -
DROP USER 'root'@'localhost'
後ADD USER 'root'@'localhost'
で作り直す。これも必要ないかも。色々試したので一応リセットしてみた。 -
flush privileges;
を実行(必要ないかも)。 -
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION
を実行。ここのWITH GRANT OPTION
が重要だと思われる。 -
flush privileges;
を実行。 - ログアウト後
--skip-grant-tables
で起動したmariadbを止める。 -
brew services start mariadb
で自動起動をON.
解説(というか感想)
Access denied for user 'root'@'localhost'
で検索するといっぱい情報が出てくるけど、どれをやってもダメでイライラいました😝
多いのはmysqld_safe --skip-grant-tables
で起動してGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
で行けるという奴。
ところがmysqld_safe --skip-grant-tables
で起動するとuse mysql
すらできない。これはdatadir
の指定で見えるようになりました。
さらにGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
するとThe MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement
というエラーになってできませんでした。正直これを突破した原因はいまいちわかってないのですが、mysqld_safe --skip-grant-tables
で起動後にflush privileges
を実行したからか、sudo mysql -u root
で接続したからか、どっちかだと思います。
でGRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost'
が実行できたのですが、目的のテーブルにgrantしようと思ったら相変わらず下記のエラーが。
Access denied for user 'root'@'localhost' database dev-profit
最終的に以下のコマンドでできるようになりました。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
とWITH GRANT OPTION
をつけてやる必要があります。
こちらのサイトで情報見つけました。ありがたや。ありがたや。
Discussion