2010年9月2日 星期四

Windows排程關閉程式

Windows排程好像都是拿來開啟程式用的,但能不能將已經開啟的程式給關了呢
其實有的,可以試一下以下的指令


taskkill

以下是TASKKILL /? 的說明

C:\Documents and Settings\Administrator>taskkill /?

TASKKILL [/S system [/U username [/P [password]]]]
         { [/FI filter] [/PID processid | /IM imagename] } [/F] [/T]

描述:
    這個命令列工具可以用來結束一個或數個處理程序。
    可以依處理程序識別碼或影像名稱來清除處理程序。

參數清單:
    /S system :指定要連線的遠端系統。

    /U [domain\]user :指定要執行命令的使用者內容。

    /P [password] :指定提供的使用者內容的密碼。如果省略的話請提示輸入。

    /F  :指定要強制中止的處理程序。

    /FI filter :顯示符合篩選器指定條件的工作組。

    /PID [process id] :指定要中止的處理程序的PID。

    /IM [image name] :指定要中止的處理程序的影像名稱。萬用字元 '*'可以用來指定所有影像名稱。

    /T :Tree kill: 終止指定的處理程序及由它啟動的任何子處理程序。

    /? :顯示這個說明/使用方法。


篩選器:
    篩選器名稱:正確的操作器:正確值
    ----------:------------:--------------
    STATUS:eq, ne:RUNNING : NOT RESPONDING
    IMAGENAME:eq, ne:影像名稱
    PID:eq, ne, gt, lt, ge, le:PID 值
    SESSION:eq, ne, gt, lt, ge, le:工作階段數目
    CPUTIME:eq, ne, gt, lt, ge, le:CPU 的時間格式是 hh:mm:ss。hh - 小時,mm - 分鐘, ss - 秒數
    MEMUSAGE:eq, ne, gt, lt, ge, le:記憶體使用量單位 KB
    USERNAME:eq, ne:[domain\]user 格式中的使用者名稱
    MODULES:eq, ne:DLL 名稱
    SERVICES:eq, ne:服務名稱
    WINDOWTITLE:eq, ne:視窗標題

注意:  /IM 參數的萬用字元 '*' 只有在與篩選器並用時,才會被接受。

注意: 終結遠端處理程序永遠都是強制性執行的不管 /F 選項是否已經指定。

範例:
    TASKKILL /S system /F /IM notepad.exe /T
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM notepad.exe /IM mspaint.exe
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domain\username /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U username /P password /FI "IMAGENAME eq note*"

比如,我要將已開啟的記事本關閉的話
         taskkill /IM notepad.exe
        成功: 處理程序 "notepad.exe" (PID 2076) 已經終止了。
在搭配Windows 排程來執行,就可以排程關閉程式囉

2010年8月17日 星期二

Visio Viewer 打不開

2010年1月27日星期三

Visio Viewer 2003 & 2007開啟vsd檔被IE打不開被ActiveX 阻擋問題

最近阿尼幫客戶安裝Visio Viewer 2003後,發現visio檔打不開,IE打開vsd檔後會變成空白的一個小叉,如下圖:




原以為是IE安全性阻擋了,但不管IE安全性怎麼調整都一樣沒辦法正常打開vsd檔,後來想想說那就安裝較新的Visio Viewer 2007試試看,但試過發現結果跟2003的一樣,真的很奇怪,後來就上google爬文,找了好久發現原來問題出在IE在2009年10月12年的更新KB973525搞的鬼,下面是KB973525官網的資訊:

KB973525:Windows XP 的 ActiveX Killbits 安全性更新


簡述


現在已經證實 ActiveX 控制項有一些安全性問題,攻擊者可能利用這些問題侵入執行 Microsoft Internet Explorer 的系統,並取得該系統的控制權。您可以安裝 Microsoft 所提供的更新來保護您的系統。安裝此項目後,您必須重新啟動電腦。



X軟也真是的,解決了activeX安全性漏洞,確造成Visio Viewer打不開的問題,

就這樣阿尼在google爬了一陣子整理了幾個解決Visio Viewer打不開visio檔的方法,提供給同樣遇到此問題的網友們。



方法一:

最簡單也快速的方法,就是到新增/移除將KB973525移除,但阿尼不建議採用此方法,因為這樣你的IE就會不安全,可能會有中毒或被駭的可能喔!



方法二:(只適用Visio Viewer 2007)

請下載Visio Viewer 2007 Service Pack 2 (SP2)

下載點:
http://www.microsoft.com/downloads/details.aspx?FamilyID=9733a0b0-e0f4-477c-b682-b11bda63cd19&displaylang=zh-tw

