MySQLをバージョンアップ後、error: 2049で接続できない。
MySQL5.5から5.6にアップデートした後、mysqlcheckをしようとするとerror: 2049が発生した。
# mysqlcheck --check-upgrade --all-databases --auto-repair --verbose -p
mysqlcheck: Got error: 2049: Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled) when trying to connect
mysqlコマンドでも同じくerror: 2049が発生する。 どうやら、rootのパスワードの格納が古いハッシュで、secure_authが有効コンパイルされたクライアントからはアクセスできないようだ。 mysqlコマンドでも接続できないので、どうしよう。 ということで、
mysqlのrootのパスワードを再設定することにした。
# /etc/init.d/mysqld stop
# mysqld_safe --skip-grant-tables
CTRL+zでサスペンドしてbgでバックグラウンドへ。
# bg
# mysql -u root mysql
無事mysqlに接続できた! 今度はパスワードをリセットする。set password for…の構文は–skip-grant-tablesの場合は利用できないので、update文でmysql.userテーブルを更新する。
エラーになる。
set password for root@localhost=password('NewPassword');
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
こちらは成功する。
update user set password=PASSWORD('NewPassword') where user='root' and host='localhost';
これで、mysqld_safeを終了する。終了方法がわからないので…killしてみる…
killall -9 mysqld_safe
mysqldをスタートさせて、もう一度mysql、mysqlcheckをやってみるとうまく動いた。
/etc/init.d/mysqld start
# mysqlcheck --check-upgrade --all-databases --auto-repair --verbose -p
Enter password:
# Connecting to localhost...
db01.ms_commentmeta OK
db01.ms_comments OK
db01.ms_en_commentmeta OK
・
・
・
mysql.time_zone_transition_type OK
mysql.user OK
# Disconnecting from localhost...