2008年11月28日 星期五

Recover MySQL Database root password

停止 MySQL 服務
#/etc/init.d/mysql stop

使用以下指令啟動 MySQL 服務
# mysqld_safe --skip-grant-tables &

# mysql mysql
進入 MySQL 的命令提示列後:
UPDATE user SET password=password('new password') where user='root';
FLUSH PRIVILEGES;

2008年11月25日 星期二

UNIX系統中標準輸出入、錯誤的轉向

UNIX系統中,每個 process 有三個特殊的檔案裝置(標準輸入、標準輸出、標準錯誤輸出):
1.標準輸入(standard input),代碼為 0 ,使用 < 或 <<。
2.標準輸出(standard output),代碼為 1 ,使用 > 或 >>。
3.標準錯誤輸出(standard error),代碼為 2 ,使用 2> 或 2>>。

平時在shell中執行指令若不指定標準輸入、標準輸出、標準錯誤輸出,這三個平常是接受終端機(terminal)的輸入及顯示出去,但是可以使用">"和"<"來進行輸出入轉向至一般的檔案或"pipe"來取代這些標準輸出入設備。

我們可將在shell中執行指令視為
command>
>!
1>
1>!
>>
>>!
2>
2>!
2>>
2>>!
>&
>&!
<
<<
裝置或檔案

範例
command < file
將程式中須要由終端機輸入資料,改由編入檔案中,利用轉向輸入。

command > file
將一個指令的輸出結果轉向到一個檔案,如果檔案已經存在,則原檔案內容將被覆蓋。

command >> file
將一個指令的輸出結果轉向到一個檔案,如果檔案已經存在,結果將會附加到檔案的末端。若檔案不存在則將結果存入檔案中。

command >! file
忽略系統警告訊息,強迫將一個指令的輸出結果轉向到一個檔案,如果檔案已經存在,則原檔案內容將被覆蓋。

command >>! file
忽略系統警告訊息,強迫將一個指令的輸出結果轉向到一個檔案,如果檔案已經存在,將會附加到檔案的末端。若檔案不存在則將結果存入檔案中。

command >& file
command > file 2>&1
將一個指令的輸出連錯誤結果轉向到一個檔案,如果檔案已經存在,則原檔案內容將被覆蓋。

command >>& file
將一個指令的輸出連錯誤結果轉向到一個檔案,如果檔案已經存在,將會附加到檔案的末端。若檔案不存在則將結果存入檔案中。

command >&! file
忽略系統警告訊息,強迫將一個指令的輸出連錯誤結果轉向到一個檔案,如果檔案已經存在,則原檔案內容將被覆蓋。

command >>&! file
忽略系統警告訊息,強迫將一個指令的輸出連錯誤結果轉向到一個檔案,如果檔案已經存在,將會附加到檔案的末端。若檔案不存在則將結果存入檔案中。

command 1> file 2>error
將結果存入file,錯誤輸出存入error

2008年11月19日 星期三

PHP 檔案操作筆記

PHP 中 FILE POINT 的值由 0 開始,也就是第一個字元位置是 0,所以如果要讀取檔案中第 10 個字元則:
fseek($fp, 9);
fread($fp, 1);

在PHP function 中使用 FILE POINT若不希望 function 結束後指標的值和傳入時不同則必須事先記錄 FILE POINT 的值或是在function 中設定,參考以下範例

//指定檔案中的某個位置開始讀取某一長度
function ftell_read($fp, $ftell, $length=1)
{
//必須將原來 $fp 指標的位置記錄下來,最後再指回去,否則當函數結束後 $fp 指標位置會是最後的值
$old_ftell = ftell($fp);
fseek($fp, $ftell);
$o = fread($fp, $length);
fseek($fp, $old_ftell);
return $o;
}

可遠端查詢與管理Windows系統的工具-PsTools

Winternals Software 這家公司於 2006 年 7 月被 Microsoft 收購,Winternals 販售的是商用軟體,但這家公司的創始人 Mark Russinovich 與 Bryce Cogswell 還擁有另一家名為 Sysinternals 的公司。Sysinternals 發佈過許多免費軟體工具,其中有些免費軟體應用程式後來成為 Winternals Administrator's Pak 中的元件,其中一個 Sysinternals 程式庫工具就是 PsTools 組合。

Mark 採取 UNIX 處理序程式 -- ps,為這些工具命名。內建的 Windows命令列公用程式,也能執行與PsTools工具的一些功能,不過主要差別在於 PsTools 可供本機或遠端使用,從遠端執行這些工具幾乎跟從本機執行一樣簡單。

PsTools 中只有應用程式而沒有安裝程式。直接將這些應用程式放入已定義路徑的資料夾中,就可以開始使用!

PsTools內總共包含了12種工具:

  • PsExec:執行遠端電腦上的指令
  • PsFile:查詢檔案資詢
  • PsGetSid:查詢SID
  • PsInfo:查詢硬體資訊與開機時間
  • PsKill:終止特定處理程序
  • PsList:查詢系統程序資訊
  • PsLoggedOn:查詢登入狀態
  • PsLogList:查詢特定事件記錄
  • PsPasswd:更改使用者帳號與密碼
  • PsService:檢視和設定系統服務
  • PsShutdown:強化關機功能
  • PsSuspend:暫停執行中的特定程序

下載軟體 http://microsoft.com/technet/sysinternals/utilities/pstools.mspx

參考文件
http://technet.microsoft.com/zh-tw/sysinternals/bb896649.aspx
http://technet.microsoft.com/zh-tw/magazine/cc162490.aspx

2008年11月17日 星期一

MySQL SQL 子查詢應用

MySQL新版本加入子查詢功能後,以往很難處理的SQL,變得簡單容易多了

以下是朋友曾經提出的問題:

資料表 b 裡面,有一個主鍵 id,內容是
id name
------------------------------
11111%01 A
11111%02 B
11111%03 C
22222%01 D
22222%02 E (id 規則是以 % 作為分隔成兩個數字
與另外一個資料表 Join,資料表 a 的主索引鍵是 11111 與 22222 ...





問題 1.如何將 b.id 這個欄位拆成兩個欄位
id1 id2 name
------------------------------
11111 %01 a
.....
問題 2.兩者該如何作 Join?



解法以 MySQL 5為例
問題 1.Answer:
SELECT substring( b.id, 1, locate( '%', b.id ) -1 ) AS b1, substring( b.id, locate( '%', b.id ) ) AS b2, name AS b3 FROM b

問題 2.Answer:
SELECT *
FROM a, (SELECT substring( b.id, 1, locate( '%', b.id ) -1 ) AS b1, substring( b.id, locate( '%', b.id )) AS b2, name AS b3 FROM b ) AS bb
WHERE a.id = bb.b1