Saturday, September 7, 2013

MySQL的訪問和複製被secure_auth

Original post: http://anothermysqldba.blogspot.com/2013/09/mysql-access-and-replication-blocked-by.html

ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

如果你已經嘗試連接到MySQL數據庫,你會看到這個錯誤,那麼你需要有有效的41byte的哈希密碼。 如果您不確定您有執行下面的SQL。 如果你有16個字符的密碼,他們年紀大了密碼。

select Password from mysql.user;

下面是我解決了這個作為一個從MySQL 5.0遷移到MySQL 5.6的一部分。

MySQL 5.0的服務器有一個上了年紀的預4.1密碼和有效41byte密碼的混合物。 因為在MySQL 5.0服務器有一些舊的密碼,我決定甩MySQL表的一部分設置複製的賬戶。 我所做的,除了mysql數據庫中的所有數據庫轉儲。 這可以保證,我會保持有效的MySQL 5.6表增強。

MySQL 5.6的服務器上安裝容易了,我將轉儲裝載數據。 遷移的一部分是使用複製,而他們評估了新的數據庫。 雖然我測試了MySQL 5.6的服務器上複製用戶帳戶。 我得到的響應是在頁面的頂部的錯誤。 複製將無法運行,當然,沒有一個有效的用戶帳戶。 這是為什麼錯誤日誌給我這個錯誤:
[ERROR] Slave I/O: error connecting to master '<user>@<hostname>:3306' - retry-time: 10 retries: 68, Error_code: 2049

MySQL 5.0的服務器上的帳戶快速審查表明,建立了新帳戶前4.1密碼。 所以,我需要一個有效的41字節的密碼升級帳戶。

下面的查詢表明,它們的確有啟用舊密碼。 所以,我必須停用,並再次更新用戶帳戶設置密碼,作為一個有效的41字節的散列。

>SELECT @@session.old_passwords, @@global.old_passwords;
+-------------------------+------------------------+
| @@session.old_passwords | @@global.old_passwords |
+-------------------------+------------------------+
| 1 | 1 |
+-------------------------+------------------------+
1 row in set (0.00 sec)


>SET @@session.old_passwords = 0;
Query OK, 0 rows affected (0.00 sec)

>GRANT REPLICATION SLAVE ON *.* TO '<user>'@'<ip_address>' IDENTIFIED BY '<Password>';
Query OK, 0 rows affected (0.00 sec)

密碼的檢查表明現在密碼為41byte的密碼。 我能夠從輔助服務器連接到主服務器和避免secure_auth錯誤。 複製連接方便,問題得到解決。

展望未來,我需要得到的MySQL 5.0用戶帳戶上的MySQL 5.6服務器。 (因為我跳過作為建築輔助服務器的一部分。)

客戶端需要再次為每個用戶設置的補助,不管有效密碼或。
所以,我指示他們執行下面的SQL。 我可以做到這一點,但我需要知道他們的密碼,這是沒有必要的。

對於每個用戶在他們的系統。 你不必做root用戶,因為你已經有了一個有效的根帳戶的5.6系統上。

>SET @@session.old_passwords = 0;
>show grants for '<User>'@'<Host>';
為了收集需要為每個用戶運行下面的sql:
SELECT CONCAT("SHOW GRANTS FOR '",User,"'@'",Host,"';") as sql_command from mysql.user;

對於每個結果執行“展會補助”的語句,然後執行該語句。
聲明應類似於以下內容:

GRANT USAGE ON *.* TO 'bob'@'%.example.org' IDENTIFIED BY 'cleartext password';

複製My​​SQL 5.6的服務器上創建和填充MySQL表。

更可以在這裡找到:
http://dev.mysql.com/doc/refman/5.6/en/password-hashing.html