以及下載Microsoft Office Visio Viewer 2007 安全性更新 (KB973709)

下載點:
http://www.microsoft.com/downloads/details.aspx?familyid=D20004C5-DD01-459E-8120-5F127E20C085&displaylang=zh-tw



下載完後請先安裝Visio Viewer 2007 Service Pack 2 (SP2)再安裝KB973709,安裝完後你的Visio Viewer就可以正常打開visio檔了。

此方法只能解決Visio Viewer 2007,至於目前官方並沒有可修正的更新,待阿尼找到解決方法後再補充囉!



Visio Viewer 2003下載點:

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=3FB3BD5C-FED1-46CF-BD53-DA23635AB2DF



Visio Viewer 2007下載點:

http://www.microsoft.com/downloads/details.aspx?familyid=D88E4542-B174-4198-AE31-6884E9EDD524&displaylang=zh-tw

以上文章載自 http://ifunpc.blogspot.com/2010/01/visio-viewer-2003-2007vsdieactivex.html

2010年8月13日 星期五

如何應用Linux監控遠端主機狀態,建立Alert機制

發佈日期: 2008/07/07
版本:Version1
發佈網址:http://blog.roodo.com/yungchingman
email:kayung@sparqnet.net
文章歡迎轉貼,轉貼時請註名出處。

前言
IT人員在公司裡面對使用者反應系統有問題不外兩種反應:
以下為對話情境:
1.User:公司Web不能連線是不是有問題?
IT:是嗎?我檢查一下server,再回覆你。
2.User:mail不能收發,是不是有問題?
IT:因為郵件伺服器有問題,我們正在處理,待兒就可使用了。
兩種情況我想大部分的User都會覺得第二種給他的感覺比較好
面對系統有問題IT人員能第一時間發現,並解決問題,不會讓User總是覺得IT人員慢半拍
因此本文將針對Serve狀態作監控,一有異常馬上通知系統管理者
本文適用:熟悉Linux Shell Script的IT人員
此監控程式將透過Linux主機以ping及namp監控遠端主機Service port的方式,每五鐘監控一次
若主機主機或service沒有回應,則通知管理者,若serivce恢復正常,則再通知管理者。
通知的方式有郵件、手機簡訊、Winpop
環境:
Linux Centos 5.0 + nmap + smbclient
要監控的主機為遠端的
File Server 10.1.1.3
Web Server 10.1.1.2


首先編輯一個script檔
內容如下:
!#/bin/bash

FILESRV=`ping -c1 10.1.1.3 |grep 10.1.1.3 |grep -c ttl`
FILESRV_status=`grep -c down /root/Filesrv-status`
#定義兩個變數,第一個變數為使用ping的方式ping主機,由回應值去判斷主機是否正常
#第二個變數為確認/root/Filesrv-status是否有down字串

if [ $FILESRV -eq 0 ] && [ $FILESRV_status -eq 0 ]
then
mail -s "Fileserver down" kayung@sparqnet.net < /root/test
echo 'Fileserver down' > /root/Filesrv-status

elif [ $FILESRV -eq 1 ] && [ $FILESRV_status -eq 1 ]
then
mail -s "Fileserver live" kayung@sparqnet.net < /root/test
echo > /root/Filesrv-status
fi

#接下來寫一個判斷式,如果第一、二個變數的結果皆為0,則表示主機已經無回應
#那麼就發mail主旨為filesrv down內容為空白的通知信通知管理者,/root/test的內容為空白
#並將 Fileserver down這個字串放到/root/FILESRV-status 若出現第一、二個變數皆為1
#則表示主機已經正常,那麼就發mail通知管理者,並將/root/Filesrv-status檔案清空。
#這樣我們就完成了一台主機的監控。
#接下來我們要監控第二台主機Web Server

WEB=`nmap 10.1.1.2 -p 80 |grep -c '80/tcp open' `
WEB_status=`grep -c down /root/WEB-status`

#同樣定義兩個變數,第一個變數是用nmap去判斷Web Server主機的80 port是否有通,
#第二個變變數是確認/root/WEB-status是否有down字串

if [ $WEB -eq 0 ] && [ $WEB_status -eq 0 ]
then
mail -s "WEB Server web service down" kayung@sparqnet.net < /root/test
echo 'WEB Server web service down' > /root/WEB-status

elif [ $WEB -eq 1 ] && [ $WEB_status -eq 1 ]
then
mail -s "WEB Server web service live" kayung@sparqnet.net < /root/test
echo > /root/WEB-status
fi

