とあるテストサーバで、MySQLでユーザにパスワードを設定しようとして、以下のようなコマンドを打ちました(MySQLは8ではありません)。
mysql> set password for 'USER'@'localhost' = PASSWORD('XXXXXXXXXX');
ERROR 1558 (HY000): Column count of mysql.user is wrong. Expected 43, found 39. Created with MySQL 50173, now running 50644. Please use mysql_upgrade to fix this error.
調べてみたところ、DBのアップグレードをして解決した、という記事がちらほら。
「そういえばこのサーバも一度アップデートしているんだっけ……」と、思い当たる節があったのでアップグレードを実行。
# mysql_upgrade -u root -p
Enter password:
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
mysql.columns_priv OK
mysql.db OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.host OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Running 'mysql_fix_privilege_tables'...
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
Running 'mysqlcheck with default connection arguments
Warning: Using a password on the command line interface can be insecure.
wptest1db.wp_commentmeta OK
## (略)
wptest1db.wp_users OK
OK
成功しました。
この状態で再度先ほどのコマンドを実行。
mysql> set password for 'USER'@'localhost' = PASSWORD('XXXXXXXXXX');
Query OK, 0 rows affected (0.00 sec)
成功、解決しました。