====== 15 MySQL 55 to 56 で問題 ======
===== 1.古いパスワードでログインできない =====
ERROR 1275 (HY000): Server is running in --secure-auth mode, but 'user'@'192.168.*.*' has a password in the old format; please change the password to the new format
MySQL 5.6 からセキュリティが強化されて、古いパスワードではログインできなくなりました。
下記のようにpluginがmysql_native_passwordで、passwordが41桁のハッシュ値になっている必要があります。
mysql> select host,user,password,Grant_priv,plugin from mysql.user;
+-----------+--------+-------------------------------------------+------------+-----------------------+
| host | user | password | Grant_priv | plugin |
+-----------+--------+-------------------------------------------+------------+-----------------------+
| localhost | root | *2C9D057C3D0DDAAE7A02148024E66BXXXXXXXXXX | Y | mysql_native_password |
| 127.0.0.1 | root | *2C9D057C3D0DDAAE7A02148024E66BXXXXXXXXXX | Y | mysql_native_password |
| ::1 | root | *2C9D057C3D0DDAAE7A02148024E66BXXXXXXXXXX | Y | mysql_native_password |
| localhost | xtrabk | *6D5E2ADA876346509B4082CA455175XXXXXXXXXX | N | mysql_native_password |
| localhost | zabbix | *0A42063D91348E9F69BF65D0A0AC6EXXXXXXXXXX | N | mysql_native_password |
+-----------+--------+-------------------------------------------+------------+-----------------------+
5 rows in set (0.00 sec)
===== 古いパスワードのままログインする場合 =====
Server側とClient側両方でsecure_authが無効になっている必要があります。
=== Server側 ===
/etc/my.cnf
[mysqld]
secure_auth=0
=== Client側 ===
# mysql --skip-secure-auth
===== 2.アップデートのチェックが変更 =====
SQLSTATE[HY000]: General error: 1364 Field 'hoge' doesn't have a default value
インサートやアップデート時チェックが厳しくなって、Defaultが設定されてないカラムにNULLを入れようとした時に出る。
==== 対応方法 ====
mysql> SHOW GLOBAL VARIABLES like 'sql_mode';
+---------------+--------------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------------+
| sql_mode | STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+---------------+--------------------------------------------+
1 row in set (0.03 sec)
mysql> SET GLOBAL sql_mode='NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT @@global.sql_mode;
+------------------------+
| @@global.sql_mode |
+------------------------+
| NO_ENGINE_SUBSTITUTION |
+------------------------+
1 row in set (0.00 sec)
=== /etc/my.cnf ===
再起動後も設定反映させるために、my.cnfも修正
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
↓
sql_mode=NO_ENGINE_SUBSTITUTION
{{tag>mysql}}