#以上的判斷式跟上面的大同小異,只是把發mail的內容換成Web主機


到這邊這個script就好了,我們將他們命名為detect.sh,放於/root/
然後在/root/裡新增兩個檔案
touch Filesrv-status WEB-status,作為detect.sh裡的變數判斷檔案
在/etc/crontab 新增以下字串
*/5 * * * * root /root/detect.sh

剛剛談到的是使用郵件的通知,那像windwos的 net send方式通知如何作
因為Linux裡沒有net send這個指令,不過我們可以使用Samba-client這個套件裡的幾個指令達成
系統需安裝samba-client

yum install samba-client

裝完編輯一個script檔
內容為
#!/bin/bash

case "$1" in
send)
echo "$3"|smbclient -I "$2" -M `nmblookup -A "$2"|sed -e '1d' -e '3,/*/d'|cut -f2|cut -d' ' -f1`
;;
*)
echo "Usage:net send "
exit 1
esac

我們將它存檔為msg
現在我們可以用這個指令加send來送訊息到windows,不過前提是windwos xp 要將messenger這個service開啟
只要輸入 msg send 10.1.1.5 "hello world"就可以將hello world這個訊息送到10.1.1.5這個windows主機
所以運用以下方式我們可以將它加入至detect.sh這個script作為通知使用。

再來我們來談一下手機簡訊如何作
手機簡訊目前我了解是很多種作法,我這提兩種作法
第一種:就是利用郵件發到一特定的email,郵件內容就包含帳號密碼及要送至的手機號碼及簡訊內容
第二種:透過程式跟遠端的主機溝通,將要送的訊息傳給程式
以上兩種方式我都用過,第一種方式請參考http://www.twsms.com/
本文是使用第二種方式,就是hinet企業簡訊
參考網址http://sms.hinet.net/new/sent_program.htm
Linux環境我們使用perl,程式如下:

#!/usr/bin/perl -w

use Time::Local;
use hiairv2;

##----以下資料請自行更改
$account=""; #帳號
$passwd=""; #密碼
$mobile_num=""; #收訊手機號碼
$Message="hiAir-Perl2-簡訊測試"; #傳送簡訊內容
$send_type=1; #傳送形式=1 -> 即時傳送
##----send_type=2,3,4 時才有作用 ----##
$send_time="080110171900"; #預約傳送時間 2008/01/10 17:19
$expire_time="1440"; #重送截止時間 一天


print "Mobile_num = " . $mobile_num . "\n";

##---- 產生 hiairv2物件 ----##
$v2_con = hiairv2->new( host_ip=>"202.39.54.130",
host_port=>"8000",
user_name=>$account,
user_passwd=>$passwd,
);

@ret = $v2_con->init_connect();
if($ret[0]!=0){
print "hiairv2 connecton error! ret_code=" . $ret[0] .",ret_content:" . $ret[1];
$v2_con->close_hiairv2();
exit(0);
}

@ret = $v2_con->send_text($mobile_num,$send_type,$send_time,$expire_time,$Message);
if($ret[0]!=0){
print "hiairv2 send_text error! ret_code=" . $ret[0] .",ret_content:" . $ret[1];
$v2_con->close_hiairv2();
exit(0);
}

##---- close connection ----##
$v2_con->close_hiairv2();
print "ret_code=" . $ret[0] .",ret_content:" . $ret[1] . "\n";

LogFile($mobile_num,$ret[0],$ret[1],$Message);

sub LogFile{
#取得系統時間
(my $sec,my $min,my $hour,my $mday,my $mon,my $year,$_,$_,$_) = localtime(time);
$year = $year+1900;
$mon = $mon+1;
if($mon < 10){
$mon = "0".$mon;
}
if($mday < 10){
$mday = "0".$mday;
}
$now_time = $year . $mon . $mday . " " . $hour . ":" . $min . ":" . $sec ;

open(Log_File,">>send.log");
print Log_File $now_time ." ". $_[0] . " " . $_[1] . " ". $_[2]. " " . $_[3] . "\n";
close Log_File;
}


檔案名稱取為send.pl
我們只要修改上面這兩個地方即可

$mobile_num=""; #收訊手機號碼
$Message="hiAir-Perl2-簡訊測試"; #傳送簡訊內容

執行perl程式在Linux只要使用perl send.pl即可

結論
系統監控Alert在商用軟體裡不乏相關功能,像whatup..等,本文只是基本的應用,實際更多的應用留待讀者去發掘,Linux的優點就是彈性,只是我們要花更多時間去熟悉其系統運作,本文的監控系統希望能讓系統管理者在系統出現異常時能第一時間即時反應,減少down time時間,讓處理效率更好。

