MySQL 8 を Laravel試験(PHP)からアクセスしようと思って悩んだ話

表題ながっ!ともかくmacosにMySQLを普通に入れてLaravelからのアクセスに困った話をします!

困ったこと「1」!mysqlコマンドが見つかりません!;;

あい、普通インストールしたらpath通しますやん。それが通してくれない親切設計。自分で探しました。
するってーと、以下にbin一式ありました

/usr/local/mysql/bin/

mysqlコマンドは /usr/local/mysql/bin/mysql です。adminとか、好きに使ってください

とま、ここからは普通に…

DB作って、ユーザー作って、疎通OK!という感じですね。

今回はクライアントとしてlaravelのmigrationでも通過させます。
コンフィグは .env

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=example
DB_USERNAME=example
DB_PASSWORD=example

ま、そのまま実行すると

$ php artisan migrate:refresh

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'example'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = example and table_name = migrations and table_type = 'BASE TABLE')

MySQLサーバは上がっていますがDBが存在していませんの

次にDBを作ってあげます。

$ /usr/local/mysql/bin/mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.18 MySQL Community Server - GPL

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

mysql> create DATABASE example;
Query OK, 1 row affected (0.01 sec)

出来ました!
早速、試験を実施します

$ php artisan migrate:refresh

   Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access denied for user 'example'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = example and table_name = migrations and table_type = 'BASE TABLE')

もちろん繋がりませんw

次にユーザを作ってあげます

mysql> use example
Database changed
mysql> create user example identified by 'example';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on example.* to example@localhost;

とりあえずユーザを作成できました!
(GRANT部分がうごかなかって色々イジりましたが大体このくらい。

普通この状態で接続出来て終了!
という感じですが、実行すると…

$ php artisan migrate:refresh

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

ミタコトナイの来た〜!
なんだ?「authentication method unknown」?

調べると…
https://github.com/laradock/laradock/issues/1392
こいつに書いていますね。
5.6から認証が変わったよ。laravel 5.1からの認証は古いのだから一致しないのでドロップされます。
解決方法はコンフィグ(my.cnf)に以下を追加してやればOK

[mysqld]
default_authentication_plugin= mysql_native_password

簡単だろw

おれの超約ではこんな感じです!

んで、早速my.cnfを編集だ!
MacOSのはどこだ!!

き、記述がないだと!

今回二つ目の困ったこと「1」!「macosのMySQLのコンフィグが見つからない」
こいつはまだ分かりません!でも、うごくので放置しました!
調査したコマンドを書いておくと(覚え書き)

$ /usr/local/mysql/bin/mysql --help | grep "Default options" -A 1
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 

$ ls /etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
ls: ~/.my.cnf: No such file or directory
ls: /etc/my.cnf: No such file or directory
ls: /etc/mysql/my.cnf: No such file or directory
ls: /usr/local/mysql/etc/my.cnf: No such file or directory

$ sudo locate my.cnf
Password:

ま、ショウガナイので今の状態で設定を変えるという困ったことでした

今回二つ目の困ったこと「1」!「どう、ログインの方法を変えるのか?」

現状をチェック!世界の英知によりこの辺りは割愛します

mysql> select user,host,plugin from mysql.user where user = 'example';
+---------+------+-----------------------+
| user    | host | plugin                |
+---------+------+-----------------------+
| example | %    | caching_sha2_password |
+---------+------+-----------------------+
1 row in set (0.00 sec)

なんだと、mysql_native_passwordではないのかっ!
早速変更
https://dba.stackexchange.com/questions/209514/what-is-mysql-native-password

mysql> alter user example IDENTIFIED WITH mysql_native_password by 'example';
Query OK, 0 rows affected (0.01 sec)

mysql> select user,host,plugin from mysql.user where user = 'example';
+---------+------+-----------------------+
| user    | host | plugin                |
+---------+------+-----------------------+
| example | %    | mysql_native_password |
+---------+------+-----------------------+
1 row in set (0.00 sec)

次に試験を実行!

$ php artisan migrate:refresh
Rolling back: 2019_08_19_000000_create_failed_jobs_table
Rolled back:  2019_08_19_000000_create_failed_jobs_table (0.02 seconds)
Rolling back: 2014_10_12_100000_create_password_resets_table
Rolled back:  2014_10_12_100000_create_password_resets_table (0.01 seconds)
Rolling back: 2014_10_12_000000_create_users_table
Rolled back:  2014_10_12_000000_create_users_table (0.01 seconds)
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.04 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (0.02 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (0.01 seconds)

ねっ、簡単でしょ。
これでぐりぐり書きまくるぞ!