MySQL

MySQL ver5.7 Access denied


困ったこと

久しぶりにlinux触ろうとおもい、ターミナルからmysqlを開こうとおもいコマンドを打ち込んでみた。

mysql -u rootでログインできない。。。

ERROR 1045 (28000): Access denied for user 'root'@'localhost'

あれ。。

結構まえに設定したとおもってたのに。

ちょっと調べよーかな。


調べた内容

var5.7からちょっと変わったみたい。(チョー今更だけど、困るまでちゃんと調べたことなかった)

あと、久しくmysqlコマンドつかってなかったから練習も兼ねてコマンドを打ち込んでいく。

の前に、mysqlにログインしたいので、

一旦sudo をつけてログインする。

sudo mysql -u root

入れた。

まずコマンドの復習も兼ねて使ったことのある基礎コマンドから打ち込む。

show databeses;

あーそういえばこんなアプリ作ってたなって感じのデータベース一覧がみれる。

で、mysqlのデータベースをみたいので、選択する。

use mysql;

切り替えたら、テーブル一覧をみていく。

show tables;

ここまでは基本中の基本なんで困ることはない。

まあパスワードなんて設定したかなとおもって、passwordカラムの中身をみようとすると、

select host, user, password from mysql.user;

ERROR 1054 (42S22): Unknown column 'password' in 'field list'

ん?? 無いとかある? 的な、、、、、

確かめるために、userテーブルのカラムをみてみる。

describe user;

一覧が出て来るので、確認すると確かにない(驚)

代わりに、authentication_stringっていうカラムがあった。

あ、この辺かわったんだなーと思い、カラムに保存されている値をみてみる。

いや、何も保存されてないぞ。

じゃあなんでログインできないんだ?

どうも、 pluginカラムが問題としてあるみたいだった。

pluginカラムに何が保存されてるのか確認。

select host, user, plugin from mysql.user;

あ、なんかauth_socket ってのがある。

調べうるとこれが原因みたい。

これが何かっていうのは詳しくはわからなかったのですが、以下の記事を見てみると、

https://dzone.com/articles/change-user-password-in-mysql-57-with-plugin-auth

Debian/Ubuntu系は標準でrootユーザのパスワードを空白で設定しますが、その場合、auth_socket pluginを使用するみたいです。

なので、パスワードを設定していなくても設定している動きをします。

この記事では、そもそもパスワードの設定をしたい場合に、auth_socket pluginが邪魔をするので、それを回避する方法が書かれています。

しかし、今はパスワードはいらないので、auth_socket plugin自体を消していきます。

(パスワードの設定をしたいのに、できなくて困ってるなら上記の記事通りにすればできます)

update mysql.user set plugin = 'mysql_native_password';

これで、rootのpluginがauth_socketではなくなりました。

で、はじめに戻り、

mysql -u rootをしてみると無事mysqlにログインできました。(sudoがいらなくなった)