不算是給阿里雲打廣告吧,因為被阿里雲的“雲伺服器ECS” 和 “輕量應用伺服器”搞的很蛋疼。很多年前,阿里雲的學生機“雲翼計劃”預設就只有“雲伺服器ECS”,所以上個月我準備去買一年的學生機的時候,幾乎就選擇性忽略框框中的內容,選擇系統映象就直接下單了。
買完之後開開心心安裝 node nginx mysql docker 各種之後,等到我需要遠端連線mysql的時候,花了我幾個小時時間踩了一個坑。
輕量應用伺服器MySQL遠端連線踩坑
1. 登入伺服器
我沒有去研究過伺服器的什麼linux ssh免密登入,因為我對linux不是太熟悉,介紹免密登入的部落格看的我有點頭大。我採用一種比較簡單粗暴並且又能偷懶的方式來“免密登入”。
簡單說就是 明文、指令碼登入 ,即把ssh 命令以及密碼寫入指令碼里,要登入就執行指令碼就行了。
touch aliyun.sh
vi aliyun.sh
複製程式碼
拷貝以下內容, 記得替換你自己的ip和密碼:
#!/usr/bin/expect
set timeout 10
spawn ssh root@xxx.xx.xx.xxx
expect {
"*password:" {send "password
"}
}
interact
複製程式碼
每次需要登入伺服器的時候就 ./aliyun.sh
就行了。檔案不洩露,一般也安全的吧。雖然辦法土,但還算是節約了幾秒鐘的時間,主要還是為了偷懶。(為了安全起見,公司的伺服器就別這麼搞了,不過一般公司伺服器也要安全的話 也會用pin + token來保證。 who cares ?)
2. 安裝mysql 相關
檢視是否安裝Mysql
sudo netstat -tap | grep mysql
複製程式碼
如果為空則沒有安裝,進行安裝:
sudo apt-get install mysql-server mysql-client
複製程式碼
根據提示輸入密碼,然後確認
Mysql 連線測試
mysql -u root -h localhost -p
複製程式碼
啟動,停止,重啟 Mysql命令
sudo service mysql start
sudo service mysql stop
sudo service mysql restart
複製程式碼
Ubuntu 安裝 mysql 忘記初始密碼解決方法
//開啟這個檔案 /etc/mysql/debian.cnf
//檢視預設分配的密碼
[client]
host = localhost
user = debian-sys-maint
password = eyPDN7kavhmjCZUn (記住這個密碼)
socket = [表情]ar/run/mysqld/mysqld.sock
複製程式碼
輸入命令進入mysql修改使用者密碼
// 輸入命令後把上面的密碼貼上進去
mysql -u debian-sys-maint -p
//進入到mysql介面厚修改密碼
update mysql.user set authentication_string=password(`newpassword`) where user=`root`;
//都要使用重新整理許可權列表
flush privileges;
複製程式碼
3. 終於開始要遠端連線mysql了…
如果是完全按照上面的操作,直接開啟 navicat ,輸入ip、port 這些資訊 test connect 的時候一定會報下面的這種錯誤的:
2003 - Can`t connect to MySQL server on `xxx.xx.xx.xxx` (61 "Connection refused")
複製程式碼
好的,我知道了,那我開一下防火牆埠,設定一個mysql的賬號用來遠端連線吧。這些網上基本都有很詳細的教程,我簡單列一下命令:(主要也是給我自己偷懶,知道大概的步驟是怎麼樣的,但是命令太長,記不住,浪費幾秒鐘。)
sudo su
// 進入mysql
mysql -u root -p
// 新建一個有遠端連線許可權的賬號
//$username表示使用者名稱,%表示所有的電腦都可以連線,也可以設定某個ip地址執行連線,$password表示密碼
GRANT ALL PRIVILEGES ON *.* TO `$username`@`%` IDENTIFIED BY `$password` WITH GRANT OPTION;
flush privileges;
// 檢視所有使用者和許可權
SELECT DISTINCT CONCAT(`User: ```,user,```@```,host,```;`) AS query FROM mysql.user;
exit;
// 修改mysql配置
vim /etc/mysql/mysql.conf.d/mysqld.cnf // 如果你是按照我的方式安裝的mysql, bind-address 這一行是在這個檔案
#bind-address = 127.0.0.1 這一行註釋
// 重啟mysql
/etc/init.d/mysql restart
複製程式碼
這個時候 telnet ip 3306
還不通,說明防火牆 3306埠沒有開。按照網上所介紹的阿里雲安全組規則去開啟埠,具體也不介紹了,網上很多,看圖也能明白。
舒服了,終於寫完了,test connect 一下,報錯:
MYSQL ERROR 2003 (HY000): Can`t connect to MySQL server on `xxx.xxx.xx.xxx`
複製程式碼
啊,不應該啊,我都是按照流程來的,於是重新看了一遍,發現沒有漏掉的、也沒有不對的。很鬱悶啊,覺得自己的操作完全沒有問題,大家都說配置一下安全組就好了,一定是阿里雲想坑我!
接著排查,但都正常。
ps -ef | grep mysql
netstat -tlanp | grep 3306
複製程式碼
…
各種折騰中…
…
下面就是我想說的坑點了: 我發現我買的竟然是 輕量應用伺服器。。。 講道理我也不知道這個是個什麼鬼,後來就發現了
原來左側是由切換的。後來發現了輕量應用伺服器的防火牆配置:
這裡配置了 3306 之後, telnet ip 3306
就通了,記得應用型別要選 MYSQL
,接著 test connect 就綠了。
哇! 所以我到底是被誰坑了!
坑都被坑了之我就看一下有沒有虧
輕量應用伺服器優勢,我只看見了 40g ssd,其他的我也不管,大概是沒有虧?
總結
我其實的確是想吐槽的,我一直以為我買的是普通的雲伺服器,網上搜遠端連線mysql的時候,幾乎是沒有關於輕量應用伺服器滴,這就又引導我到了“李鬼”那裡。看了一下阿里雲的論壇,似乎現在也不能將我這個一年的輕量應用伺服器換成ECS了。算了算了,也行吧,反正也能用,我也不挑的。
還有啊,你們家阿里雲的廣告啊,都貼到我們公司門口了!我們家雲不要面子的啊!啊西八,我一定會貼回來的。
所以,最終還是我自己坑的我自己 ToT… 菜。