轉載自 
http://phorum.study-area.org/index.php?topic=55203.0

什麼是域名?

什麼是域名?

域名是一組字母(或許數字和連字符),它提供一個易於記憶,唯一的地址在互聯網上。
域名有“頂層”結束通常是一個通用的結局(。com,。net或。org的),否則,國家代碼結尾(如。凹澳大利亞或。港幣香港)。 你可以選擇結束是最適合您的用途,但須滿足的要求,適用於每個域名類型。
域名通常用來代表機構(或個人)在互聯網上。 一個域名,可以用來定制您的網站地址,以及您的電子郵件地址(上課)。
一個域名,也可以是“停”,或註冊,但沒有付諸積極利用。 這可能是有用的當你想要保護您的公司名稱在市場上你可能目前還無法運作,或者如果你還沒準備好一個完整的互聯網存在。

為什麼我需要一個域名?

一個域名,描述你的業務類別,或您的公司名稱,為您提供一種可識別的身份在互聯網上。 客戶,供應商及公眾人士能更容易地找到你(理想甚至只是猜測你的地址)。 域名是難忘得多比較正常的ISP的網站和電子郵件地址。 它同時也傳達出更專業的形象,讓人們知道你有一個致力於互聯網。
域名從某種意義上講也傳達規模:即使是小企業,可更專業的定制的電子郵件地址。 例如,您可以使用多個地址,在你的新域名 - 也許有每個人的工作人員,甚至是“一個人”的事業中,你可以做廣告不同的地址為“銷售”,“信息”,“網管”等上。
域名是永久性的和可移動。 只要您符合條件的條款及域名註冊和支付任何適用正在進行的牌照費,您的域名是一個穩定的地址為您的企業。 這就像一個郵箱或電話號碼,不僅是個性化的,而且還可以按照你字面上無論你走到哪裡。

什麼角色我可以在我的域名?

域名可以包含字母A到Z,數字和連字符(連字符,但不能成為第一個或最後一個字符的域名)。
所有其它字符不能出現在一個域名,所以你不能有空格,感嘆號(!),問號(?)或下劃線(_)。
域名是大小寫不敏感,所以GoDomains.com.au,GODOMAINS.com.au和GoDoMaInS.CoM.Au都是同一個。
這些一般規則適用於所有域名由於技術標準。 一些域名類型有政策,進一步限制模式的字符,您可以使用您的域名。 例如,對於一個。com.au名稱只能使用字母出現在牌照持有人的註冊澳大利亞企業或公司名稱。

2010年5月26日 星期三

Fedora Linux 或 Red Hat Linux 的 Apache

確定在 Apache 配置檔案 /etc/httpd/conf/httpd.conf "NameVirtualHost *"前的 "#" 已被刪去:
NameVirtualHost *:80
/etc/httpd/conf/httpd.conf 的尾部加入以下內容:

#
ServerName 後加上的網站名稱
ServerName
www.examples.net
#
如果想多個網站名稱都取得相同的網站,可以加在 ServerAlias 後加上其他網站別名。
#
別名間以空格間開。
ServerAlias web.examples.net mail.examples.net
#
ServerAdmin 後加上網站管理員的電郵地址,方便別人有問題是可以聯絡網站管理員。
ServerAdmin webmaster@examples.net
#
DocumentRoot 後加上存放網站內容的目錄路徑
DocumentRoot /var/www/www.examples.net
/var/www/www.examples.net> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
AllowOverride None Options ExecCGI -MultiViews +SymLinksIfOwnerMatch Allow from all

ErrorLog /var/log/httpd/error.log
# Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn
CustomLog /var/log/httpd/access.log combined ServerSignature On
記謹建立在以上配置檔中所提到的目錄,例如 /var/www/www.examples.net
# mkdir /var/www/www.examples.net
查您的配置檔中是否有任何語法錯誤:
# apachectl configtest
重新 Apache
# /etc/init.d/httpd reload (service httpd restart)
根據以上說明,我們可以這樣做
vim /etc/httpd/conf/httpd.conf
找到 #NameVirtualHost *:80 並將前端的#字號去掉
了後續方便,建議將 的配置,寫到/etc/httpd/conf.d
比如,有一個DomainName a0.xxx.com,則建立一檔案名a0.conf 放至於/etc/httpd/conf.d
vim /etc/httpd/conf.d/a0.conf
ServerAdmin antonio.hsu@xxx.com //管理人員的Mail
DocumentRoot /var/www/vhost/name_base/a0 //實際HTML的存放路徑
ServerName a0.xxx.com //該網站的DomainName
ErrorLog logs/a0.xxx.com-error_log //error log 存放路徑
CustomLog logs/a0.xxx.com-access_log common //access log 存放路徑
注意:程式並不會主動幫建立路徑,必需要手動建立,否則程序執行會有錯誤,或甚至無法執行
切換至設定實際HTML的存放路徑,並建立一index.html ,其內容可以如下
A0 "Hello World" below:


