對於管理 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 官方網站
一般上要操作 Excel 或 Word 檔案也要用 COM 來做,最近發現可以用一個 PEAR 元件 — Spreadsheet_Excel_writer 來完成,而完全不需要借助 COM 元件。它會產生 Excel 5 (BIFF5) 的格式,所有這個版本的功能也可實現。
詳細的使用方法可以 PEAR :: Manual :: Spreadsheet_Excel_Writer 找到。
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" 分開。
如果 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 即可。
需要用 SSH 管理遠端伺服器的朋友相信也使用過 PuTTY,它是相當出名的 open source SSH client 軟件,而 PortaPuTTY 則是流動版的 PuTTY,可以放在 USB Flash Disk 這類流動裝置內使用。
PortaPuTTY 會將所有的資料儲存在 USB Disk,而不會像 PuTTY 一樣將資料儲存在 Windows registry 裡面。
PortaPuTTY: http://socialistsushi.com/portaputty
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 檔案後,將它儲存即可。
現在我的伺服器數量慢慢增加,管理上也跟以往有了改變,很多時就是為了監察伺服器的運作,家中的電腦幾乎是長開。昨天寫了一個小程式,可以產生簡單的伺服器資訊,用手機便可隨時隨地監察所有伺服器的運作。
以前有想過用 PPC 做流通上網,但 PPC 的體積比電話大得多,當沒有拿公事包外出的話,攜帶上很麻煩,因為我習慣將手機放在褲袋 (真擔心手機會爆炸)。所以到目前為止,對我來說流動上網還是用手機較方便。
這個是我日常用作備份 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
預期在本年 4 月 20 日推出的 Ubuntu Dapper Drake,經過 Ubuntu 開發社群的討論後,決定會延遲至 6 月 1 日推出,詳細內容可參閱 release schedule。
雖然在 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
昨天升級 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 支援的 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
在一般情況下 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 分割區,馬上會想起的工具軟件相信會是 Partition Magic。但 Partition Magic 是收費軟件,如果想要免費軟件作為代替品,可以考慮 Partition Logic。
Partition Logic 是免費的硬碟分割及資料管理軟件,可以建立、刪除、格式化、重組、resize、移動分割區及修改分割區的屬性。Partition Logic 不需要倚賴其他作業系統,因為它已內建 Visopsys 作業系統,只要燒錄在 CD 上開機即可使用。
在兩台主機間傳送檔案時,用 ftp 指令很方便,但另一個較為安全的做法是透過 SSH 來傳送,而且使用上十分簡單 ,只要使用 scp 指令則可。
假如你要把 /home/samtang/ 目錄下所有 .php 副檔名的檔案,傳送到主機 192.168.1.100 的 /var/www/ 下面,登入名稱是 user1,可以輸入:
scp /home/samtang/*.php user1@192.168.1.100:/var/www/
然後系統會詢問你連接密碼,輸入正確密碼後就可以傳送了,但當然用來傳送的帳號需要有合法權限在遠端目錄寫入資料。