👀

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 'あたらしいパスワート';

(可能ならrootのパスワード変更ではなく、別の一般ユーザーを新規作成したほうが望ましい)
同じエラーが出ていない事を確かめる為に、exitquitmysqlを終了させる。


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

mysql -u root -p

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

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

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

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

  • ソケットを手動で作成(まだ分かる)
  • my.cnfでソケットの作成場所変更(これもまだ分かる)
  • サービスを止めたりする(mysqldの方なので関係ない)
  • やたら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