mysql5.6レプリケーションでold_passwordが拒否される
こんにちは。小宮です。
同僚の湯尾さんから教えてもらった情報を貼っておきます。
【mysql5.6レプリケーション仕様が変わった話】
某環境で mysql5.5でフルdumpしたSQLを5.6に流し込む作業を行い、その後差分データを5.5→5.6にレプリケーションしようとしたところ レプリケーションが出来なかったという症状がありました。
その後、mysql5.6の設定見直しのためstop slave
してmysqlをrestartしレプリケーション貼り直しと試みましたが 今度は5.6環境同士でもレプリケーションが貼れなくなりました。
原因はmysql5.6からsecure_auth
の仕様が変更されたためクライアント([mysql]以下の記述)設定で skip-secure-auth
が設定されていても レプリケーションIOの時点でold_password
(16桁パスワード)が拒否されるためレプリケーション自体開始できないとのことです。 ステータス(show slave status\G
)では下記の様になります。
-------------------------------
・・・
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
・・・
Last_IO_Errno: 2049
Last_IO_Error: error connecting to master 'repl@172.17.xx.xx:3306' - retry-time: 60 retries: 1
Last_SQL_Errno: 0
Last_SQL_Error:
・・・
-------------------------------
解決策として、お客様の許可を得て、mysql5.5、5.6環境の両方に新たにセキュアなレプリケーション用アカウントを作成して、それでレプリケーション貼りました。 セキュア(old_password
ではない)なパスの作り方は下記の通り。
-------------------------------
set session old_passwords = 0;
GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'newrepuser'@'172.17.xxx.%' IDENTIFIED BY 'xxxxxxxxxxxxxx';
-------------------------------
mysql5.6にデータ移設したいなど相談を受けた場合は、パスワードの桁数にご注意下さい。という話です。
参考: 日々の覚書: MySQL5.6とMySQL5.0のレプリケーションでI/OスレッドがError: 2049 yoku0825さん情報のおかげ様で夜中に電話されなくてよかったです。ありがとうございます。
みていただいてありがとうございました。