mysql56> show slave status\G *************************** 1. row *************************** Slave_IO_State: Connecting to master Master_Host: localhost Master_User: replicator Master_Port: 64050 Connect_Retry: 60 Master_Log_File: bin.000019 Read_Master_Log_Pos: 820 Relay_Log_File: relay.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: bin.000019 Slave_IO_Running: Connecting Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 820 Relay_Log_Space: 120 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 2049 Last_IO_Error: error connecting to master 'replicator@localhost:64050' - retry-time: 60 retries: 1 Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1050 Master_UUID: Master_Info_File: /usr/mysql/5.6.11/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: 130501 13:24:13 Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)
エラる。
$ perror 2049 Illegal error code: 2049
あれ、perrorが2049レポートしてくれない(´・ω・`)
マニュアルには記載ある。
http://dev.mysql.com/doc/refman/5.6/en/error-messages-client.html#error_cr_secure_auth
クライアントオプションのsecure_authが有効だから、
サーバーに格納されてるユーザーのパスワードが古い16桁形式だと接続できない。
というか、クライアントが接続を拒否する。
取り敢えずマスター側のサーバーで
mysql50> SET SESSION old_passwords = 0; Query OK, 0 rows affected (0.00 sec) mysql50> SET PASSWORD FOR replicator = PASSWORD('replicator'); Query OK, 0 rows affected (0.00 sec) mysql50> SELECT user, host, password FROM mysql.user; +--------------+-----------------+-------------------------------------------+ | user | host | password | +--------------+-----------------+-------------------------------------------+ | root | localhost | | | root | dev-personal-04 | | | root | 127.0.0.1 | | | mysqld_multi | localhost | *25538D365EF36670224773C86161F9D7EEAC49F9 | | replicator | % | *E6FA4B5E283079702D46597DFCD2766E7BF96B0E | +--------------+-----------------+-------------------------------------------+ 5 rows in set (0.00 sec)
これで接続できる。
いきなり上書きがアレなら、
mysql50> set session old_passwords = 0; Query OK, 0 rows affected (0.00 sec) mysql50> GRANT REPLICATION SLAVE ON *.* TO replicator56 IDENTIFIED BY 'replicator'; Query OK, 0 rows affected (0.00 sec) mysql50> SELECT user, host, password FROM mysql.user; +--------------+-----------------+-------------------------------------------+ | user | host | password | +--------------+-----------------+-------------------------------------------+ | root | localhost | | | root | dev-personal-04 | | | root | 127.0.0.1 | | | replicator56 | % | *E6FA4B5E283079702D46597DFCD2766E7BF96B0E | | mysqld_multi | localhost | *25538D365EF36670224773C86161F9D7EEAC49F9 | | replicator | % | 755c4ac71c32381e | +--------------+-----------------+-------------------------------------------+ 6 rows in set (0.00 sec)
5.6接続用に新しくREPLICATION SLAVE権限持ちのユーザーを作る。
ちなみに、↑のSELECT見ると判る感じで、古いパスワードは16桁、
新しい(といっても随分昔からだけど)パスワードは41桁で先頭が*です。
gdbでちょこちょこ調べてみたけど、
I/Oスレッドはサーバーのsecure-authもmy.cnfのsecure-authも見てくれなくて、
暗黙のデフォルト値(secure-auth=1)を使っているぽいので、
あとで暗黙のデフォルト値書き換えて試してみますかね。
ネタ提供のけんじおじさん++
今日もごちそうさまです(*-人-)
【2013/05/01 14:48】
今更になって気付いたんですが、タイトルに反してMySQL5.1だろうと5.5だろうと5.6だろうと
レプリケーション用のユーザーが16桁パスワードで設定されている場合は同じエラーになります。
名が体を現さないエントリになってしまった。。
あと、mysql_initがデフォルトでsecure_auth = TRUEを押し込んでいたので、
ここを直したら16桁パスワードでもスレーブになれるようになりました。ビバ。
$ diff -c sql-common/client.c sql-common/client.c.org *** sql-common/client.c 2013-05-01 14:08:10.810764039 +0900 --- sql-common/client.c.org 2013-04-05 21:27:18.000000000 +0900 *************** *** 1687,1694 **** */ mysql->reconnect= 0; ! // mysql->options.secure_auth= TRUE; ! mysql->options.secure_auth= FALSE; return mysql; } --- 1687,1693 ---- */ mysql->reconnect= 0; ! mysql->options.secure_auth= TRUE; return mysql; } mysql50> select user, host, password from user; +--------------+-----------------+-------------------------------------------+ | user | host | password | +--------------+-----------------+-------------------------------------------+ | root | localhost | | | root | dev-personal-04 | | | root | 127.0.0.1 | | | mysqld_multi | localhost | *25538D365EF36670224773C86161F9D7EEAC49F9 | | replicator | % | 755c4ac71c32381e | +--------------+-----------------+-------------------------------------------+ 5 rows in set (0.00 sec) mysql> change master to master_host='localhost', master_port = 64050, master_user='replicator', master_password='replicator', master_log_file='bin.000022', master_log_pos = 591; Query OK, 0 rows affected, 2 warnings (0.05 sec) mysql> start slave; Query OK, 0 rows affected (0.01 sec) mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: localhost Master_User: replicator Master_Port: 64050 Connect_Retry: 60 Master_Log_File: bin.000022 Read_Master_Log_Pos: 591 Relay_Log_File: relay.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: bin.000022 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 591 Relay_Log_Space: 410 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1050 Master_UUID: Master_Info_File: /usr/mysql/nosecure_5.6.11/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 1 row in set (0.00 sec)
【2013/05/21 12:04】
そっか、perrorはサーバー側のエラーコードを解釈してくれるやつで、
エラーコード2000番台はクライアント側のエラーコードだからperrorがInvalidって言うんだ。。
0 件のコメント :
コメントを投稿