1. 程式人生 > >MySQL連線錯誤例項

MySQL連線錯誤例項

遇到的十二種Mysql連線錯誤例項 更新20170919:針對ERROR 1130 (HY000): Host '192.168.1.3' is not allowed to connect to this MySQL server更換了一個更易讀的例子 第一節 環境準備 1.1 自建mysql環境主機 主機:iZbp1e*****krn92qrx0Z 內網ip: 10.26.254.217 1.2 客戶端ecs主機 主機:iZbp1e6*****zkrn92qrwzZ 內網ip: 10.24.236.231 1.3 說明 說明:mysql的account的組成為’user’@’host’ 第二節 常見問題復現 2.1 ERROR 1045 (28000) 現象描述: ERROR 1045 (28000): Access denied for user 'testcon'@'10.24.236.231' (using password: YES) 可能1:password錯誤 當使用'testcon'@'10.24.236.231'的account錯誤的password時,登入失敗,因為建立了[email protected]’%’, 所以account驗證可以通過,但是密碼不對 可能2:user錯誤(account錯誤) 當使用錯誤的user時,登入失敗,按照之前的account的構成,實際的進行驗證的account是: 'testconcon'@'10.24.236.231', 但是並沒有建立'testconcon'@'10.24.236.231',而是建立的為
[email protected]
’%’,所以account驗證失敗,即使使用正確的密 碼也無法登入,當建立一個'testconcon'@'%'的時候,使用正確密碼則登入正常,如下: 可能3:account錯誤 與第二種相比,此次建立的賬號和密碼有如下對應: Account Password [email protected]'10.24.236.231' 123 [email protected]'1.1.1.1' 12 當使用[email protected]'10.24.236.231'以及密碼12登入時,登入失敗,因為[email protected]
'10.24.236.231'的 password為123,所以使用password為123可以正常登入 解決辦法: 1,如果確認密碼正確,檢查mysql.user(rds for mysql分為高許可權賬號和普通賬號管理,高許可權賬 號的例項可以查詢mysql.user_view表)表裡面的account資訊(主要是user,host列),確認連線的account 符合user裡面的匹配項 2,如果通過mysql.user(rds for mysql分為高許可權賬號和普通賬號管理,高許可權賬號的例項可以查 詢mysql.user_view表)account正常,可以嘗試更改一下密碼再進行測試 3,最快速簡單的方法是重新建立一個賬號,授予相關的許可權 2.2 ERROR 2005 (HY000)
現象描述: ERROR 2005 (HY000): Unknown MySQL server host 'com-mysql.coflodhn1n0y.us-west-1.rds.amazonaws.com' (110) 可能1:DNS解析異常 同ping來獲取ip,無法獲取到,故mysql命令列進行連線時就出錯了,此時需要通過ping來觀察dns的解析, 並檢查系統dns配置 20170809補充:當使用阿里雲的ECS設定的安全組為如下時,會導致dns解析異常: 如下為測試結果: 2.3 ERROR 1449 (HY000) 現象描述: ERROR 1449 (HY000): The user specified as a definer ('testcon'@'10.24.236.231') does not exist 或者 ERROR 1045 (28000): user not exist 可能1:account不存在(阿里雲rds高安全模式特有) 解決辦法:原因是該account不存在,檢查mysql.user(rds for mysql分為高許可權賬號和普通賬號管理,高許可權賬 號的例項可以查詢mysql.user_view表)表裡面的account資訊(主要是user,host列),確認連線的account 符合user裡面的匹配項 當把高安全模式切換到標準模式是,再次進行測試則變成ERROR 1045 (28000): Access denied for user 'contest'@'10.24.236.231' (using password: YES),如下: 2.4 ERROR 2003 (HY000) 現象描述: ERROR 2003 (HY000): Can't connect to MySQL server on 'test.mysql.rds.aliyuncs.com' (110) 可能1:安全限制,不允許訪問 一般表現為telnet特定特定埠不通,解決辦法:檢查應用所在主機的安全規則是否有攔截 可能2:埠錯誤 埠錯誤,即使沒有安全限制也無法連線,telnet 特定埠也不會通,解決辦法:確認連線mysql的埠是否正確 可能3:mysql服務未正確執行 先關掉自建mysql資料庫 然後進行連線 同樣表現為telnet 特定斷開不通,解決辦法(自建mysql的情況適用,rds不適用如下方法): 1,執行netstat -apn | grep 3306,檢查下3306埠的程序資訊 2,執行ps -ef | grep mysql,檢查下程序資訊 3,如果1和2沒有輸出,可能mysql server未在主機正確執行 可能4:如果是rds for mysql,且訪問模式為標準模式,原因為客戶端的ip地址在rds的白名單未配置 當加上白名單後(等待任務執行完成): ps:確認自己本地主機的公網出口ip的方式我常用的是使用dms的例項管理-授權訪問地址來檢視,比較準確,具體如下: 1,用客戶端主機訪問dms控制檯:https://dms.console.aliyun.com/ 2,按照如下操作確認公網出口ip 2.5 ERROR 1135 (HY000) 現象描述: ERROR 1135 (HY000): Can't create a new thread (errno 11); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug 可能1:limits.conf檔案對max user processes做了限制 解決辦法(自建mysql的情況適用,rds不適用如下方法): 檢查和修改系統的核心引數 可能2:mysql沒有可用記憶體 解決辦法(先確認記憶體是否已經不足):增加mysql的記憶體,如果是rds,可以考慮升級RDS的例項規格 2.6 ERROR 1130 (HY000) 現象描述: ERROR 1130 (HY000): Host '192.168.1.3' is not allowed to connect to this MySQL server 可能1:mysql.user表裡沒有匹配的host名稱 從mysql server的mysql.user表裡檢視user為testcon的host,只有兩個:127.0.0.1以及izbp1e6df2sbzkrn92qrwzz,當使用另一個客戶端(ip為10.24.236.231,主機名為iZbp1e6df2sbzkrn92qrwzZ)使用user為testcon登入時提示ERROR 1130 (HY000): Host '10.24.236.231' is not allowed to connect to this MySQL server,因為mysql server的mysql.user表裡沒有ip為10.24.236.231的host,這裡要說一點,mysql是把mysql.user裡的資訊放到記憶體中排序好之後進行匹配的,先按host排序,host相同排序user(上面的這個問題如果建立一個[email protected]'10.24.236.231'的account,再次連線就會出現ERROR 1045 (28000): Access denied for user 'testcon'@'10.24.236.231' (using password: YES) 因為host匹配到了,user沒有,account錯誤) 解決辦法:檢查mysql.user(rds for mysql分為高許可權賬號和普通賬號管理,高許可權賬號的例項可以查詢mysql.user_view表)表裡面的account資訊(主要是user,host列),確認連線的account符合user裡面的匹配項 2.7 ERROR 1045 (HY000) 現象描述: ERROR 1045 (HY000): #28000ip not in whitelist 可能1:rds for mysql的提示,且訪問模式為高安全模式才會出現,原因是ip地址沒有在rds的白名單中 當新增白名單後(等待任務執行完成): 解決辦法:檢查RDS的白名單設定是否正確 2.8 ERROR 5 (HY000) 現象描述: ERROR 5 (HY000): Out of memory (Needed 260400 bytes) 可能1:mysql沒有可用記憶體 解決辦法(先確認記憶體是否已經不足):增加mysql的記憶體,如果是rds,可以考慮升級RDS的例項規格 2.9 ERROR 1129 (HY000) 現象描述: ERROR 1129 (HY000): Host '10.24.236.231' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts' 關於max_connect_errors可以參考另一篇:https://yq.aliyun.com/articles/159612?spm=5176.100240.searchblog.8.CZzMGt 可能1:達到了mysql伺服器設定的max_connect_errors的值 上面通過3次telnet,然後進行第四次時提示ERROR 1129 (HY000): Host '10.24.236.231' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts',原因是已經超過了max_connect_errors=3的值, 解決方法(只適用於自己mysql,rds目前不支援):系統命令列下執行mysqladmin flush-hosts或者mysql命令列裡執行flush hosts 需要注意的是,當進行多次登入失敗時,是沒有影響的: 2.10 ERROR 1226 (42000) 現象描述: ERROR 1226 (42000): User 'testcon' has exceeded the 'max_user_connections' resource (current value: 2) 可能1:達到了該account設定的max_user_connections大小 當使用grant設定了[email protected]’%’的max_user_connections為2時,併發連線超過2就會提示ERROR 1226 (42000): User 'testcon' has exceeded the 'max_user_connections' resource (current value: 2),如果沒有手動grant指定,會 用系統引數max_user_connections的值來設定, 解決辦法:重新grant為0或者調整系統變數max_user_connections,如果沒有許可權,也可以刪除賬號重新建立 2.11 ERROR 1226 (42000) 現象描述: ERROR 1226 (42000): User 'testcon' has exceeded the 'max_connections_per_hour' resource (current value: 2) 可能1:達到了該account設定的max_connections_per_hour大小 使用testcon一小時內登入2次後就會提示ERROR 1226 (42000): User 'testcon' has exceeded the 'max_connections_per_hour' resource (current value: 2) 解決辦法:重新grant該賬號max_connections_per_hour為0,如果沒有許可權,也可以刪除賬號重新建立 2.12 ERROR 1040 (HY000) 現象描述: ERROR 1040 (HY000): Too many connections 可能1:達到了mysql系統引數max_connections的限制 當併發連線大於max_connections的值時,就會出現ERROR 1040 (HY000): Too many connections 解決辦法: 1,檢查mysql server的CPU,IO,記憶體等狀態的變化,是否有明顯的升高現象,如果有明顯的升高,實時的通過show processlist獲取session資訊,通過獲取到的session資訊分析cpu,io以及記憶體跑高的原因,綜合分析(是否是遇到了阻塞或者慢查詢)kill掉相關會話來解決 2,檢查mysql server的CPU,IO,記憶體等狀態的變化,是否有明顯的升高現象,如果沒有明顯的升高,實時的通過show processlist獲取session資訊,通過獲取到的session資訊找到會話來源(看下是否是sleep連線較多),嘗試調整來源主機的應用行為 3,如果無法手動干預,嘗試調整mysql的max_connections的值,如果是rds for mysql,需要升級例項規格來提升連線數