解析遠(yuǎn)程連接管理其他機(jī)器上的MYSQL數(shù)據(jù)庫(kù)
在開(kāi)發(fā)過(guò)程中,有時(shí)候需要遠(yuǎn)程連接并管理別的機(jī)器上的MYSQL數(shù)據(jù)庫(kù),在實(shí)現(xiàn)的過(guò)程中會(huì)遇到一系列的問(wèn)題,現(xiàn)在以遠(yuǎn)程訪問(wèn)我自己安裝在Ubuntu上的MYSQL數(shù)據(jù)為例(端口為默認(rèn)端口3306),說(shuō)明一下配置步驟及每一步中遇到的問(wèn)題及相應(yīng)解決方法:
遠(yuǎn)程連接管理MYSQL,總體上來(lái)說(shuō)有三步:(A為主操作機(jī)器,B為遠(yuǎn)程機(jī)器(MYSQL安裝在B上,由A訪問(wèn)B)
1,在被連接的MYSQL中創(chuàng)建專門的遠(yuǎn)程連接用戶wow;
2,修改被連接的MYSQL的配置文件my.cnf,使此MYSQL不僅僅支持本地IP127.0.0.1的監(jiān)聽(tīng),也支持其他IP的監(jiān)聽(tīng),并重啟Mysql服務(wù),使配置生效。
3,驗(yàn)證A中MYSQL的配置端口是否與B中的一致(都是3306?),如果一致,通過(guò) mysql -h B的ip -u wow --port=3306 -p,來(lái)遠(yuǎn)程連接。
下面,就每一步詳細(xì)說(shuō)明一下:
一,在被連接的MYSQL中創(chuàng)建專門的遠(yuǎn)程連接用戶wow;
之所以要?jiǎng)?chuàng)建專門的用戶,是因?yàn)镸YSQL在最初安裝的時(shí)候,默認(rèn)的root帳號(hào)以及其他的帳號(hào)是僅限于在localhost連接使用的。在遠(yuǎn)程機(jī)器上即使你用同樣的用戶名及密碼登錄,都無(wú)法正常連接。比如你在遠(yuǎn)程機(jī)器192.168.83.56上用root帳號(hào)登錄192.168.11.12機(jī)器上的Mysql:
mysql -h 192.168.11.12 -u root -p,是無(wú)法正常登錄的。此時(shí),需要登錄192.168.11.12機(jī)器,進(jìn)入mysql中的mysql數(shù)據(jù)庫(kù)查看user表,確認(rèn)具體的root權(quán)限,特別是它的host是localhost還是你對(duì)應(yīng)的IP,還是%。
解決方法:
A,(在192.168.11.12機(jī)器中的MYSQL中創(chuàng)建專門的遠(yuǎn)程用戶root或者wow),創(chuàng)建用戶與賦予權(quán)限有兩種方法:
1)改表法。可能是你的帳號(hào)不允許從遠(yuǎn)程登陸,只能在localhost。這個(gè)時(shí)候只要在localhost的那臺(tái)電腦,登入mysql后,更改 "mysql" 數(shù)據(jù)庫(kù)里的 "user" 表里的 "host" 項(xiàng),把"localhost"改為"%"?!?”的意思就是所有host都可以訪問(wèn)。
mysql -u root -p vmware mysql>use mysql; mysql>update user set host = '%' where user = 'root';mysql>select host, user from user;
2)授權(quán)法。例如,你想wow使用mypassword從任何主機(jī)連接到mysql服務(wù)器的話。
GRANT ALL PRIVILEGES ON *.* TO 'wow'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想只允許用戶wow從ip為192.168.83.56的主機(jī)連接到192.168.11.12的mysql服務(wù)器,并使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'wow'@'192.168.83.56' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES
第二句表示從mysql數(shù)據(jù)庫(kù)的grant表中重新加載權(quán)限數(shù)據(jù)。因?yàn)镸ySQL把權(quán)限都放在了cache中,所以在做完更改后需要重新加載。
B,在用GRANT授權(quán)法創(chuàng)建完用戶wow并賦予權(quán)限以后,是不是就可以用了?不可以嗎?我們可以簡(jiǎn)單驗(yàn)證一下。先在遠(yuǎn)程機(jī)器192.168.83.56上 mysql -h 192.168.11.12 -u root -p,是無(wú)法正常登錄。報(bào)2003的錯(cuò):
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.11.12' (111)
什么原因?是賬戶沒(méi)有建立成功?權(quán)限設(shè)置問(wèn)題,還是網(wǎng)絡(luò)配置防火墻等的問(wèn)題?還是mysql的其他配置問(wèn)題沒(méi)有解決?
先排除帳號(hào)與權(quán)限的問(wèn)題:在localhost(192.168.11.12)機(jī)器中,嘗試用wow用戶進(jìn)入數(shù)據(jù)庫(kù)。mysql -u wow -p mypassword,報(bào)1045的錯(cuò):
ERROR 1045 (28000): Access denied for user 'wow'@'localhost' (using password: YES),
為啥呢?怎么創(chuàng)建的新用戶在本機(jī)上都無(wú)法登錄MYSQL,難道真是用戶wow沒(méi)有創(chuàng)建成功?再查看user表,wow確實(shí)已經(jīng)有了啊。一頓糾結(jié),最后找到原因,原來(lái)是安裝配置mysql的過(guò)程中沒(méi)有刪除匿名賬戶,刪除匿名賬戶:
mysql -u root -p
mysql>use mysql
mysql>delete from user where User=' ';
mysql>quit;
再嘗試 mysql -u wow -p mypassword,wow用戶可以在本機(jī)正常登錄了,看來(lái)帳號(hào)wow是沒(méi)有問(wèn)題的,那再試一下遠(yuǎn)程連接:
mysql -h 192.168.11.12 -u root -p,是無(wú)法正常登錄。還報(bào)2003的錯(cuò):
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.11.12' (111),
查看一下errorCode來(lái)排查問(wèn)題:
[mysql@vvmvcs0 ~]$ perror 111
OS error code 111: Connection refused
那難道是網(wǎng)絡(luò)的問(wèn)題?ping xxx.xxx.xxx.12,可以PING通,那機(jī)器是沒(méi)問(wèn)題的。看來(lái)要看看mysql的配置文件my.cnf中關(guān)于遠(yuǎn)程連接的配置了,這就進(jìn)入了我們的第二步。。
2,修改被連接的MYSQL的配置文件my.cnf,使此MYSQL不僅僅支持本地IP127.0.0.1的監(jiān)聽(tīng),也支持其他IP的監(jiān)聽(tīng),并重啟Mysql服務(wù),使配置生效。
主要是兩個(gè)配置項(xiàng):skip_networking或者bind_address,為了取消本地監(jiān)聽(tīng),需要在my.cnf中注釋掉關(guān)于這兩項(xiàng)的配置:
正常情況下,mysql占用的3306端口只是在IP 127.0.0.1上監(jiān)聽(tīng),拒絕了其他IP的訪問(wèn)(通過(guò)netstat可以查看到)。取消本地監(jiān)聽(tīng)需要修改 my.cnf 文件:
sudo vim /etc/mysql/my.cnf
//找到如下內(nèi)容,并注釋
bind-address = 127.0.0.1
然后需要重啟 mysql (可最后再重啟)。sudo mysql stop
現(xiàn)在我們?cè)僭囈辉嚕谶h(yuǎn)程機(jī)器192.168.83.56上用如下命令登錄一下192.168.11.12的數(shù)據(jù)庫(kù):mysql -h 192.168.11.12 -u root -p,還是無(wú)法正常登錄。還是報(bào)2003的錯(cuò)。又是什么原因呢?哦,是mysql端口配置是否統(tǒng)一的問(wèn)題!
3,驗(yàn)證A中MYSQL的配置端口是否與B中的一致(都是3306?),如果一致,通過(guò) mysql -h B的ip -u wow --port=3306 -p,來(lái)遠(yuǎn)程連接。
192.168.83.56上的mysql監(jiān)聽(tīng)端口配置的不是3306,是3308,而192.168.11.12的端口是默認(rèn)的3306,二者不匹配,如果僅僅在192.168.83.56上用mysql -h 192.168.11.12 -u root -p來(lái)登錄的話,就是去訪問(wèn)192.168.11.12的3308端口啦,當(dāng)然無(wú)法訪問(wèn)了。我們還需要指定正確的被訪問(wèn)mysql的端口號(hào):mysql -h 192.168.11.12 -u wow --port=3306 -p。
- 詳解遠(yuǎn)程連接Mysql數(shù)據(jù)庫(kù)的問(wèn)題(ERROR 2003 (HY000))
- 遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)注意點(diǎn)記錄
- 遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)注意事項(xiàng)記錄(遠(yuǎn)程連接慢skip-name-resolve)
- NaviCat連接時(shí)提示"不支持遠(yuǎn)程連接的MySql數(shù)據(jù)庫(kù)"解決方法
- MySQL數(shù)據(jù)庫(kù)遠(yuǎn)程連接開(kāi)啟方法
- PHP遠(yuǎn)程連接MYSQL數(shù)據(jù)庫(kù)非常慢的解決方法
相關(guān)文章
linux下perl操作mysql數(shù)據(jù)庫(kù)(需要安裝DBI)
有時(shí)候需要perl操作mysql數(shù)據(jù)庫(kù),可以通過(guò)DBI實(shí)現(xiàn),需要的朋友可以參考下2012-05-05
MySQL中無(wú)GROUP BY情況下直接使用HAVING語(yǔ)句的問(wèn)題探究
這篇文章主要介紹了MySQL中無(wú)GROUP BY情況下直接使用HAVING語(yǔ)句的問(wèn)題探究,同時(shí)探究了該情況下MAX與MIN功能的使用情況,需要的朋友可以參考下2015-05-05
圖文詳解Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間
寫程序的人往往需要分析所寫的SQL語(yǔ)句是否已經(jīng)優(yōu)化過(guò)了,服務(wù)器的響應(yīng)時(shí)間有多快,所以下面這篇文章主要給大家介紹了關(guān)于Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間的相關(guān)資料,需要的朋友可以參考下2021-12-12
MySQL深度分頁(yè)(千萬(wàn)級(jí)數(shù)據(jù)量如何快速分頁(yè))
mysql中查詢字段為null的數(shù)據(jù)navicat問(wèn)題

