👀

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

2021/10/03に公開

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

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

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

sudo mysql

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

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

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

可能ならrootのパスワード変更ではなく、別の一般ユーザーを新規作成したほうが望ましい。


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

mysql -u root -p

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

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

インストール直後にmysqlを、権限のないユーザーから操作するとソケット(mysql.sockのような)が作成できないために発生する。

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

  • ソケットを手動で作成(まだ分かる)
  • my.cnfでソケットの作成場所変更(これもまだ分かる)
  • サービスを止めたりする(止めたことでソケットを作成できる権限を持ち合わせて無いので関係ない)
  • やたらskip-grant-tablesが出てくる(は?)

ご苦労なことだ。

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

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

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

またmy.cnfskip-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