天天看點

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

作者:手辨

實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

更新20180205:增加:對ERROR 5 (HY000): Out of memory (Needed 260400 bytes)問題原因進行說明

第一節 環境準備

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 1142 (42000) command denied to user 'testcon'@'10.24.236.231' for table/database '**'

這種不是連接配接問題,這種是已經連上了,出現權限問題導緻,錯誤碼也不一樣

現象描述:

ERROR 1045 (28000): Access denied for user

'testcon'@'10.24.236.231' (using password: YES)

可能1:password錯誤

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當使用'testcon'@'10.24.236.231'的account錯誤的password時,登入失敗,因為建立了testcon@’%’,

是以account驗證可以通過,但是密碼不對

可能2:user錯誤(account錯誤)

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當使用錯誤的user時,登入失敗,按照之前的account的構成,實際的進行驗證的account是: 'testconcon'@'10.24.236.231',

但是并沒有建立'testconcon'@'10.24.236.231',而是建立的為testcon@’%’,是以account驗證失敗,即使使用正确的密

碼也無法登入,當建立一個'testconcon'@'%'的時候,使用正确密碼則登入正常,如下:

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

可能3:account錯誤

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

與第二種相比,此次建立的賬号和密碼有如下對應:

Account Password
testcon@'10.24.236.231' 123
testcon@'1.1.1.1' 12

當使用testcon@'10.24.236.231'以及密碼12登入時,登入失敗,因為testcon@'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 'rm-XXXXXXXXXXXX.mysql.rds.aliyuncs.com' (110)

可能1:DNS解析異常

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

同ping來擷取ip,無法擷取到,故mysql指令行進行連接配接時就出錯了,此時需要通過ping來觀察dns的解析,

并檢查系統dns配置

20170809補充:當使用阿裡雲的ECS設定的安全組為如下時,會導緻dns解析異常:

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

如下為測試結果:

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

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高安全模式特有)

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

解決辦法:原因是該account不存在,檢查mysql.user(rds for mysql分為高權限賬号和普通賬号管理,高權限賬

當把高安全模式切換到标準模式是,再次進行測試則變成ERROR 1045 (28000): Access denied for user 'contest'@'10.24.236.231'

 (using password: YES),如下:

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

2.4 ERROR 2003 (HY000)

ERROR 2003 (HY000): Can't connect to MySQL

server on 'test.mysql.rds.aliyuncs.com' (110)

可能1:client側安全限制,不允許通路

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

一般表現為telnet特定特定端口不通,解決辦法:檢查應用所在主機的安全規則是否有攔截

可能2:端口錯誤

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

端口錯誤,即使沒有安全限制也無法連接配接,telnet 特定端口也不會通,解決辦法:确認連接配接mysql的端口是否正确

可能3:mysql服務未正确運作

先關掉自建mysql資料庫

我遇到的十二種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的白名單未配置

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當加上白名單後(等待任務運作完成):

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

ps:确認自己本地主機的公網出口ip的方式我常用的是使用dms的執行個體管理-授權通路位址來檢視,比較準确,具體如下:

1,用用戶端主機通路dms控制台:

https://dms.console.aliyun.com/

2,按照如下操作确認公網出口ip

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

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連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

解決辦法(自建mysql的情況适用,rds不适用如下方法):

檢查和修改系統的核心參數

可能2:mysql沒有可用記憶體

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種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連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

從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(上面的這個問題如果建立一個testcon1@'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的白名單中

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當添加白名單後(等待任務運作完成):

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

解決辦法:檢查RDS的白名單設定是否正确

2.8 ERROR 5 (HY000)

ERROR 5 (HY000): Out of memory (Needed

260400 bytes)

可能1:mysql沒有可用記憶體

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

最近又遇到了這個問題,這個問題出現的原因概括如下(感謝核心同學):

執行sql的時候,mysql server需要申請記憶體,會先判斷當時可用記憶體是否滿足,如果不滿足,則直接抛錯,不會進行記憶體申請

解決辦法(先确認記憶體是否已經不足):增加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的值

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

上面通過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

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

需要注意的是,當進行多次登入失敗時,是沒有影響的:

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

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大小

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當使用grant設定了testcon@’%’的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)

exceeded the 'max_connections_per_hour' resource (current value: 2)

可能1:達到了該account設定的max_connections_per_hour大小

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

使用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的限制

我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!
我遇到的十二種Mysql連接配接錯誤執行個體 實為吾之愚見,望諸君酌之!聞過則喜,與君共勉!諸君有其他案例煩請留言提供,以幫助更多人!

當并發連接配接大于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,需要更新執行個體規格來提升連接配接數