AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections

PHP連接遠端mysql server最終造成ERROR 1040 (HY000): Too many connections

最近遇到一個很詭異的問題,原本的PHP系統要擴增AP Server並把MySQL移到一台獨立的Server上運作,原本認為這個task幾乎是沒有風險的,沒想到一接上線,大量的Client端的請求不僅無法消化,MySQL這邊的Connection數目竟然會很快地暴增,進而讓MySQL不斷吐Too many connections的錯誤的訊息。

Continue reading “AP遠端連接MySQL Connection暴增最後造成ERROR 1040 (HY000): Too many connections”

利用SSH Tunnel連線至內部網路

以往要連線回公司的內部網路,或是連線到某些限制只有公司IP可以使用的服務的時候通常是透過VPN來完成。但VPN有些麻煩的是它會利用VPN遠端的閘道取代原本的閘道,這樣一來原本閘道的路由就會斷線,其實有點麻煩,例如:我連到公司的VPN,但公司的網路會擋MSN Messenger的連線,所以連VPN的過程中MSN就會斷線了。(註:當然可以透過VPN會指定通過遠端閘道的路由規則)

所以如果在要連線的地方有一台開放SSH連線的Server的話,其實可以透過SSH Tunnel達到類似VPN的效果,透過SSH Tunnel可以連到遠端主機可以連到的任何主機,其實SSH Tunnel的運作簡單說就是透過SSH作為通道然後利用遠端主機作為跳板來連線。不過缺點是每個要連線的位置都需要設定,所以如果需要連10種服務就必須設定相對多次,數量一多設定起來其實也相當麻煩!

Continue reading “利用SSH Tunnel連線至內部網路”

[memo] Ubuntu Linux 10.04透過apt-get安裝JDownloader

JDownloader是一套基於Java的下載軟體,除了可以支持跨平台運作外,最大的特點就是可以自動下載像是Megauploader、Rapidshare、ZShare、訊6、Bandongo(這個好像壞掉很久了)、…等等,免費空間的檔案。在Windows上只要裝好JRE然後下載下zip檔就可以直接打開,

這邊介紹一下如何用Ubuntu Linux直接利用apt-get安裝下載JDownloader,透過apt來下載最大的好處是apt會幫忙handle安裝其他相依套件及更新程式的工作,一般直接利用官方下載執行檔安裝無法達到上述個功能,操作起來也比較麻煩。其實透過apt安裝其實只要下下面的三行指令,就可以把JDownloader的下載放到apt的repository裡面,然後更新apt的內容後就可以直接安裝JDownloader。

sudo add-apt-repository ppa:jd-team/jdownloader
sudo apt-get update
sudo apt-get install jdownloader

還是稍微說明一下上面指令的意義,第一行是把jdownloader加入到apt-get的套件庫(repository)中。另外可能會遇到類似下面這種gpg錯誤

gpg: 正在請求金鑰 6A68F637 自 hkp 伺服器 keyserver.ubuntu.com
gpg: 金鑰伺服器逾時
gpg: 從金鑰伺服器接收失敗: 金鑰伺服器錯誤

這是因為在加入repository的時候會去ubuntu的keyserver取得金鑰來驗證。但是取得金鑰的過程卻發生錯誤。這可能是因為取得金鑰是走 11371 port 而防火牆沒有開啟該port的連線的緣故。如果有遇到無法取得金鑰的問題可以測試看看該port是否可以聯通。

第二行指令是命令apt去更新repository的套件清單,這樣才能讀取到剛剛加入的repository。

第三行是讓apt去安裝jdownloader。

下載安裝完畢後,只要在指令列下jdownloader,程式就會開始運行。

簡單memo一下嚕。

[超易] 兩行指令搞定 Linux SSH登入免密碼

用ssh登入通常需要密碼,有些情況下SSH不想要輸入密碼,(例如:想要寫script進行ssh遠端操作,一來ssh連線輸入密碼的地方又必須是interactive的沒辦法在script裡面寫密碼,二來是密碼用明碼紀錄在script實在是不大安全)。本篇用最快速的方式介紹SSH免登入的設定方式,本次要介紹的方式就是在Client端產生一組金鑰,然後把把公開金鑰複製到Server的信任名單中。

關鍵知識

其實關鍵點只有下面這兩點(注意,這兩點所說的檔案是放在兩台不同的主機喔):

  • 要連接ssh的client端必須產生一組主機使用者的金鑰組。金鑰組可以在~/.ssh中找到,檔名是id_rsa(私鑰)、id_rsa.pub(公鑰)。(ps. rsa是加密演算法的名子,也可能利用其他的演算法對金鑰加密,如dsa等)。如果沒有產生金鑰組則必須產生一組,方法詳見Step1。一般來說,公鑰的檔名會像是這樣:

~/.ssh/id_rsa.pub

  • 把公鑰複製到Server端的信任名單中。一般來說會放在下面檔案中:

~/.ssh/authorized_keys

後面的範例是從金鑰產生到匯入信任清單的示範,如果有需要的話可以參考。

Step 1.  在Client端產生金鑰組

使用下面指令就可以產生金鑰,所有設定都用預設的就可以了,不需要特別設置。特別注意的是”Enter passphrase”的地方請直接壓enter,這樣才能不用輸入密碼。

ssh-keygen -t rsa

金鑰組檔案會預設放在~/.ssh/id_rsa是私鑰(private key)、~/.ssh/id_rsa.pub是公鑰(public key)。金鑰組務必保存好權限不要開太大,否則會造成安全性的問題。

2. 將公鑰的內容放置在Server的信任清單中

只要在client端下下面這個指令,這樣金鑰就會輸入進Server的信任清單中了。實在是很簡單吧。

cat ~/.ssh/id_rsa.pub | ssh server-user@server-host “cat >> ~/.ssh/authorized_keys”

另外特別還是要補充一下,因為金鑰如果可供寫入的話十分危險。所以許多人會將 ~/.ssh裡面的id_rsa.pub id_rsa authorized_keys三個檔案設定成唯獨,所以如果不成功的話,可能是server端的user把authorized_keys設定成唯獨。所以可以用下面這個指令先把authorized_keys檔案的讀寫先打開再下Step2的命令:

ssh server-user@server-host “chmod 600 ~/.ssh/authorized_keys”

設定完畢後記得再把權限改回來

ssh server-user@server-host “chmod 400 ~/.ssh/authorized_keys”