#環境
- M1 Mac macOS Big Sur 11.2.2
- MySQL 8.0.23 (Homebrew)
- PHP 7.3.24
#失敗した手順
最初にHomebrewでインストールした後は、
brew install mysql
####1. 権限を回避してMySQLの接続を行う
<エラー> ERROR 1045 (28000): Access denied for user 'root'@'localhost'
Qiita - MySQLインストール後、アクセス拒否 (Access denied for user ‘root’@’localhost’)
####2. 認証方式変更
<エラー> The server requested authentication method unknown to the client [caching_sha2_password]
Qiita - FuelPHPでのMySQL接続時にThe server requested authentication method unknown to the client [caching_sha2_password] となった場合に対処してみた
※ 変更を加えたファイルは → /usr/local/etc/my.cnf
####3. シャットダウン
<エラー> ERROR 1449 (HY000): The user specified as a definer ('mysql.infoschema'@'localhost') does not exist
2018/6/30【番外編】MySqlの基礎を学ぶ2、Error Code: 1449 The user specified as a definerのエラーを解決させる
結局1449のエラーが消えず、definerの定義やらViewなどが原因ではといった記事を閲覧しましたがテーブル自体一切作っていない段階だったので、全くここら辺は理解が足らず再度インストールすることに決めました。
#MySQLのアンインストール
こちらを参照
Mac MySQL 8.0 再インストールする
$ brew uninstall mysql
ファイルも削除
$ rm -rf /usr/local/Cellar/mysql*
$ rm -rf /usr/local/bin/mysql*
$ rm -rf /usr/local/var/mysql*
$ rm -rf /usr/local/etc/my.cnf
$ rm -rf /usr/local/share/mysql*
$ rm -rf /usr/local/opt/mysql*
プロセスも削除
$ ps
PID TTY TIME CMD
508 ttys000 0:00.55 -bash
76932 ttys001 0:01.19 -bash
98076 ttys001 0:00.04 /bin/sh /usr/local/opt/mysql@8.0/bin/mysqld_safe --skip-grant-tables
98176 ttys001 1:03.36 /usr/local/opt/mysql@8.0/bin/mysqld --basedir=/usr/local/opt/mysql@8.0 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@8.0/lib/plugin --skip-grant-tables --log-e
81032 ttys002 0:00.36 -bash
$ KILL 98076
$ KILL 98176
念の為Macを再起動しました。
#MySQLのインストール
再びこちらを参照
Mac MySQL 8.0 再インストールする
$ brew install mysql
$ mysql.server start
$ mysql_secure_installation
Securing the MySQL server deployment.
Connecting to MySQL using a blank password.
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: [空Enter]
Please set the password for root here.
New password: [rootユーザーのパスワードを入力]
Re-enter new password: [rootユーザーのパスワードを再度入力]
[残りは全て y でOK]
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
リンク先だとインストールの後に$ mysql_secure_installationを実行してますが、その場合下記のようなことになりました。上の順番のようにmysqlを起動(start)してから実行してください。
もしくは、リンク先の補足にあるように、古いプロセスをキルするかパソコンの再起動。
$ mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
Error: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
#rootユーザーでログイン
$ mysql -uroot -p
#データベース作成
> CREATE DATABASE sampleLaravel;
#ユーザー作成
> CREATE USER sample@'%' IDENTIFIED BY 'secret';
#ユーザーにデータベースを操作する権限を付与
> GRANT ALL PRIVILEGES on sampleLaravel.* to sample@'%';
grant all privileges
-> GRANT OPTION を除き、指定されたアクセスレベルにあるすべての権限を付与する。
on . to 'ユーザー名';
-> 特定のサーバー上のsampleLaravelのデータベースに適用される権限を割り当てる。
#ユーザー一覧
> SELECT Host, User, plugin FROM mysql.user;
+-----------+------------------+-----------------------+
| Host | User | plugin |
+-----------+------------------+-----------------------+
| % | sample | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | caching_sha2_password |
+-----------+------------------+-----------------------+
#ユーザー単位での認証方式の変更
> ALTER USER 'sample'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
#デフォルトの認証方式の変更
/etc/mysql/conf.d/my.conf あるいは /etc/my.cnf に下記を追加
どっちのファイルか分かり次第追記いたします
[mysqld]
# デフォルトの認証方式を変更(デフォルトは「caching_sha2_password 」)
default-authentication-plugin=mysql_native_password
#マイグレーション実行
// キャッシュをクリア
$ php artisan config:cache
$ php artisan migrate
Migration table created successfully.