設定Apache 之後,記得要restart Apache service
了進行測試,應該在電腦的c:\windows\system32\drivers\etc\hosts 中加入一些設定
192.168.0.38 a0.xxx.com
192.168.0.38 a1.xxx.com
192.168.0.38 a2.xxx.com
前面的IP就是安裝 Apache 服務的主機,後面的DomainName 責是預其要提供的URL,設定後,不用重新動主機,就可以生效
若在Internet環境,則需要向DNS下手,比如這樣
dns IN A 192.168.0.38 這個IP的名稱是dns,是本尊;
a0 IN CNAME dns 這是第一個別名(CNAME)--分身;
a1 IN CNAME dns 這是第二個別名(CNAME)--分身;
a2 IN CNAME dns 這是第三個別名(CNAME)--分身;

2010年5月25日 星期二

ibdata1 用途說明

这个文件超级大, 查了一下, 大概的作用如下

是储存的格式
INNODB类型数据状态下,
ibdata用来储存文件的数据
而库名的文件夹里面的那些表文件只是结构而已

由于mysql4.1默认试innodb,所以这个文件默认就存在了http://man.chinaunix.net/database/mysql/inonodb_zh/2.htm 这个链接试innodb的中文参考, innodb的东西可以在my.ini中设置

innodo中文参考全文如下
InnoDB 启动选项

为了在 MySQL-Max-3.23 中使用 InnoDB 表,你必须在配置文件‘my.cnf’或‘my.ini’(WINDOWS系统)中的 [mysqld] 区中详细指定配置参数。

作为最小设置,在 3.23 中你必须在 innodb_data_file_path 上指定数据文件名能及大小。如果在‘my.cnf’中没有指定innodb_data_home_dir,系统将在 MySQL 的 datadir 目录下创建数据文件。如果将 innodb_data_home_dir 设为一个空串,那可以在 innodb_data_file_path 中给定一个绝对路径。在 MySQL-4.0 中可以不设定 innodb_data_file_path :MySQL-4.0 将默认地在 datadir 目录下建立一个 10 MB 大小自扩充(auto-extending)的文件‘ibdata1’(在MySQL-4.0.0 与 4.0.1 中数据文件的大小为 64 MB 并且是非自扩充的(not auto-extending))。

为了得到更好的性能你必须所示的例子明确地设定 InnoDB 启动参数。

从 3.23.50 版和 4.0.2 版开始,InnoDB 允许在 innodb_data_file_path 中设置的最一个数据文件描述为 auto-extending。 innodb_data_file_path 语法如下所示:

pathtodatafile:sizespecification;pathtodatafile:sizespec;...
...;pathtodatafile:sizespec[:autoextend[:max:sizespecification]]
如果用 autoextend 选项描述最后一个数据文件,当 InnoDB 用尽所有表自由空间后将会自动扩充最后一个数据文件,每次增量为 8 MB。示例:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend
指定 InnoDB 只建立一个最初大小为 100 MB 并且当表空间被用尽时以 8MB 每块增加的数据文件。如果硬盘空间不足,可以再添加一个数据文件并将其放在其它的硬盘中。 举例来说:先检查硬盘空间的大小,设定 ibdata1 文件使它接近于硬盘空余空间大小并为 1024 * 1024 bytes (= 1 MB)的倍数, 将 ibdata1 明确地指定在 innodb_data_file_path 中。在此之后可以添加另一个数据文件:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:988M;/disk2/ibdata2:50M:autoextend
注意:设定文件大小时一定要注意你的OS是否有最大文件尺寸为2GB的限制!InnoDB是不会注意你的OS文件尺寸限制的, 在一些文件系统中你可能要设定最大容量限制:
innodb_data_home_dir =
innodb_data_file_path = /ibdata/ibdata1:100M:autoextend:max:2000M
 

一个简单的 my.cnf 例子。 假设你的计算机有 128 MB RAM 和一个硬盘。下面的例子是为了使用 InnoDB 而在 my.cnf 或 my.ini 文件中可能所作的一些配置。我们假设你运行的是 MySQL-Max-3.23.50 及以上版本,或 MySQL-4.0.2 及以上版本。

