MySQL 8.0が正式リリースされたので、CentOS 7にインストールしてみました。その備忘録的なものです。
自分用の開発用インストールレシピをGithubにアップしていたりするのですが、いろいろ面倒なので、MySQL 5.6から強化されたパスワード関連の設定を最弱設定にしていたりします。(まぁ開発用なので別にいいかということで)
MySQL 5.7で更に強化されてしまったわけですが。
で、同じような設定をMySQL 8.0でも同じ設定をしてみたのですが、どうも反映されない。
どうも変数名自体が変わっていて、無駄な変数を設定しまったようです。
パスワード関連のmy.cnfの設定
MySQL 5.7まではこんな感じにしてました。(パスワード設定の部分だけ抜粋)
[mysqld]
validate-password=FORCE_PLUS_PERMANENT
validate_password_length=4
validate_password_mixed_case_count=0
validate_password_number_count=0
validate_password_policy=0
validate_password_special_char_count=0
MySQL 8.0では上記が下記のようになるようです。
[mysqld]
validate_password.length=4
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.policy=0
validate_password.special_char_count=0
変数の名前が変わっている。。。
これでちょっとハマりました。
実際どれ位の変数名が変わっているのか。
MySQL 8.0でテーブルキャッシュの実装がなくなったので、そのへんの変数は消えてるんだろうなとは思っていました。
気になって調べて見たんですが、量が多いので、ここへの記載は避けます。(途中で諦めました)
パスワードからの変更方法が変わってる?
MySQLサーバーをインストール後、rootユーザーのパスワードを変更するんですが、MySQL 5.7までは以下の構文で出来たはず。。。
SET PASSWORD FOR root@localhost=PASSWORD('password');
MySQL 8.0では上記構文が使えないようです。代わりにALTER USER構文を使います。ROLEの機能が入ったせい?
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
こぼれ話
MySQLのクリーンインストール。
変な手順でやったせいか、ALTER USER
するときにmysql.user
がないから無理とか怒られたので。一応以下でうまく行くっぽい。
systemctl stop mysqld
rm -rf /var/lib/mysql/*
yum remove mysql-server
yum intall mysql-server
systemctl start mysqld
systemctl enable mysqld
PHPからアクセスできない
プログラム書くのがめんどくさいんで詳しくは調べてないんですが、これを書いている時点でphpMyAdminからアクセスすることは出来ませんでした。
現象的には以下のページのような感じなんですが。
この辺が解決策かなと思ったんですが。
環境はNginx + PHP 7.2.5。
力尽きたので今回はここまで。
2019.05.08追記
どうもパスワード設定を旧設定にするためにプラグインを読み込まなければならないらしい。
[webmaster@dev01 db]$ cat /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8
skip-character-set-client-handshake
default_authentication_plugin = mysql_native_password # これが必要
validate_password.length=4
validate_password.mixed_case_count=0
validate_password.number_count=0
validate_password.policy=0
validate_password.special_char_count=0
[client]
default-character-set=utf8
で、MySQLにログインして、ALTER USERするときにプラグインを指定する。CREATE USERでも使えるオプションです。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
CREATE DATABASE `wordpress` CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
CREATE USER 'wordpress'@'%' IDENTIFIED WITH mysql_native_password BY 'wordpress';
GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpress'@'%';