👀

MySQL|MariaDBインストール後の「Access denied for user 'root'@'localhost'」の件

2021/10/02に公開約1,700字

「Access denied for user 'root'@'localhost'」の件でやたら「skip-grant-tables」が出てくるので正しく対応します

MySQL|MariaDBのインストール後、初めてrootにログインを試みるも「Access denied for user 'root'@'localhost'」と表示される件を対処する。MySQLはもちろん、MariaDBでもやり方は同じです。

まずはmysqlsudoで昇格して、ログインする。この時オプションは不要[1]

sudo mysql

ログインできたら新しいパスワードを指定する[2]

ALTER USER 'root'@'localhost' IDENTIFIED BY 'あたらしいパスワート';

同じエラーが出ていない事を確かめる為に、exitquitでmysqlを終了させる。


次回からsudo使わず-u root-pオプションを付けてログインを試みる。

mysql -u root -p

パスワードが要求され、認証が通れば成功で鼻高だ!

なぜ初っぱなからAccess deniedが発生するのか?

一般ユーザーでクライアントを操作するとソケット(mysql.sockのような)を作るために必要な権限が無いために発生してる。

なので初回にクライアントをsudoで昇格してやればで秒で解消できる件なのにググると

  • サービスを止めたりしている(クライアントの方なので関係ない)
  • my.cnfでソケットの作成場所変更
  • ソケットを手動で作成
  • やたらskip-grant-tablesが出てくる

ご苦労なことだ。

マニュアルなんて読んでない

この問題への対処方は「MySQL :: MySQL 8.0 リファレンスマニュアル :: 6.2.21 MySQL への接続の問題のトラブルシューティング」にある。

検索すると各所で「skip-grant-tables」での対処方法が出てくる。
それでも解決できるだろうが、サーバー止めたりと、長ったらしく回りくどい。

またmy.cnfに「skip-grant-tables」を追記しておくやり方もあるが、戻しておく旨を書いてないのはどうなんだ。

と言うことで記事をしました。

結局「skip-grant-tables」 is 何?

長いので「MySQL :: MySQL 8.0 リファレンスマニュアル :: B.3.3.2 root のパスワードをリセットする方法」見てね。

  • 権限を無視してすべてのデータベースへの無制限アクセスを可能にする
  • リモート接続が無効化される
  • 主にrootパスワードの初期化の際に使うオプション
脚注
  1. -uオプションを指定しないと現在ログインしてるユーザー名でDBにログインを試みようとするため。 ↩︎

  2. SQL、ALTER USERについては「MySQL :: MySQL 8.0 リファレンスマニュアル :: 13.7.1.1 ALTER USER ステートメント」および「MySQL :: MySQL 8.0 リファレンスマニュアル :: 2.10.4 初期 MySQL アカウントの保護」を参照。 ↩︎

Discussion

ログインするとコメントできます