11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerのMySQL接続で「SQLSTATE[HY000] [1045] Access denied for user」が出たときの対処法

Posted at

今日は勉強中のDockerについて書いていこうかなと思います。

Dockerの開発環境については、以下の記事で書いているので開発環境を整えるときにぜひ使ってください。

Docker初心者がWindowsでgitSSH接続からdockerコマンドを打てるまでの流れ

まずDockerのコンテナ内でphp artisan migrateを打つと、以下のエラーが。。。

SQLSTATE[HY000] [1045] Access denied for user ‘root’@’196.172.0.2’ ~

MySQLのエラーは本当に厄介。

とりあえずこれはアクセス権がないとのことで、MySQLのコマンドにてDocker専用のアクセスできるユーザーを作成する。

アクセス権限があるユーザー、データベースの作成もとっくにやってるよという方は、こちらの番外編

#データベース、アクセス権を持つユーザーの準備#

###ユーザー作成###

mysql > create user create user 'docker'@'%' identified by '好きなパスワード(以下passwordと置く)';

###データベース作成###

mysql > create database test

#ユーザーにアクセス権付与#

今作成したユーザー(docker)にデータベースへのアクセス権を付与します。

###データベース選択###

使いたいデータベースを選択します。

mysql > use test

###アクセス権付与###

mysql > GRANT ALL PRIVILEGES ON データベース名(test).* TO ユーザー名@localhost IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql > FLUSH PRIVILEGES;

###アクセス権確認###

SELECT user, host, db FROM mysql.db;

+---------------+-----------+--------------------+
| user          | host      | db                 |
+---------------+-----------+--------------------+
| docker        | %         | test               |
| mysql.session | localhost | performance_schema |
| mysql.sys     | localhost | sys                |
+---------------+-----------+--------------------+

このような結果が出たらOKです。

ちゃんとtest(データベース)にdocker(ユーザー)のアクセス権が付いていますね。

#.env docker-composeファイルの編集#

laravel/.env
DB_CONNECTION=mysql
DB_HOST=db(自身の開発環境に合わせてdbかmysql)
DB_PORT=3306
DB_DATABASE=test
DB_USERNAME=docker
DB_PASSWORD=password
docker-compose.yml
FROM mysql:8.0

ENV MYSQL_DATABASE=test \
  MYSQL_USER=docker \
  MYSQL_PASSWORD=password \
  MYSQL_ROOT_PASSWORD=password \
  TZ=Asia/Tokyo

COPY ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf

#アプリの起動#

###アプリのダウン###

docker-compose down --volumes

###アプリのビルド###

docker-compose up -d
docker-compose exec app bash
root@eef5ce366e9e:/work# cd larabel(プロジェクト名)
root@eef5ce366e9e:/work#/laravel php artisan migrate

このようにしてマイグレーションを実行することができました!

MySQLのエラーって実は公式のドキュメントの方が分かりやすい場合もあるので、まずは公式ドキュメントを参照することをおススメします。

#番外編#

マイグレーションを実行できないのにはキャッシュが原因で行えない可能性もあるのでぜひキャッシュを消去して見て下さい。

docker-compose down --volumes

僕はこのコマンドを打つことでマイグレーションできました。

また、Laravelのプロジェクトに移動してartisanでキャッシュ消去も試してみてください。

docker-compose exec app bash
root@eef5ce366e9e:/work# cd larabel(プロジェクト名)
root@eef5ce366e9e:/work#/laravel php artisan chace:clear
root@eef5ce366e9e:/work#/laravel php artisan config:cache

以上、「DockerのMySQL接続で「SQLSTATE[HY000] [1045] Access denied for user」が出たときの対処法」でした!

良ければ、LGTM、コメントお願いします。

また、何か間違っていることがあればご指摘頂けると幸いです。

他にも初心者さん向けに記事を投稿しているので、時間があれば他の記事も見て下さい!!

Thank you for reading

11
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?