2020/08/16

caching_sha2_password のエラー

MySQL 8 から認証方式がデフォルトで caching_sha2_password に変更されました。

https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatible-connectors

これにより、caching_sha2_password 認証プラグインに対応していないクライアントは接続できません。(phpMyAdmin の最新版は接続できるはずです)

root ユーザの認証プラグインを変更する

本番環境では推奨されませんが、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 |
+------------------+-----------+-----------------------+

開発環境のため、パスワードの制約もゆるい設定に変更しましたが、本番では厳しめに設定しましょう。

  2020/08/14

MySQL をセーフモードで起動する

MySQL サーバを停止します。


//CentOS
$ sudo mysql.server stop
//Ubuntu/Debian
$ sudo service mysql stop

セーフモード起動

セーフモードで起動します。


$ sudo mysqld_safe --skip-grant-tables &

MySQLがセーフモードで起動しない場合

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

root でログイン確認する

セーフモードのMySQL を終了し、MySQL を起動します。


//CentOS
$ sudo mysql.server restart
//Ubuntu
$ sudo service mysql restart

  2020/08/09

Docker や VirtualBox ではなく Mac に MySQL をインストールしてみます。

Homebrew から 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 を起動します。


$ mysql.server start
Starting MySQL
 SUCCESS!

MySQL の停止は以下のコマンドになります。


$ mysql.server stop

MySQL 初期設定

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 に管理者(root)でログインします。

パスワードを設定している場合


$ mysql -uroot -p

パスワードを設定していない場合


$ mysql -uroot

MySQL にログインすると mysql コマンド入力モードになります。


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

MySQL の自動起動

Mac で MySQL を自動起動するには、brew services を利用します。


$ brew services start mysql

Homebrew サービスの一覧

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

設定ファイル my.cnf を確認する

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 に作成されていました。

  2020/03/03

何年振りかに MySQL を設定するためメモ

Homebrew でインストール


$ brew update
$ brew install mysql

MySQLバージョン確認


$ mysql --version

$ mysql  Ver 8.0.19 for osx10.14 on x86_64 (Homebrew)

MySQL 起動


$ mysql.server start

MySQL ログイン(root)


$ mysql -u root

MySQL 操作

MySQL バージョン


$ 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;

MySQL Workbench

Mac の MySQL クライアントツールは、Oracle の「MySQL Workbench」を利用しました。
(Sequel Pro などのサードパティーはリリースが不安定なので)

Oracle: MySQL Workbench

<< Top < Prev Next > Last >>