初學的mysql經常會碰到mysql無法連接的錯誤。收集的這樣問題的現象和原因。
歸納如下:
0.更改mysql root賬號密碼
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
1.故障現象 : 無法連接 mysql
=============================================================================C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -proot //帶-p參數,並指明密碼
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -p //帶-p參數,在下一步進行密碼輸入
Enter password: //有字符串輸入
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 //不帶-p參數
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: NO)
C:\Documents and Settings\Administrator>mysql -uroot -h 192.168.8.88 -p //帶-p參數,在下一步進行密碼輸入
Enter password: //無字符串輸入
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: NO)
上面的對比可總結出一點,使用mysql命令進行登錄時,若有密碼輸入行爲並輸入了字符,則驗證出錯後,則返回的錯誤提示中,對於 (using password: ?)中?的關鍵字,則返回的是YES,若沒有密碼輸入行爲,或無密碼字符輸入,則返回的是NO。
除上面的實驗對比,還進行了如下的登錄對比操作,並記錄了他們所返回錯誤提示類型,對上面的總結進行驗證:
1.使用存在的用戶,不輸入密碼
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: NO)
2.使用不存在的用戶,不輸入密碼
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: NO)
3.使用存在的用戶,且輸入密碼正確
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
4.使用存在的用戶,但輸入密碼不正確
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
5.使用不存在的用戶,但輸入數據庫中存在的某一個密碼
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
6.使用不存在的用戶,且輸入數據庫中不存在的一個密碼
ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' (using password: YES)
總結:對於 ERROR 1045 (28000): Access denied for user 'root'@'192.168.8.123' 此類錯誤返回時, (using password: ?)中?的
關鍵字是YES還是NO,關鍵不在於用戶是否存在,密碼是否正確,它的結果取決於登錄時,用戶對於密碼有沒有字符串的輸入,如果沒有,MySQL數據庫驗證後,若出錯返回此類信息,則應是 (using password: NO),若用戶對密碼有字符串的輸入,返回的則是
(using password: YES)。
下面分析這類 ERROR 1045 (28000): Access denied for user'usera'@'localhost' 錯誤出現的原因:
原因1 : 客戶端遠程訪問的用戶賬號並未創建
檢查 :
以管理員ROOT登錄後,show grants for 'user'@’IP‘; 或者 select user from
mysql.user; 確認用戶賬號是否存在。
通過MySQL 5.6 Command Line 的命令行輸入下列命令
ERROR 1141 (42000): There is no such grant defined for user 'jtsec' on host '192.168.8.123'
mysql>
返回信息:ERROR 1141 (42000): There is no such grant defined for user 'jtsec' on host '192.168.8.123'
+-------+---------------+
| user | host |
+-------+---------------+
| root | localhost |
+-------+---------------+
1 rows in set (0.00 sec)
mysql>
關於user記錄數只有一條,是root,並沒有jtsec相關的記錄,說明沒有數據庫中沒有jtsec這個帳號。
處理 :創建用戶賬號。
mysql> grant all privileges on *.* to 'jtsec'@'192.168.8.123' identified
by 'jtsec' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show grants for 'jtsec'@'192.168.8.123';
+---------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]
|
+---------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'jtsec'@'192.168.8.123' IDENTIFIED BY PASSWORD '*0B4AB716B6BE11F89101577836F3016D8EEAA217'
WITH GRANT OPTION |
+---------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
mysql> select user,host from mysql.user;
+-------+---------------+
| user | host |
+-------+---------------+
| jtsec | 192.168.8.157 |
| root | localhost |
+-------+---------------+
2 rows in set (0.00 sec)
mysql>
原因2 : 用戶賬號存在,但未對其所在的客戶端的IP進行遠程訪問授權允許
ERROR 1141 (42000): There is no such grant defined for user 'root' on host '192.168.8.123'
mysql>
返回信息:ERROR 1141 (42000): There is no such grant defined for user 'root' on host '192.168.8.123'
+----------------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@localhost |
+----------------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION |
+----------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
+-------+---------------+
| user | host |
+-------+---------------+
| root | localhost |
+-------+---------------+
1 rows in set (0.00 sec)
mysql>
關於user值爲root的記錄數只有一條,且host值爲localhost,說明root用戶只能在本地訪問數據庫。
處理 :進行root用戶的遠程訪問授權,可以授權到指定的客戶端IP,也可以授權爲所有IP都可訪問(host值爲%)。
授權爲所有IP都使用用戶root,密碼root,來遠程訪問數據庫
mysql> GRANT ALL PRIVILEGES ON *.* TO'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
再次進行授權的查詢
+--------------------------------------------------------------------------------------------------------------------------------+
| Grants for root@% |
+--------------------------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*81F5E21E35407D884A6CD4A731AEBFB6AF209E1B' WITH GRANT OPTION |
+--------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
+-------+---------------+-------------------------------------------+
| user | host | password |
+-------+---------------+-------------------------------------------+
| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
+-------+---------------+-------------------------------------------+
2 rows in set (0.00 sec)
原因3 : 用戶賬號授權訪問的密碼不正確
+-------+---------------+-------------------------------------------+
| user | host | password |
+-------+---------------+-------------------------------------------+
| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| jtsec | 192.168.8.123 | *0B4AB716B6BE11F89101577836F3016D8EEAA217 |
+-------+---------------+-------------------------------------------+
4 rows in set (0.00 sec)
根據查詢結果可以看出來,root賬戶的本地訪問和遠程訪問密碼一樣。
處理 :使用正確的訪問密碼進行訪問即可。
2.錯誤信息 :ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.8.88' (10065)
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
或嘗試關掉防火牆
chkconfig ip6tables off
chkconfig iptables off
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.8.88' (10065)
3.錯誤信息 :ERROR 2003 (HY000): Can't connect to MySQL server on 'hostxxxxx' (10061)
原因 : mysqld數據庫服務沒有啓動。檢查 :在windows 的任務管理器,或者 unix/linux 下 ps -aux | grep mysql 看一下。確認服務已經啓動。
處理 :啓動mysqld 服務
===================================================================================
4.錯誤信息 :ERROR 1130: Host xx.xx.xx.xx is not allowed to connect to this MySQL server
原因 : mysql服務器沒有賦予此客戶端遠程連接的權限。檢查 :在mysql服務器本地查詢mysql庫裏user表對應的host是否包含客戶端機器的IP(%爲不限制IP允許遠程連接)。
處理 :修改mysql庫下的user表:update user set host = '%' where user ='XXX';flush privileges;
===================================================================================
5.錯誤信息 :ERROR 1045 (28000): Access denied for user 'usera'@'localhost' (using password:NO)
原因 : 用戶賬號並未創建,遠程登錄時登錄指令未直接包含密碼項處理 :創建用戶賬號。
===================================================================================
6.錯誤信息 :ERROR 2003 (HY000): Can't connect to MySQL server on 'hostxxxxx' (10061)
原因 : mysqld 客戶端與服務端端口不一致。檢查 :在my.ini 設置下服務端口 這種情況特別是客戶都與遠程服務器端口不一致 很容易出現的問題
處理 :啓動mysqld 服務
===================================================================================
7.錯誤信息 :ERROR 2002 (HY000): Can't connect to local MySQL server server through socket '/var/lib/mysql/mysql.sock'(111)
原因 : mysqld的mysql.sock沒在相應的位置。處理 :
2.改權限 chown -R mysql:msyql /var/lib/mysql
3.修改/etc/my.cnf (注意:先停數據庫)
[mysqld]
datadir=/usr/local/mysql/data
socket=/var/lib/mysql/mysql.sock
[mysql.server]
user=mysql
basedir=/usr/local/mysql
[client]
socker=/var/lib/mysql/mysql.sock
4.啓動數據庫
===================================================================================
常用檢查步驟。
1. PING hostname 或 PING 189.xx.xx.xx 確認服務器IP層通信沒有問題。如果PING通則繼續(2),PING不通則找網絡方面專家協助。
2. TELNET hostname 3306 確認服務器TCP層通信沒有問題。(你的端口號可能不是3306),如通則繼續,如不通,請檢查mysqld 是否已經在運行,防火牆屏蔽了端口。
3. 檢查用戶權限, show grants ... 或 select user,host,password from mysql.user;
8.故障現象 : 本地無法 mysql -u root -p 用原來的密碼登錄,但可以用無密碼,遠程必須用原密碼登錄
錯誤信息 :ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)原因 : 未知,不知道是否mysql的新密碼控制策略
檢查 :mysql -u root 密碼空登錄無問,遠程用navica mysql無密碼有問題,有密碼無問題
處理 :暫時先把本地登錄的密碼去掉
版本環境:mysql Ver 14.14 Distrib 5.1.56, for debian-linux-gnu (i486) using readline 6.2
+-------+---------------+-------------------------------------------+
| user | host | password |
+-------+---------------+-------------------------------------------+
| root | localhost | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
2 rows in set (0.00 sec)
+-------+---------------+-------------------------------------------+
| user | host | password |
+-------+---------------+-------------------------------------------+
| root | localhost | |
| root | % | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
2 rows in set (0.00 sec)
==================================================================================
故障現象 : 無法連接 mysql windows
錯誤信息 :ERROR 2003 (HY000): Can't connect to MySQL server on 'hostxxxxx' (10061)
原因 : 同時開啓大量的tcp端口和而僅有一小部分短命端口時,當他們處於time_wait時期,mysql可能會跑錯端口
檢查 :在windows 默認會開啓5000個臨時端口供調用,而他們的生命僅僅是120s,意思是在關閉端口的時候會有120秒的延時
處理 :減少不不必要的tcp端口。
修改註冊表
==================================================================================
求助,不知道大家有一樣的情況沒有?
按照網上說的方法仍沒解決,樓主是否碰見過?
==================================================================================
Lost connection to MySQL server at 'reading initial communication packet', system error: 0
什麼問題??