相信有很多人都會(huì)用到mysql數(shù)據(jù)庫,因?yàn)楝F(xiàn)在任何網(wǎng)絡(luò)上的東西是能夠離開數(shù)據(jù)的。所以數(shù)據(jù)庫就是非常常見的軟件了,而有很多新手小白,一開始用的時(shí)候遇到數(shù)據(jù)庫遠(yuǎn)程連接報(bào)錯(cuò)是一臉懵的,完全不知道是什么意思。這里盛網(wǎng)攻城師專門收集整理了一些東西發(fā)出來,希望能幫到大家。有興趣的還可以加我聯(lián)系(2247597368)
## 1. ERROR 2003(hy000):can't connect to mysql server on 'localhost' (10061)
原因是MySQL考慮到安全因素,默認(rèn)配置只讓從本地登錄
打開?/etc/mysql/my.cnf?文件,找到?bind-address = 127.0.0.1?修改為?bind-address = 0.0.0.0
重啟`mysql : sudo /etc/init.d/mysql restart`
再次連接,發(fā)生錯(cuò)誤?1045
## 2. ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: NO)
-?原因是沒有給登錄用戶名設(shè)置遠(yuǎn)程主機(jī)登錄的權(quán)限。還有種可能是你需要重設(shè)下密碼....可能是授權(quán)操作引起這種后遺癥..
-?在本地用?root?登錄:
????```
??????# mysql -u root -p
????```
修改?MySQL?數(shù)據(jù)庫中?user?表中 對應(yīng)用戶名的?Host?字段,將?localhost?改為?`%`
????```
??????mysql> use mysql;
??????mysql> update user set Host = '%' where User = 'username';
????```
## 3.?取回ROOT密碼并設(shè)置遠(yuǎn)程登錄
-?重設(shè)?ROOT密碼
????```
??????# mysqld_safe --skip-grant-tables &
??????# mysql -u root mysql
??????mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root';
??????mysql> FLUSH PRIVILEGES;
????```
-?設(shè)置?ROOT?遠(yuǎn)程連接 ?
????```
??????mysql> update user set host = '%' ??where user='root';
????```
- Kill進(jìn)程,重啟?mysqld
查看進(jìn)程`PS -A | grep mysql `,可看到MYSQLD_SAFE與MYSQL進(jìn)程,此時(shí)MYSQL可正常使用,不過查看參數(shù),可看到`--skip-grant-tab`
輸入?`kill -9 [pid]`?關(guān)閉進(jìn)程
## 4. ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
如果執(zhí)行update語句時(shí)出現(xiàn)ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'?錯(cuò)誤,說明有多個(gè)ROOT用戶紀(jì)錄在USER表中了.
`mysql> select host from user where user = 'root';`
查看一下host是否已經(jīng)有了`%`這個(gè)值,有了就可以了.
`mysql> select host,user from user where user='root';`
```
+-----------------------+------+
| host ?????????????????| user |
+-----------------------+------+
| % ????????????????????| root |
| 127.0.0.1 ????????????| root |
| ::1 ??????????????????| root |
| localhost.localdomain | root |
+-----------------------+------+
```
然后用ROOT用戶登錄更改用戶賬戶的遠(yuǎn)程連接權(quán)限時(shí).出現(xiàn)提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'。
## 5. ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'
是因?yàn)閙ysql數(shù)據(jù)庫的user表里,存在用戶名為空的賬戶即匿名賬戶,導(dǎo)致登錄的時(shí)候是雖然用的是root,但實(shí)際是匿名登錄的,通過錯(cuò)誤提示里的''@'localhost'可以看出來,于是解決辦法見
先關(guān)閉MYSQL進(jìn)程..
然后
???`# mysqld_safe --skip-grant-table`
接著輸入
??```
???mysql -u root mysql
???mysql> delete from user where USER='';
???mysql> FLUSH PRIVILEGES;
??```
如果出現(xiàn)?Starting demo from ..?后..先輸入其它命令,再用mysql -u root mysql .它又會(huì)出現(xiàn)這個(gè)錯(cuò)誤了.
然后KILL掉MYSQL進(jìn)程,..重啟正常的進(jìn)程..
設(shè)置用戶遠(yuǎn)程主機(jī)連接權(quán)限
??```
????mysql> update user set host = '%' ?where user='tester';
????mysql> FLUSH PRIVILEGES;
??```
## 6.?設(shè)置用戶與庫的權(quán)限
但是在實(shí)際連接中,雖然可以連接,但是去沒有所在庫的權(quán)限,下面設(shè)置權(quán)限
??```
????mysql> grant all privileges on tester.* to tester@'%' identified by '1234';
????mysql> FLUSH PRIVILEGES;
??```
百分號(hào)兩邊要有單引號(hào),否則語法錯(cuò)誤
然后連接時(shí),竟然提示1045?錯(cuò)誤了,重設(shè)下密碼試下.
??```
????mysql> update mysql.user set password=password('XXX') where User="tester"
????mysql> flush privileges;