这个示例适合大部分不需要将 InnoDB 数据文件和日志文件放在几个盘上的 Unix 和 Windows 用户。这个例子在 MySQL 的datadir 目录(典型的为 /mysql/data)中创建一个自扩充(auto-extending)的数据文件 ibdata1 和两个 InnoDB 运行日志文件ib_logfile0 和 ib_logfile1 以及 ib_arch_log_0000000000 档案文件。

[mysqld]
#在这里加入其它 的 MySQL 服务器配置
#...
# 数据文件必须
# 能够容下数据与索引
# 确定有足够的
# 磁盘空间
innodb_data_file_path = ibdata1:10M:autoextend
# 设置缓冲池的大小为
# 你的主内存大小的
# 50 - 80 %
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
# 设置日志文件的大小约为
# 缓冲池(buffer pool)
# 大小的 25 %
set-variable = innodb_log_file_size=20M
set-variable = innodb_log_buffer_size=8M
# 如果丢失最近几个事务影响
# 不大的话可以设置
# .._flush_log_at_trx_commit = 0
innodb_flush_log_at_trx_commit=1
InnoDB 不会自己建立目录,必须自己使用操作系统命令建立相应的目录。检查你的 MySQL 服务程序在 datadir 目录里 有足够的权限建立文件。

注意:在某些文件系统中 数据文件大小必须小于2G! 所有运行日志文件的大小总和必须小于 2G 或 4G,这依赖于具体的 MySQL 系统版本。 数据文件的总和必须大于等于 10 MB.

当第一次建立 InnoDB 数据库时,建议最好以命令行方式启动 MySQL 服务。这样 InnoDB 数据库建立时的提示信息将在屏幕上显示,从而可以看到建立过程。 下面第 3 节所示就是 InnoDB 数据库建立时的屏幕显示。例如,在 Windows 下使用下列指令启动 mysqld-max.exe :

your-path-to-mysqld>mysqld-max --console
 

在 Windows 系统下 my.cnf 或 my.ini 放在哪里?规则如下 :

只能存在一个 my.cnf 或 my.ini 文件
my.cnf 文件必须放在 C: 的根目录下
my.ini 文件必须放在 WINDIR 目录下,例:C:\WINDOWS 或 C:\WINNT。可以使用 MS-DOS 的 SET 命令查看 WINDIR 目录值
如果你的 PC 使用启动引导程序引导系统而 C: 不是启动磁盘,那只能唯一地使用 my.ini 作为设置文件
 

Unix 下在哪里指定配置文件?在 Unix 下 mysqld 按下列顺序搜索配置文件:

/etc/my.cnf 全局选项
COMPILATION_DATADIR/my.cnf 服务器范围的选项
defaults-extra-file 采用 --defaults-extra-file=.... 设置的默认文件
~/.my.cnf 用户指定文件
COMPILATION_DATADIR 是 MySQL 的数据文件目录,它是在 mysqld 被编译时以 ./configure 设置指定 (典型的是 /usr/local/mysql/data 二进制安装或 /usr/local/var 以源安装)。
 

如果不有确定 mysqld 从哪里读取 my.cnf 或 my.ini,可以在第一命令行上详细指定它的目录:mysqld --defaults-file=your_path_to_my_cnf。

InnoDB 的数据文件目录是对 innodb_data_home_dir 与 innodb_data_file_path 的数据文件名或目录联合 ,如果需要将在它们之间增加一个“/”或“\”。如果关键字 innodb_data_home_dir 没有在 my.cnf 中明确指定,它的默认值为“.”,即目录“./”,这意味着 MySQL 的 datadir of MySQL.

一个高级的 my.cnf 示例。假设你有一台 2 GB RAM 和3个 60 GB 硬盘(路径分别为 "/", "/dr2" 和 “/dr3”)装有 Linux。下面的例子是为了使用 InnoDB 而在 my.cnf 文件中可能所作的一些配置。

注意:InnoDB 不会自己创建文件目录:你必须自己创建它们。使用 Unix 或 MS-DOS mkdir 命令建立相应的数据与日志文件目录。

