標籤:
不想浪費大家時間,我這文章記錄了我在vagrant上架的mysql遠端連線不上的問題,不過我在整理時發現這個下面這個連結,如果我一開始能找到這個我就不會繞那麼多彎了。不想看我是怎麼一步步調錯過程的請直接看下面地址,我也將內容複寫到了地址下面了。自己調試過程有點長,當記錄吧,有興趣的可以看下,也許對你有協助http://www.jb51.net/article/33813.htmvim /etc/my.cnf注釋這一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1
儲存退出。
mysql -uroot -p123456
為需要遠程登入的使用者賦予許可權:
複製代碼代碼如下:
mysql> GRANT ALL PRIVILEGES ON *.* TO [email protected]"%" IDENTIFIED BY "123456";
mysql> flush privileges;
遠程登入命令:mysql -h 223.4.92.130 -uroot -p(-h後跟的是要登入主機的ip地址) 我的實現操作調試過程上面看懂瞭解決問題了可以下面的不用看。 我的實際情況說明用第三方的軟體去登陸伺服器上的資料庫mysq,第三軟體為navicat 環境:mac os 10.11.5 vagrant centos7 box是德國的(語言找過來了應該影響不大) lnmp 一鍵安裝版本 原因:要將資料庫的結構同步到另一個資料庫 實現方法用navicat 這個軟體進行(資料結構同步自行搜尋) 問題:安裝並破解navicat 後一直登陸不了mysql 提示不能遠端連線 (mac下的破解過過程自己搜尋) 錯誤提示: 首先我的目標ip地址是192.168.10.10(本地的測試伺服器)使用vagrant 架設,安裝了centos7. navicat 的串連資訊 這樣填寫提示串連不上,192.168.10.10不能串連?我再試了下ssh串連 得到的提示是192.168.10.10這個mysql沒有遠端連線許可權。(ps:我的是mac環境用過Sequel Pro.app 的ssh 串連是沒有問題的當時3306連接埠我都沒有開啟呢) 是不是centos7的連接埠沒有開呢?
sudo firewall-cmd --query-port=3306/tcp //永久開放3306連接埠sudo firewall-cmd —reload //重啟防火牆 重新用navicat 的ssh 串連方法嘗試,結果是跟上面提示一樣,串連失敗192.168.10.10不允許遠端連線直接用navicat 常規串連試下(常規指直接用mysql的ip 帳號密碼登入)提示改變了 連接埠開啟後提示是有改變的。看來還得繼續解決 前面有提示到192.168.10.10沒有遠端連線許可權是不是mysql的帳號不允許遠端連線呢?百度 google了下mysql 遠端連線.常規的幾種方法(自行尋找下吧)1.修改mysql 內的mysql資料庫 user表下, root 帳號下host為localhost 改為% 網上多數都教用命令列去修改(ps:直接phpmyadmin修不就好了嗎?為什麼非要用命令列修改,後來才知道,不過還是被坑了一把後面說)#mysql -uroot -p填寫密碼use mysqlupdate user set host = ‘%‘ where user = ‘root‘;ERROR 1062 (23000): Duplicate entry ‘%-root‘ for key ‘PRIMARY’ //這是報錯嗎?select host, user from user; //查看下資料表 報錯但,這個修改算是成功了。 再一次嘗試用navicat 做常規串連 結果是再來一次ssh 結果是 第二種方法:授權法GRANT ALL PRIVILEGES ON *.* TO ‘使用者名稱‘@‘%‘ IDENTIFIED BY ‘使用者密碼‘ WITH GRANT OPTION; //增加一個帳號,任何ip都可以串連這到個mysqlGRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘192.168.10.10‘ IDENTIFIED BY ‘mypassword‘ WITH GRANT OPTION; //設定root使用者可以通過192.168.10.10這個ip登陸 ip地址自己填寫好吧我就填寫了ip地址的方法。還是失敗。 第三種方法:修改my.cnf 將遠程開啟 //mysql 5.0版前後有區別,一般網上找到的修改是5.0後的修改方法。注釋這一行:bind-address=127.0.0.1 ==> #bind-address=127.0.0.1//5.0版本前是找不到bind-address的 那就注釋掉 #skip-networking //我本地本來就是注釋了的。 因為常規串連時報的是192.168.10.1這個vagrant 的橋接網關吧(ps:我是這樣理解的有錯大家指出來),沒有遠端連線mysql的許可權?用telnet 192.168.10.10 3306 得到的也是192.168.10.1沒有mysql 遠端連線許可權的報錯 為什麼是192.168.10.1 是因為vagrant的環境有問題嗎?一直都是這樣想後來又是各種試吧,但一直不行。最後看到百度經驗裡的一篇文章,文章上的mysql是在windowns上的,也是修改ip地址允許的方法。死馬當活馬醫吧,照做一次,當時root 的host改成了%了 ,我就以為是192.168.10.1這個真的沒有許可權遠程嗎?所以再加了一個192.168.10.1這個ip上去 ,不同的地方是下面這個命令flush privileges; //重新載入許可權,讓修改的許可權生效//重新載入許可權。。。。對好多文章都沒有加入重新載入許可權這一條,我重啟linux後mysql 也沒有給我重新載入許可權(當時沒有去試重新啟動mysql,有興趣的可以自行試下)妹的搞了一大圈就是因為修改了許可權沒有重新載入,我們這種不太懂mysql內操作的怎麼辦。 然後呢,打算自己總結下問題寫這個文章吧,想將問題重現一次來做測試,將root 允許192.168.10.1這個刪除了嘗試,navicat還是可以串連,再刪除了任何ip都能訪問那一條設定還是能用navicat常規串連,當時就快瘋了,為什嗎?最後再將root host %改回localhost flush privileges; (ps:一定要重設下配置好的許可權) 問題終於重現了。 最後吐槽一下百度 firewall-cmd 關閉連接埠的方法,出來的結果不是開連接埠呢就是直接將firewall這個防火牆關了,去google 用相同的關鍵字一查第一條就是我要找的結果 sudo firewall-cmd --permanent --remove-port=3306/tcp //關閉centos7 3306這個連接埠當然不要忘記要重啟防火牆生效哦sudo firewall-cmd --reload
mysql 不能遠端連線