解析遠端連線管理其他機器上的MYSQL資料庫

來源:互聯網
上載者:User

在開發過程中,有時候需要遠端連線並管理別的機器上的MYSQL資料庫,在實現的過程中會遇到一系列的問題,現在以遠端存取我自己安裝在Ubuntu上的MYSQL資料為例(連接埠為預設連接埠3306),說明一下配置步驟及每一步中遇到的問題及相應解決方案:
遠端連線管理MYSQL,總體上來說有三步:(A為主操作機器,B為遠程機器(MYSQL安裝在B上,由A訪問B)
1,在被串連的MYSQL中建立專門的遠端連線使用者wow;

2,修改被串連的MYSQL的設定檔my.cnf,使此MYSQL不僅僅支援本地IP127.0.0.1的監聽,也支援其他IP的監聽,並重啟Mysql服務,使配置生效。

3,驗證A中MYSQL的配置連接埠是否與B中的一致(都是3306?),如果一致,通過 mysql -h B的ip -u wow --port=3306 -p,來遠端連線。

下面,就每一步詳細說明一下:
一,在被串連的MYSQL中建立專門的遠端連線使用者wow;
之所以要建立專門的使用者,是因為MYSQL在最初安裝的時候,預設的root帳號以及其他的帳號是僅限於在localhost串連使用的。在遠程機器上即使你用同樣的使用者名稱及密碼登入,都無法正常串連。比如你在遠程機器192.168.83.56上用root帳號登入192.168.11.12機器上的Mysql:
 mysql -h 192.168.11.12 -u root  -p,是無法正常登入的。此時,需要登入192.168.11.12機器,進入mysql中的mysql資料庫查看user表,確認具體的root許可權,特別是它的host是localhost還是你對應的IP,還是%。

解決方案:
A,(在192.168.11.12機器中的MYSQL中建立專門的遠端使用者root或者wow),建立使用者與賦予許可權有兩種方法:
1)改表法。可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 "mysql" 資料庫裡的 "user" 表裡的 "host" 項,把"localhost"改為"%"。“%”的意思就是所有host都可以訪問。
mysql -u root -p vmware mysql>use mysql; mysql>update user set host = '%' where user = 'root';mysql>select host, user from user;
2)授權法。例如,你想wow使用mypassword從任何主機串連到mysql伺服器的話。
GRANT ALL PRIVILEGES ON *.* TO 'wow'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想只允許使用者wow從ip為192.168.83.56的主機串連到192.168.11.12的mysql伺服器,並使用mypassword作為密碼
GRANT ALL PRIVILEGES ON *.* TO 'wow'@'192.168.83.56' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES
第二句表示從mysql資料庫的grant表中重新載入許可權資料。因為MySQL把許可權都放在了cache中,所以在做完更改後需要重新載入。
B,在用GRANT授權法建立完使用者wow並賦予許可權以後,是不是就可以用了?不可以嗎?我們可以簡單驗證一下。先在遠程機器192.168.83.56上 mysql -h 192.168.11.12 -u root  -p,是無法正常登入。報2003的錯:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.11.12' (111)
什麼原因?是賬戶沒有建立成功?使用權限設定問題,還是網路設定防火牆等的問題?還是mysql的其他配置問題沒有解決?
先排除帳號與許可權的問題:在localhost(192.168.11.12)機器中,嘗試用wow使用者進入資料庫。mysql -u wow -p mypassword,報1045的錯:
ERROR 1045 (28000): Access denied for user 'wow'@'localhost' (using password: YES),
為啥呢?怎麼建立的新使用者在本機上都無法登入MYSQL,難道真是使用者wow沒有建立成功?再查看user表,wow確實已經有了啊。一頓糾結,最後找到原因,原來是安裝配置mysql的過程中沒有刪除匿名賬戶,刪除匿名賬戶:
 mysql -u root -p
 mysql>use mysql
 mysql>delete from user where User=' ';
 mysql>quit;
再嘗試    mysql -u wow -p mypassword,wow使用者可以在本機正常登入了,看來帳號wow是沒有問題的,那再試一下遠端連線:
mysql -h 192.168.11.12 -u root  -p,是無法正常登入。還報2003的錯:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.11.12' (111),
查看一下errorCode來排查問題:
[mysql@vvmvcs0 ~]$ perror 111
OS error code 111: Connection refused
那難道是網路的問題?ping xxx.xxx.xxx.12,可以PING通,那機器是沒問題的。看來要看看mysql的設定檔my.cnf中關於遠端連線的配置了,這就進入了我們的第二步。。

2,修改被串連的MYSQL的設定檔my.cnf,使此MYSQL不僅僅支援本地IP127.0.0.1的監聽,也支援其他IP的監聽,並重啟Mysql服務,使配置生效。
主要是兩個配置項:skip_networking或者bind_address,為了取消本地監聽,需要在my.cnf中注釋掉關於這兩項的配置:
正常情況下,mysql佔用的3306連接埠只是在IP 127.0.0.1上監聽,拒絕了其他IP的訪問(通過netstat可以查看到)。取消本地監聽需要修改 my.cnf 檔案:
            sudo vim /etc/mysql/my.cnf
            //找到如下內容,並注釋
            bind-address = 127.0.0.1
            然後需要重啟 mysql (可最後再重啟)。sudo mysql stop
現在我們再試一試,在遠程機器192.168.83.56上用如下命令登入一下192.168.11.12的資料庫:mysql -h 192.168.11.12 -u root  -p,還是無法正常登入。還是報2003的錯。又是什麼原因呢?哦,是mysql連接埠配置是否統一的問題!

3,驗證A中MYSQL的配置連接埠是否與B中的一致(都是3306?),如果一致,通過 mysql -h B的ip -u wow --port=3306 -p,來遠端連線。
192.168.83.56上的mysql監聽連接埠配置的不是3306,是3308,而192.168.11.12的連接埠是預設的3306,二者不匹配,如果僅僅在192.168.83.56上用mysql -h 192.168.11.12 -u root  -p來登入的話,就是去訪問192.168.11.12的3308連接埠啦,當然無法訪問了。我們還需要指定正確的被訪問mysql的連接埠號碼:mysql -h 192.168.11.12 -u wow --port=3306 -p。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.