LoginSignup
0
0

More than 3 years have passed since last update.

LaradockにMySQL8(latest)を入れるとエラーで落ちたので、その時の対処法

Posted at

多くの先人の方の知恵により解決しました。
今回はそのまとめのまとめみたいになります。
引用方法には気をつけておりますが、
間違いや抜けがありましたらご指摘いただければ修正いたします。
その他、「こうしたほうがいいよ」や「今はこうやってやるよ」、
MySQLのセキュリティノートまで追えてないのでセキュリティ面など、
コメントで追加していただけると幸いです。

やりたいこと

Laradockを取得後、workspaceコンテナからmysqlコンテナへ接続する

手順

かなりはぶきます。

1, Laradockのインストール

  • A.2) Don’t have a PHP project yet: からスタートし、2 まで実行

2, ローカルにLaravelを取ってくる

$ composer create-project --prefer-dist laravel/laravel blog

3, Laradock/.env の書き換え

### MYSQL #################################################

MYSQL_VERSION=8.0        <= 適宜変えてください。今回はバージョンを指定します
MYSQL_DATABASE=blog_db   <= お好きなDB名を
MYSQL_USER=administer    <= それっぽいユーザー名
MYSQL_PASSWORD=blog12345 <= 便宜上簡易的にしてます
MYSQL_PORT=3306          <= 他に使っていなければこのままで
MYSQL_ROOT_PASSWORD=root <= ここは便宜上にrootにしています。デフォルトでもOKかと
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

4, laradock/mysql/my.confに以下を追加

default_authentication_plugin= mysql_native_password

5, blog/.env の書き換え

DB_CONNECTION=mysql    <= PDOは勝手に入れてくれるのでこのように変更
DB_HOST=mysql          <= docker内部でリンク(? 的なものを作ってくれるようなのでこの名前で
DB_PORT=3306           <= 他に使っていなければこのままで
DB_DATABASE=blog_db    <= 3と合わせる
DB_USERNAME=administer <= 3と合わせる
DB_PASSWORD=blog12345  <= 3と合わせる

6, docker-compose up してひたすら待つ

$ docker-compose up -d workspace nginx redis mysql

最低限だけ入れてます

7, 終わったらworkspaceに入る

$ docker-compose exec workspace bash

8, blog/ 以下で php artisan migrate コマンドを実行

うまくいけばOK

ダメなら下へ

ちなみに私は下のようなエラーが出ました。

現象

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = coporeate and table_name = migrations and table_type = 'BASE TABLE')

  at /var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664
    660|         // If an exception occurs when attempting to run a query, we'll format the error
    661|         // message to include the bindings with SQL, which will make this exception a
    662|         // lot more helpful to the developer instead of just the database's errors.
    663|         catch (Exception $e) {
  > 664|             throw new QueryException(
    665|                 $query, $this->prepareBindings($bindings), $e
    666|             );
    667|         }
    668|

  Exception trace:

  1   PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
      /var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  2   PDO::__construct("mysql:host=mysql;port=3306;dbname=coporeate", "admin", "admin0401", [])
      /var/www/coporate/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70

  Please use the argument -v to see more details.

上のURLを参考に作業します。

9, 一旦、workspaceから抜けて、mysql コンテナへ

$ docker-compose exec mysql bash

10, mysqlへroot権限でログインして、ユーザー権限の付与とパスワード形式の変更、DBへのアクセス権を付与します.

$ mysql -u root -p 
$ password: root <= ここは3で指定したものを使います

mysql > ALTER USER administer IDENTIFIED WITH mysql_native_password;
mysql > ALTER USER 'administer'@'%' identified mysql_native_password BY 'blog12345';
mysql > GRANT ALL ON `blog_db`.* TO 'administer'@'%' ;
mysql > GRANT ALL ON `blog_db`.* TO 'administer'@'localhost' ;
mysql > FLUSH PRIVILEGES ;

11, mysqlのコンテナを抜けて、再度workspaceコンテナに入り、blog/ 以下でコマンドを実行

php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.05 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.04 seconds)

このような形でできればOK

所感

MySQL8.0.4からセキュリティを厳密にしましょうということで、caching_sha2_passwordをデフォルトにしているために発生したエラーです。 10番の内容をmysqlのdocker.ymlに記載したのですが、読み込んでくれなかったので、今回は直接変更しました。調べてみるとdokcer-compose up 時にMySQLの権限周りもやってくれそうな感じはしたので、試してみるつもりです。

以上となります。

何かの参考になれば幸いです。

0
0
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
0
0