MySQLでユーザにパスワードを設定しようとしたらエラー

とあるテストサーバで、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)

成功、解決しました。

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。