Recent Articles / Archives

監察 MySQL 工具: mytop

對於管理 Unix Like 的系統,很多時也要用 top 來進行監察,而 mytop 就是類似 top 的 MySQL 監察工具。執行 mytop 後,它會每隔幾秒更新一次,而且也可以針對性地監察某一個資料庫。

mytop 支援 MySQL 3.22.x, 3.23.x 及 4.x server,而安裝的系統需要有 Perl, DBI 及 Term::ReadKey,如安裝有 Term::ANSIColor,報告更可以有不同顏色。而在 Debian 下安裝就非常簡單,只需輸入以下指令即可:

# apt-get install mytop

安裝好 mytop 後,在執行 mytop 時需要給它 MySQL 的用戶名稱及密碼,例如用戶名稱是 root,密碼是 123456,可以輸入:

# mytop -u root -p 123456

mytop 還可以指定要監察的資料庫,就是用 -d 選項,操作如下:

# mytop -u root -p 123456 -d mydb_name

mytop 官方網站

PHP 用 PEAR 元件編輯 Excel

一般上要操作 Excel 或 Word 檔案也要用 COM 來做,最近發現可以用一個 PEAR 元件 — Spreadsheet_Excel_writer 來完成,而完全不需要借助 COM 元件。它會產生 Excel 5 (BIFF5) 的格式,所有這個版本的功能也可實現。

詳細的使用方法可以 PEAR :: Manual :: Spreadsheet_Excel_Writer 找到。

March 28, 2006 · 程式設計分享 · No Comments Yet

字串處理工具: Awk

Awk 是一種字串處理工具,不論在指令模式或者撰寫 Shell Script 時也十分有用,以下是 Awk 的使用例子:

# awk '{ print }' /etc/passwd

以上指令將 /etc/passwd 作為 awk 的輸入檔案,並會將 /etc/passwd 檔案的內容逐行輸出。但這樣使用 awk 看不出它的作用,以下是另一個例子:

# awk -F":" '{ print $1 }' /etc/passwd

以上例子使用 awk 時加入了 -F 選項,並指定每一行用 ":" 作為分隔字串。而 print $1 的意思是印出分隔後的第一組字串。輸出結果是系統所有帳號的使用者名稱。

如果將 awk 用管線 (pipe) 和其他指令配合的話,作用會更加大,例如用 "ls -l /etc" 的話,會將/etc 的內容及其他檔案/目錄資料印出,但我不想看建立日期及檔案體積等資訊,只要看檔案/目錄及其權限,可以這樣做:

# ls -l /etc | awk '{print $1 "\t" $9}'

因為 awk 預設會用 tab 或空白字串作為分隔,所以今次不用 -F 選擇。以上會將 "ls -l /etc" 的輸出作為 awk 的輸入內容,而會印出分隔後第一及第九組字串,兩個字串中間會用 "\t" 分開。

March 26, 2006 · Linux / BSD 筆記 · Comments (1)

開啟 MySQL query cache

如果 MySQL server 是非常繁忙,可以開啟 query cache 以加速回應時間,開啟方法可以在 my.cnf 裡面加入以下項目: (Redhat 下面是 /etc/my.cnf;Debian 是在 etc/mysql/my.cnf)

query_cache_size = 268435456
query_cache_type = 1
query_cache_limit = 1048576

以上語法的設定裡面,query_cache_size 是分配 256MB 記憶體空間給 query cache;query_cache_type 設定成 1,是給所有的查詢做 cache;query_cache_limit 是指定個別的查詢語句 1KB 的記憶體空間。

這些數值可根據自己的需要作出更改,設定及存檔後,重新啟動 MySQL 即可。

March 25, 2006 · 程式設計分享 · Comments (1)

流動版 PuTTY: PortaPuTTY

需要用 SSH 管理遠端伺服器的朋友相信也使用過 PuTTY,它是相當出名的 open source SSH client 軟件,而 PortaPuTTY 則是流動版的 PuTTY,可以放在 USB Flash Disk 這類流動裝置內使用。

PortaPuTTY 會將所有的資料儲存在 USB Disk,而不會像 PuTTY 一樣將資料儲存在 Windows registry 裡面。

PortaPuTTY: http://socialistsushi.com/portaputty

March 24, 2006 · 實用軟件推薦 · No Comments Yet


Unix Crontab 簡介

Crontab 是在 Unix Like 系統下設定排程自動執行的工具,最常用到的地方是備份。而 crontab 有 4 個不同的參數,作用分別是:

crontab -e 編輯 crontab 檔案,如果檔案不存在則會自動建立。
crontab -l 顯示 crontab 檔案內容。
crontab -r 刪除 crontab 檔案。
crontab -v 顯示上一次編輯 crontab 的時間,但不是所有系統適用。

編輯 crontab
在指令模式輸入 "crontab -e" 便會用預設編輯器打開 crontab 檔案,排程的格式為每一行一個排程,而每一個排程的內容會是:

分鐘   小時   日   月   星期   執行指令

以下例子會在每晚零時零分自動執行 /root/sync_time.sh,而因為不想儲存輸出結果,所以將輸出放到 /dev/null。

00 00 * * * /root/sync_time.sh > /dev/null 2>&2

當編輯好 crontab 檔案後,將它儲存即可。

March 23, 2006 · Linux / BSD 筆記 · No Comments Yet

手機監察伺服器運作

現在我的伺服器數量慢慢增加,管理上也跟以往有了改變,很多時就是為了監察伺服器的運作,家中的電腦幾乎是長開。昨天寫了一個小程式,可以產生簡單的伺服器資訊,用手機便可隨時隨地監察所有伺服器的運作。

以前有想過用 PPC 做流通上網,但 PPC 的體積比電話大得多,當沒有拿公事包外出的話,攜帶上很麻煩,因為我習慣將手機放在褲袋 (真擔心手機會爆炸)。所以到目前為止,對我來說流動上網還是用手機較方便。

March 23, 2006 · 工作日誌 · Comments (2)

MySQL 備份 shell script

這個是我日常用作備份 MySQL database 的 shell script,因為以前是直接將所有資料庫匯出成一個 sql 檔,當其中一個資料庫有問題時,因為沒問題的資料庫不想有改動,要復原資料很麻煩。今天改了一下,它會用 mysqldump 將所有資料庫匯出成獨立 sql 備份檔,然後用 gzip 壓縮成 .gz 檔案。程式會儲存 5 天的備份,當有新備份時,最舊的備份會自動刪除。

使用方法:
修改 db_user, db_passwd 及 db_host 修改成你的 mysql 登入資料,所使用的用戶權限需要與 mysql root 相同。backup_dir 修改成你希望儲存備份的目錄。

最後只要把程式加入 crontab 排程自動執行即可。

檔案下載: mysql_backup.sh

Ubuntu Dapper 延遲 6 週推出

預期在本年 4 月 20 日推出的 Ubuntu Dapper Drake,經過 Ubuntu 開發社群的討論後,決定會延遲至 6 月 1 日推出,詳細內容可參閱 release schedule

March 21, 2006 · Linux / BSD 筆記 · No Comments Yet

編譯及安裝 MySQL

雖然在 Unix Like 環境已經有很多預先編譯好的軟件,例如 rpm 及 deb,但我較喜歡使用編譯的方法安裝軟件,尤其是 server,以下是編譯及安裝 MySQL 4.1.18 的方法:

1. 到 MySQL Mirror 下載 source code 並儲存到主機上。

2. 執行以下指令:

# tar zxvf mysql-4.1.18.tar.gz
# cd mysql-4.1.18
# ./configure –prefix=/usr/local/mysql
# make
# make install
# scripts/mysql_install_db

3. MySQL 已經安裝完成,現在需要改變 mysql 目錄的 owner:

# chown -R mysql.mysql /usr/local/mysql

4. 執行以上指令後,便可以啟動 MySQL 並更改密碼:

# /usr/local/mysql/share/mysql/mysql.server start
# /usr/local/mysql/bin/mysql mysql

這時應該進入了 MySQL 內,執行以入 SQL 語句更改密碼

mysql> update user set password=password(’new_password’) where user=’root’;
mysql> FLUSH PRIVILEGES;
mysql> exit;

5. 更改密碼後,最後便要使 MySQL 在開機時自動啟動,以下是 Redhat 及 Debian 的做法。
Redhat:

# cp /usr/local/mysql/share/mysql/mysql.server /etc/rc.d/init.d/mysqld
# ntsysv # 選擇 mysqld 並按 Save

Debian:

# cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
# ln -s /etc/init.d/mysqld /etc/rc3.d/S99mysqld
# ln -s /etc/init.d/mysqld /etc/rc5.d/S99mysqld
ln -s /etc/init.d/mysqld /etc/rc0.d/K01mysqld

March 20, 2006 · Linux / BSD 筆記 · No Comments Yet


"Argument list too long" 問題