[mysqld]
#在这里加入其它 的 MySQL 服务器配置
#...
# 如果不使用InnoDB表将一列一行注释去除
# skip-innodb
#
# 数据文件必须
# 能够容下数据与索引
# 确定有足够的
# 磁盘空间
innodb_data_file_path = /ibdata/ibdata1:2000M;/dr2/ibdata/ibdata2:2000M:autoextend
# 设置缓冲池的大小为
# 你的主内存大小的
# 50 - 80 %,但是
# 在 Linux x86 总内存
# 使用必须小于 2 GB
set-variable = innodb_buffer_pool_size=1G
set-variable = innodb_additional_mem_pool_size=20M
innodb_log_group_home_dir = /dr3/iblogs
# .._log_arch_dir 必须和
# .._log_group_home_dir一样;
# 从 4.0.6开始,可以省略它
innodb_log_arch_dir = /dr3/iblogs
set-variable = innodb_log_files_in_group=3
# 设置日志文件的大小约为
# 缓冲池(buffer pool)
# 大小的 15 %
set-variable = innodb_log_file_size=150M
set-variable = innodb_log_buffer_size=8M
# 如果丢失最近几个事务影响
# 不大的话可以设置
# .._flush_log_at_trx_commit = 0
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50
#innodb_flush_method=fdatasync
#set-variable = innodb_thread_concurrency=5
注意:我们已在不同的硬盘上放置了两个数据文件, InnoDB 将从数据文件的底部填充表空间。在某些情况下所有的数据被分配到不同的物理硬盘中会提高数据库的性能。 将日志文件与数据文件分别放在不同的物理硬盘中对提高性能通常是很有益的。你同样可以使用一个 RAW 磁盘分区( raw disk partitions(raw devices)) 作为数据文件, 在一些 Unixe 系统中这将提高 I/O 能力。 如何在 my.cnf 中详细指定它们请查看第 12.1 节。

警告:在 Linux x86 上必须小心不能将内存使用设置太高, glibc 会把进程堆增长到线程堆栈之上,这将会使服务器崩溃。下面的接近或超过于 2G 将会很危险:

innodb_buffer_pool_size + key_buffer +
max_connections * (sort_buffer + record_buffer) + max_connections * 2 MB
每个线程将使用 2MB(MySQL AB 二进制版本为 256 KB)的堆栈,在最坏的环境下还会使用 sort_buffer + record_buffer 的附加内存。
 

如何调整其它的 mysqld 服务器参数?查看 MySQL 用户手册可以得到更详细的信息。适合大多数用户的典型参数如下所示:

skip-locking
set-variable = max_connections=200
set-variable = record_buffer=1M
set-variable = sort_buffer=1M
# 设置索引缓冲(key_buffer)大小为
# 你的 RAM 的 5 - 50% ,这主要依赖于
# 系统中 MyISAM 表使用量。
# 但是必须保证索引缓冲(key_buffer)与 InnoDB
# 的缓冲池(buffer pool)大小总和
# 小于 RAM 的 80%。
set-variable = key_buffer=...
 

注意:在 my.cnf 文件中有些参数是为了设置数字的,它们的设置格式为:set-variable = innodb... = 123,而其它(字符串和逻辑型)的采用另一设置格式:innodb_... = ... .

db_data_home_dir:这是InnoDB表的目录共用设置。如果没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。如果设定一个空字串,可以在 innodb_data_file_path 中设定绝对路径。

innodb_data_file_path:单独指定数据文件的路径与大小。数据文件的完整路径由 innodb_data_home_dir 与这里所设定值的组合。 文件大小以 MB 单位指定。因此在文件大小指定后必有“M”。 InnoDB 也支持缩写“G”, 1G = 1024M。从 3.23.44 开始,在那些支持大文件的操作系统上可以设置数据文件大小大于 4 GB。而在另一些操作系统上数据文件必须小于 2 GB。数据文件大小总和至少要达到 10 MB。在 MySQL-3.23 中这个参数必须在 my.cnf 中明确指定。在 MySQL-4.0.2 以及更新版本中则不需如此,系统会默认在 MySQL 的 datadir 目录下创建一个 16 MB 自扩充(auto-extending)的数据文件 ibdata1。你同样可以使用一个 原生磁盘分区(RAW raw disk partitions(raw devices)) 作为数据文件, 如何在 my.cnf 中详细指定它们请查看第 12.1 节。

innodb_mirrored_log_groups:为了保护数据而设置的日志文件组的拷贝数目,默认设置为 1。在 my.cnf 中以数字格式设置。

innodb_log_group_home_dir:InnoDB 日志文件的路径。必须与 innodb_log_arch_dir 设置相同值。 如果没有明确指定将默认在 MySQL 的 datadir 目录下建立两个 5 MB 大小的 ib_logfile... 文件。

innodb_log_files_in_group:日志组中的日志文件数目。InnoDB 以环型方式(circular fashion)写入文件。数值 3 被推荐使用。在 my.cnf 中以数字格式设置。

