MySQL數(shù)據(jù)庫(kù)的錯(cuò)誤有許多,下面就舉例說(shuō)明:MySQL的遠(yuǎn)程連接出現(xiàn)錯(cuò)誤,Mysql的遠(yuǎn)程連接出現(xiàn)"Lost connection to MySQL server during query" 安裝完了RH 8.0用自帶的mysql以后直接在本機(jī)上可以正常使用mysql登陸,用
mysql -u root -p
添加了一些用戶(hù),如* beginner pass
即beginner可以從任何地方通過(guò)密碼可以訪(fǎng)問(wèn)這臺(tái)Mysql服務(wù)器(假設(shè)我的mysql服務(wù)器為mysql.test.com)但當(dāng)我運(yùn)行
mysql -h mysql.test.com -u beginner -p
就提示:
ERROR 2013: Lost connection to MySQL server during query
其實(shí)我只要輸入
mysql -h mysql.test.com時(shí)就出現(xiàn)上面的提示,也就是說(shuō)它根本還沒(méi)有到驗(yàn)證密碼那一步。
這個(gè)問(wèn)題是由于glibc的一個(gè)bug造成的。
在glibc某些版本中,gethostbyaddr函數(shù)(確切地說(shuō)是_nss_dns_gethostbyaddr_r)存在緩沖區(qū)溢出問(wèn)題,在處理大數(shù)據(jù)時(shí)會(huì)造成SEGMENT FAULT。
在處理遠(yuǎn)程連接時(shí),mysqld會(huì)調(diào)用ip_to_hostname()函數(shù),再由這個(gè)函數(shù)調(diào)用gethostbyaddr函數(shù),最后系統(tǒng)在執(zhí)行nss_dns_gethostbyaddr_r函數(shù)處崩潰。因此,會(huì)出現(xiàn)上述情況。
解決問(wèn)題的辦法有2種
第一,由于是BUG,所以升級(jí)下glibc也可以解決。
第二種,有下面的參數(shù)的 話(huà) 注釋掉:
bind-address = 127.0.0.1
skip-name-resolve
適當(dāng)?shù)脑黾酉旅娴膮?shù)的值
net_write_timeout=?
wait_timeout =?
max_allowed_packet = ?
就可以解決上述的問(wèn)題