唉。下麵是我花了不知道多少個小時踩過的所有坑總結出來的血淚史,希望能幫你們少踩一些坑吧,正常來講一步一步下來就不會出現任何問題了。 背景 用的是百度雲的雲伺服器(其他雲伺服器同理),系統是Ubuntu 20.04 LTS,Mysql版本8.0+,需求是在Windows上開發,可以隨時遠程連接讀寫服務 ...
唉。下麵是我花了不知道多少個小時踩過的所有坑總結出來的血淚史,希望能幫你們少踩一些坑吧,正常來講一步一步下來就不會出現任何問題了。
背景
用的是百度雲的雲伺服器(其他雲伺服器同理),系統是Ubuntu 20.04 LTS,Mysql版本8.0+,需求是在Windows上開發,可以隨時遠程連接讀寫伺服器上的Mysql
建立到伺服器的遠程連接
用ssh客戶端或者雲伺服器廠家提供的網頁版控制台都行,只要你能連上伺服器就行
順便私心推薦一個好看又好用的ssh客戶端:NextSSH
用apt-get安裝mysql
先更新一下apt倉庫:
sudo apt-get update
順便說一下,因為不知道你們用的都是什麼賬戶,我也搞不清楚哪些指令許可權要求比較高,所以我所有指令都加sudo
了,這樣不管是誰複製粘貼都能直接用,不會出現許可權問題。
然後安裝mysql-server:
sudo apt-get install mysql-server -y
到這一步其實mysql就已經安完了並且自動啟動了,可以看一下:
sudo service mysql status
設置root密碼
此時mysql的root賬戶沒有設置密碼,可以直接用mysql
指令登錄:
設置一下root的密碼(mynewpassword
部分改成你自己要設置的密碼):
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'mynewpassword';
退出,輸入mysql
指令發現不能直接登錄了:
目前為止可以直接在伺服器上用mysql了。
編輯配置文件監聽遠程連接
預設情況下,MySQL 資料庫僅監聽本地連接,如果想讓外網遠程連接到資料庫,我們需要修改配置文件,讓 MySQL 可以監聽遠程固定 ip 或者監聽所有遠程 ip。
這裡需要使用一個命令行文本編輯器,我用的vim所以就教一下vim,你們要是會nano或者別的自然知道該怎麼弄,要是聽不懂就照我的來。安裝vim:
sudo apt-get install vim -y
然後用vim打開mysqld.cnf
配置文件:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到bind-address = 127.0.0.1
這一行:
這個值是127.0.0.1
的時候只監聽本地連接,改成0.0.0.0
可以監聽所有連接,或者也可以改成僅允許指定ip連接都可以。
現在vim是閱讀模式,按一下i
進入編輯模式,然後用上下左右鍵定位到這行(最下麵顯示INSERT的時候表明處於編輯模式,按Esc可退出返回到閱讀模式):
改完之後按Esc退出編輯模式,然後輸入:wq
保存退出。(若輸入:q
則退出但不保存)
重啟mysql service使剛纔的修改生效:
sudo service mysql restart
允許root賬號使用遠程連接
mysql預設只允許root賬號在本地使用,需要修改一下允許遠程使用root賬號(沒試過其他賬號的情況,但原理一致)。先登錄mysql:
mysql -u root -p
輸入密碼,登錄。
然後選擇mysql
資料庫:
use mysql;
查看賬號的主機許可權:
select user, host from user;
host
處為localhost
時只允許本地使用,改成%
即可遠程使用:
update user set host='%' where user='root';
退出mysql。
檢查ubuntu自帶的防火牆狀態
sudo ufw status
如果是inactive
說明防火牆沒開,那就不用管了。防火牆是幹嘛的呢,我自己的理解就是,如果開了防火牆,那伺服器上所有埠都是預設禁止連接的,只有你允許的埠才允許連接,類似於這種:
所以如果防火牆開了,那要麼把防火牆直接關了:
sudo ufw disable
要麼添加一條規則讓防火牆放行3306埠(mysql的預設埠):
sudo ufw allow 3306
檢查雲伺服器廠商的防火牆狀態
打開雲伺服器的後臺管理頁面,找到防火牆:
雲伺服器廠商預設只開啟幾個最常用的埠,其他埠都是預設關閉的,所以也要在這裡添加一條規則放行3306埠:
測試連接
隨便找個資料庫管理的軟體測試一下:
就連上了。常見的問題應該都提到了,如果還是連不上那你們再想想辦法吧。