innodb_log_file_size:日志组中的每个日志文件的大小(单位 MB)。如果 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值,可以减少刷新缓冲池的次数,从而减少磁盘 I/O。但是大的日志文件意味着在崩溃时需要更长的时间来恢复数据。 日志文件总和必须小于 2 GB,3.23.55 和 4.0.9 以上为小于 4 GB。在 my.cnf 中以数字格式设置。

innodb_log_buffer_size:InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲允许事务运行时不需要将日志保存入磁盘而只到事务被提交(commit)。 因此,如果有大的事务处理,设置大的日志缓冲可以减少磁盘I/O。 在 my.cnf 中以数字格式设置。

innodb_flush_log_at_trx_commit:通常设置为 1,意味着在事务提交前日志已被写入磁盘, 事务可以运行更长以及服务崩溃后的修复能力。如果你愿意减弱这个安全,或你运行的是比较小的事务处理,可以将它设置为 0 ,以减少写日志文件的磁盘 I/O。这个选项默认设置为 0。

innodb_log_arch_dir:The directory where fully written log files would be archived if we used log archiving. 这里设置的参数必须与 innodb_log_group_home_dir 相同。 从 4.0.6 开始,可以忽略这个参数。

innodb_log_archive:这个值通常设为 0。 既然从备份中恢复(recovery)适合于 MySQL 使用它自己的 log files,因而通常不再需要 archive InnoDB log files。这个选项默认设置为 0。

innodb_buffer_pool_size:InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可以使访问数据时减少磁盘 I/O。在一个专用的数据库服务器上可以将它设置为物理内存的 80 %。 不要将它设置太大,因为物理内存的使用竞争可能会影响操作系统的页面调用。在 my.cnf 中以数字格式设置。

innodb_additional_mem_pool_size:InnoDB 用来存储数据字典(data dictionary)信息和其它内部数据结构(internal data structures)的存储器组合(memory pool)大小。理想的值为 2M,如果有更多的表你就需要在这里重新分配。如果 InnoDB 用尽这个池中的所有内存,它将从操作系统中分配内存,并将错误信息写入 MySQL 的错误日志中。在 my.cnf 中以数字格式设置。

innodb_file_io_threads:InnoDB 中的文件 I/O 线程。 通常设置为 4,但是在 Windows 下可以设定一个更大的值以提高磁盘 I/O。在 my.cnf 中以数字格式设置。

innodb_lock_wait_timeout:在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)。InnoDB 会自动检查自身在锁定表与事务回滚时的事务死锁。如果使用 LOCK TABLES 命令,或在同一个事务中使用其它事务安全型表处理器(transaction safe table handlers than InnoDB),那么可能会发生一个 InnoDB 无法注意到的死锁。在这种情况下超时将用来解决这个问题。这个参数的默认值为 50 秒。在 my.cnf 中以数字格式设置。

innodb_flush_method:这个参数仅仅与 Unix 相关。这个参数默认值为 fdatasync。 另一个设置项为 O_DSYNC。这仅仅影响日志文件的转储,在 Unix 下以 fsync 转储数据。InnoDB 版本从 3.23.40b 开始,在 Unix 下指定 fdatasync 为使用 fsync 方式、指定 O_DSYNC 为使用 O_SYNC 方式。由于这在某些 Unix 环境下还有些问题所以在 'data' versions 并没有被使用。

innodb_force_recovery:警告:此参数只能在你希望从一个被损坏的数据库中转储(dump)数据的紧急情况下使用! 可能设置的值范围为 1 - 6。查看下面的章节 'Forcing recovery' 以了解这个参数的具体含义。参数设置大于 0 的值代表着 InnoDB 防止用户修改数据的安全度。从 3.23.44 开始,这个参数可用。在 my.cnf 中以数字格式设置。

innodb_fast_shutdown:InnoDB 缺少在关闭之前清空插入缓冲。这个操作可能需要几分钟,在极端的情况下可以需要几个小时。如果这个参数据设置为 1 ,InnoDB 将跳过这个过程而直接关闭。从 3.23.44 和 4.0.1 开始,此参数可用。从 3.23.50 开始,此参数的默认值为 1。

innodb_thread_concurrency:InnoDB 会试图将 InnoDB 服务的使用的操作系统进程小于或等于这里所设定的数值。此参数默认值为 8。如果计算机系统性能较低或 innodb_monitor 显示有很多线程等侍信号,应该将这个值设小一点。如果你的计算机系统有很我的处理器与磁盘系统,则可以将这个值设高一点以充分利用你的系统资源。建议设值为处理器数目+ 磁盘数目。 从 3.23.44 和 4.0.1 开始,此参数可用。在 my.cnf 中以数字格式设置。