MySQL 8 から認証方式がデフォルトで caching_sha2_password に変更されました。
これにより、caching_sha2_password 認証プラグインに対応していないクライアントは接続できません。(phpMyAdmin の最新版は接続できるはずです)
本番環境では推奨されませんが、root ユーザの認証方式を旧方式 mysql_native_password に変更する SQL を実行します。
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
mysql> set global validate_password.policy=LOW;
mysql> set global validate_password.length=4;
mysql> set global validate_password.mixed_case_count=0;
mysql> set global validate_password.number_count=0;
mysql> set global validate_password.special_char_count=0;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
root ユーザの認証プラグインが mysql_native_password に変更されました。
mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
| yoo | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
開発環境のため、パスワードの制約もゆるい設定に変更しましたが、本番では厳しめに設定しましょう。
MySQL サーバを停止します。
//CentOS
$ sudo mysql.server stop
//Ubuntu/Debian
$ sudo service mysql stop
セーフモードで起動します。
$ sudo mysqld_safe --skip-grant-tables &
MySQLのインストール方法によって、以下のエラーでセーフモードで起動しない場合があります。
mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists
mysqld フォルダがないのが原因を作成します。
$ sudo mkdir -p /var/run/mysqld
$ sudo chown mysql:mysql /var/run/mysqld
root でログインできるか確認してみましょう。
$ mysql -u root
またアプリの MySQL ユーザが root の場合は、設定も変更しておきましょう。
root でログインします。
$ mysql -u root
root ユーザーのパスワードを空に設定します。 もしパスワードを設定したい場合は、null の部分を文字列で入力してください。
mysql>
UPDATE user SET authentication_string=password('新しいパスワード') WHERE user='root';
MySQL からログアウトします。
mysql> exit
セーフモードのMySQL を終了し、MySQL を起動します。
//CentOS
$ sudo mysql.server restart
//Ubuntu
$ sudo service mysql restart
Docker や VirtualBox ではなく Mac に MySQL をインストールしてみます。
Homebrew を更新してから MySQL 最新版をインストールします。
$ brew update
$ brew install mysql
パスを設定します。
$ brew link mysql
postinstall します。
$ brew postinstall mysql
インストールが完了したら、バージョンを確認します。
$ mysql --version
mysql Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)
MySQL を起動します。
$ mysql.server start
Starting MySQL
SUCCESS!
MySQL の停止は以下のコマンドになります。
$ mysql.server stop
MySQL は管理者(root)のパスワードはデフォルトで設定されていません。
パスワードを変更したい場合は、root パスワードなど初期設定をします。
$ mysql_secure_installation
パスワード強度を設定する「VALIDATE PASSWORD」プラグインを利用する場合は「Y」を入力します。
Press y|Y for Yes, any other key for No:Y
パスワードの強度レベルを設定します。今回は開発なのでレベル「0」にしました。
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:0
パスワードを入力します。
New password:
Re-enter new password:
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.
その他の設問は「y」を入力します。
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :y
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
MySQL に管理者(root)でログインします。
$ mysql -uroot -p
$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.19 Homebrew
...
mysql>
mysql コマンドでデータベースを作成します。
mysql> create database sample;
mysql コマンドでデータベース一覧を確認します。
mysql> show database;
...
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel_auth |
| mysql |
| performance_schema |
| sample |
| sys |
+--------------------+
...
mysql をログアウトします。
mysql> quit
Mac で MySQL を自動起動するには、brew services を利用します。
$ brew services start mysql
Homebrew のサービス一覧を確認します。
$ brew services list
Name Status User Plist
mysql started yoo /Users/yoo/Library/LaunchAgents/homebrew.mxcl.mysql.plist
php stopped
php@7.3 stopped
postgresql started yoo /Users/yoo/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
MySQL の設定ファイル my.cnf のパスを検索します。
$ mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf
自分の場合は /usr/local/etc/my.cnf に作成されていました。
何年振りかに MySQL を設定するためメモ
$ brew update
$ brew install mysql
$ mysql --version
$ mysql Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)
$ mysql.server start
$ mysql -u root
$ show variables like 'version';
+---------------+--------+
| Variable_name | Value |
mysql> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
mysql> show grants;
mysql > create user `ユーザ名`@`localhost` IDENTIFIED BY 'パスワード'
MySQL5.7以上は PASSWORD 関数が使えません。
mysql > ALTER USER 'ユーザ名'@'localhost' identified BY 'パスワード'
mysql> -u ユーザ名 -p
mysql> show databases;
Mac の MySQL クライアントツールは、Oracle の「MySQL Workbench」を利用しました。
(Sequel Pro などのサードパティーはリリースが不安定なので)