mysql 権限とか弄ってしまってログインできない時

接続できず落ち込む女性 プログラミング

タイトル通り。


hostを変更してしまったか、パスワードをいじってしまったか…わしはなんてことを…
めっちゃ焦る。



パスワード周りの変更もまとめて行う。
– Mysqlバージョンは5.7。
– dockerでテスト用Mysqlコンテナを動かしていた。
勉強がてらユーザー権限周り色々いじっていたら、いつものログインユーザー名とパスワードで

Access denied for user 'ユーザー名'@'ホスト名' (using password: YES)

のエラーが表示されるようになりそのままテスト中のアプリからも接続不可能になってしまった。  


そもそもルートユーザーのパスワードも忘れていた自分はパスワード無しでログインさせていただく必要があった。かたじけない。

まずdocker-compose.ymlファイル内Mysqlコンテナの記述部分にて

  mysql:
    build: ./mysql
    expose:
      - xxxx
    ports:
      - xxxx:xxxx
    volumes:
      - ./mysql/init:/docker-entrypoint-initdb.d
      - ./mysql/data:/var/lib/mysql
    environment:
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      TZ: ${DB_TZ}
    #以下のコマンドを渡す
    command: mysqld --skip-grant-tables --skip-networking

認証無しでログインできるようにコマンドを渡しておく。

$ docker-compose stop mysql
$ docker-compose up -d mysql

再起動して、

$ docker-compose exec mysql bash

Mysqlコンテナへ入ってパスワード無しでログイン。

mysql> mysql -u root

なぜログインできなくなったかわからないのでとりあえずユーザー情報の確認

mysql> SELECT user, host FROM mysql.user;
+---------------+-----------+
| user          | host      |
+---------------+-----------+
| user_name1    | localhost |
| root          | %         |
| mysql.session | localhost |
| mysql.sys     | localhost |
| root          | localhost |
+---------------+-----------+

自分が通信したいのは127.0.0.1からで、使いたいuser_name1のhostがlocalhostになっていたのでワイルドカードに変更。ここは、テスト環境以外とかちゃんとしたいならワイルドカードにしない。

UPDATE user SET host='%' WHERE User='user_name1';

localhostと127.0.0.1は、mysqlでは挙動が違う的なのを見たので。今の自分に必要なのはuser_name1@localhostではなくuser_name1@127.0.0.1ということになる。


念の為(ついでに)パスワードの変更もしておく。

mysql> UPDATE user SET authentication_string=PASSWORD('新しいパスワード') WHERE User='user_name1';

不要なユーザーなどもあれば、削除して

FLUSH PRIVILEGES;

で完了しておく。

docker-compose.ymlに追記したパスワード認証無視コマンドの削除を忘れずに

$ docker-compose down
$ docker-compose up -d

で立ち上げ直してログインできた。
うっかりさん()な自分への戒めとして残しておく。

タイトルとURLをコピーしました