昨天升級 Email Server 的 SquirrelMail,當我將舊版本 SquirrelMail 下面的 data 目錄資料複製到新版本時,出現了 "Argument list too long",然後找了找,發現原來在 Linux 下用 cp, mv, rm 這些指令時,如果輸入的檔案數目太多會出現 "Argument list too long" 錯誤。

因為在 Linux Kernel 內對 command-line arguments 限製了記億體的使用,就例如在一個目錄下有很多檔案,如果用 "cp * /home/user/",那便會出現這個問題,以下列出兩個解決辦法:

1. 分開多個指令執行: 可以將檔案分成幾個指令執行,例如:

cp [0-9]* /path/to/
cp [a-l]* /path/to/
cp [m-z]* /path/to/

2. 使用 find 指令: 另一個方法是用 find 指令,可以一句便完成:

find /file_from/* -type f -name ‘*’ -exec cp {} /path/to/. \;

以上指令會將 /file_from/ 目錄下的所有檔案覆製到 /path/to/ 下面。

P.S. 如果想修改 kernel 以解決問題,可以開啟在 kernel source 下面的 include/linux/binfmts.h 檔案,在開頭的位置裡面有一行 "#define MAX_ARG_PAGES 32",將 32 改成更大的數值,例如 64 或 128,然後重新編譯 kernel。

Apache 設定網站不同 php 選項

Apache 支援的 Virtual Host 功能十分實用,可以在一台 web server 架設多個網站。在一般的情況下,php.ini 的設定會在所有的 virtual host 上面生效,但有些情況我們需要給予特定網站不同的設定,例如在 php.ini 開啟了 safe_mode,但其中一個網站的 php 程式不支援 safe_mode。

以下例子裡面,主機的 php.ini 已經開啟了 safe_mode,而現在會將 mydomain.com 設定成關閉 safe_mode:

1. 開啟 httpd.conf。
2. 找出 mydomain.com 所使用的 virtual host 段落。
3. 在段落裡面加上: php_admin_flag safe_mode off
4. 儲存後重新啟動 apache 即可。

修改其他 php.ini 選項也可以,只要使用以下格式即可:
php_admin_flag 選項名稱 value

March 17, 2006 · 程式設計分享 · Comments (1)

文字模式下執行 PHP

在一般情況下 PHP 是用在網站上,而有些情況需要在文字模式下執行,例如用 PHP 寫 shell script 或需要用 crontab 排程執行等。而在文字模式下執行 PHP 也很方便,假設 PHP 的安裝目錄是 /usr/local/php ,那麼就可以用以下指令執行:

/usr/local/php/bin/php -q shell_script.php

如果你跟我一樣懶打字,覺得 /usr/local/php/bin/php 很長的話,可以將 /usr/local/php/bin/php 覆製到 /usr/bin/ 目錄下:

cp /usr/local/php/bin/php /usr/bin/php
php -q shell_script.php # 現在可以這樣執行

而另一個方法是用其他 shell script 的方法,就是在 PHP 程式的第一行加上 "#!/usr/local/php/bin/php -q",以及將程式加上可執行的權限:

chmod +x shell_script.php
./shell_script.php # 可以像其他 shell script 般執行

還有一個方法是用 Lynx 這類文字模式下的瀏覽器,用瀏覽網頁的方式執行。

Resize 硬碟分割區工具

如果要在儲存了資料的硬碟上新增分割區或 resize 分割區,馬上會想起的工具軟件相信會是 Partition Magic。但 Partition Magic 是收費軟件,如果想要免費軟件作為代替品,可以考慮 Partition Logic。

Partition Logic 是免費的硬碟分割及資料管理軟件,可以建立、刪除、格式化、重組、resize、移動分割區及修改分割區的屬性。Partition Logic 不需要倚賴其他作業系統,因為它已內建 Visopsys 作業系統,只要燒錄在 CD 上開機即可使用。

March 14, 2006 · 實用軟件推薦 · Comments (2)

透過 SSH 傳送檔案

在兩台主機間傳送檔案時,用 ftp 指令很方便,但另一個較為安全的做法是透過 SSH 來傳送,而且使用上十分簡單 ,只要使用 scp 指令則可。

假如你要把 /home/samtang/ 目錄下所有 .php 副檔名的檔案,傳送到主機 192.168.1.100 的 /var/www/ 下面,登入名稱是 user1,可以輸入:

scp /home/samtang/*.php user1@192.168.1.100:/var/www/

然後系統會詢問你連接密碼,輸入正確密碼後就可以傳送了,但當然用來傳送的帳號需要有合法權限在遠端目錄寫入資料。

March 13, 2006 · Linux / BSD 筆記 · Comments (5)


  Next Page »