タイトル通り。
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
で立ち上げ直してログインできた。
うっかりさん()な自分への戒めとして残しておく。