網路開展事業或在網路創業賺錢的第一步:【架設24小時賺錢網站主機】比網頁設計更優先!

感謝您造訪 Linux主機伺服器架設技術基地。 你可進入替你架設主機.影片教你維護頁面,詳細瞭解Linux主機架設及相關技術維護影片教學(完整配套措施),有主機馬上可以架設網站營運,完全無限制!

租用不如自有主機!聰明的網站經營者都選擇架設Linux主機伺服器做為網站運作平台,因功能完整又強大,免費架站程式超多!完全沒有版權問題,超強『防駭客攻擊與入侵』及安全防護可以讓你無後顧之憂。

                    架設主機.影片教你維護: http://por.tw/linux/new-E_learning/index.php

Linux主機伺服器架設技術基地  維護團隊  敬上
瀏覽模式: 普通 | 列表
Linux主機電子郵件 Openwebmail + spamassassin 擋垃圾信的設定方法

首先先到官方網站看安裝的方式:

http://openwebmail.com/openwebmail/download/redhat/howto/spam/howto.txt

(裡面的第 4. 可以略過)

attachments/201304/5352430831.jpg

再來才是重頭戲,也是我卡了好幾天才發現的地方:

在 openwebmail.conf 裡面的設定找到 enable_spamcheck 這段,照以下的參數做修改就可以了。(下面的例子也把學習廣告信的功能也打開)

spamcheck_pipe                  /usr/bin/spamc  -c -x -t60 -u @@@USERNAME@@@
learnham_pipe                   /usr/bin/sa-learn --local --ham
learnspam_pipe                  /usr/bin/sa-learn --local --spam
enable_spamcheck                yes
enable_learnspam                yes
spamcheck_source_allowed        all

之後再照官方的說明文件,以 sample-spam.txt 寄一封測試的廣告信,如果設錯的話,在 openwebmail.log 裡面就會出現:

Sun Oct 24 21:52:06 2004 - [31314] (192.168.1.1) neo - spamscheck - pipe error - spamd error, exit=2
55, ret=From root@xxx.com  Sun Oct 24 21:52:01 2004

成功的話就會出現:

Sun Oct 24 22:18:20 2004 - [31484] (192.168.1.1) neo - spamcheck - spam 1000.0/10 found in msg <2004
1024141811.CF83A19434C@xxx.com>

另外廣告信學習的功能如果設定成功的話,在使用者點選學習功能的時候,在 log 裡就會看到類似以下的訊息:

Sun Oct 24 22:25:13 2004 - [31634] (192.168.1.1) neo - learnspam - 1 learned, 1 examined

如果學習的功能起不來,就要確定 CmdLearn.pm 是不是非 root 權限的人可以讀到? 如果不行的話,就下 chmod 打開權限就可以了。如果不確定 CmdLearn.pm 路徑的話可以下 #locate CmdLearn.pm 找看看。

但是要注意的是目錄的權限也要開,以我的環境 CmdLearn.pm 在 RH9 的 RPM 預設是裝在:

/usr/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/

而我是乾脆把整個目錄都把 Group 跟 Public 讀取跟執行的權限打開:

chmod 555 /usr/lib/perl5/site_perl/5.8.0/Mail/SpamAssassin/ -R

這樣每個使用者就可以開始使用 OpenWebMail 的擋廣告信及學習廣告信的功能了。

本文引用來至:http://www.neo.com.tw/archives/339

Linux主機伺服器為何需要防火牆?

Linux主機伺服器為何需要防火牆?

Linux主機伺服器防火牆防火牆最重要的任務:
1.規劃出切割被信任(如子網域)與不被信任(如 Internet)的網段
2.規劃出可提供 Internet 的服務與必須受保護的服務
3.分析出可接受與不可接受的封包狀態

畢竟網路的世界是很複雜的,而 Linux 主機也不是一個簡單的東西。
說不定哪一天你在進行某個軟體的測試時,主機突然間就啟動了一個網路服務, 如果你沒有管制該服務的使用範圍,那麼該服務就等於對所有 Internet 開放,那就麻煩了!
因為該服務可能可以允許任何人登入你的系統,那不是挺危險?

所以囉,防火牆能作什麼呢?防火牆最大的功能就是幫助你『限制某些服務的存取來源』!
舉例來說:
(1)你可以限制檔案傳輸服務 (FTP) 只在子網域內的主機才能夠使用,而不對整個 Internet 開放。
(2)你可以限制整部 Linux 主機僅可以接受客戶端的 WWW 要求,其他的服務都關閉。
(3)你還可以限制整部主機僅能主動對外連線,對我們主機主動連線的封包狀態 (TCP 封包的 SYN flag) 就予以抵擋等等。
這些就是Linux主機最主要的防火牆功能!

 學員來信問道:
老師您好:
請問您的主機架設方案,所配送的電腦耗電量一年約花費多少成本?(因為我擔心電費問題....)
謝謝!


總教頭回覆:
我的經驗:架設主機後網站掛上Google點擊廣告
結果賺的錢用來付給:家裡的上網費、電費、水費、瓦斯費、大樓管理費、電話費....全部不用錢,還有賺!
所以你不用為『電腦耗電量一年約花費』多少成本煩惱!

總教頭架設之Linux主機,用儀器實際測量數據證明:用電54瓦(超省電!)
比一個100瓦家用燈泡省約一半!比各位一般300瓦的PC電腦省電多多!

attachments/201104/6584384162.jpg

結論:單單上網不架設主機的人是笨蛋!(因為不管你有沒有架設主機,上網費用都是一樣的!)
你現在知道為何要聘請專家幫你架設主機了吧?
架設一台可以賺錢(高效能、不耗電)的主機,要有多方的專要考量

一台Linux主機營運幾年下來,那成本可差大了!
所以勸告網友與學員(不要自己DIY)可以用與高效能是不一樣的!
備註:網友與學員不要寫信來問我如何省電與硬體配備規格!(別想來個撿現成的!)

需要架設主機服務,就是讓專業者整體規劃!

什麼是: sudo ?

我們常在書上或網路上看到文章(執行指令),一開頭就是 sudo

那什麼是: sudo 呢?
Sudo,是一種程序,用於類Unix操作系統如BSD,Mac OS X,以及GNU/Linux以允許用戶通過安全的方式使用特殊的權限運行程序。
Sudo(substitute user [或 superuser] do),是一種程式
用於類Unix作業系統如BSD,Mac OS X,以及GNU/Linux以允許使用者透過安全的方式使用特殊的權限執行程式(通常為系統的超級使用者)。

sudo 原理:
在sudo於1980年前後被寫出之前,一般使用者管理系統的方式是利用su切換為超級使用者。
但是使用su的缺點之一在於必須要先告知超級使用者的密碼。

sudo使一般使用者不需要知道超級使用者的密碼即可獲得權限。
首先超級使用者將普通用戶的名字、可以執行的特定命令、按照哪種用戶或用戶組的身份執行等資訊,登記在特殊的檔案中(通常是/etc/sudoers),即完成對該使用者的授權(此時該使用者稱為「sudoer」)[3];在一般使用者需要取得特殊權限時,其可在命令前加上「sudo」,此時sudo將會詢問該使用者自己的密碼(以確認終端機前的是該使用者本人),回答後系統即會將該命令的行程以超級使用者的權限執行。之後的一段時間內(預設為5分鐘[4],可在/etc/sudoers自訂),使用sudo不需要再次輸入密碼。

由於不需要超級使用者的密碼,部分Unix系統甚至利用sudo使一般使用者取代超級使用者作為管理帳號,例如:Ubuntu、Mac OS X等。
語法:
sudo [-bhHpV][-s ][-u <用户>][指令]



sudo [-klv]

參數

-b  在後台執行指令。

-h  顯示幫助。

-H  將HOME環境變數設為新身份的HOME環境變數。

-k  結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼。

-l  列出目前用戶可執行與無法執行的指令。

-p  改變詢問密碼的提示符號。

-s  執行指定的shell。

-u <用戶>  以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份。

-v  延長密碼有效期限5分鐘。

-V  顯示版本資訊。

     -S   從標準輸入流替代終端來取得密碼

----------------------------------------------------------------

Linux主機(文字輸入下)關機與重新開機指令

Linux主機(文字輸入下)關機與重新開機指令

shutdown:關機

shutdown -參數 時間 訊息

k:並非真正關機,只是送出訊息

r:關機後重新開機

h:關機後不重新開機

例如:
shutdown -h now (立即關機)

f:快速關機

n:快速關機,不要經過init的程序

c:取消關時的程序

t:在警告訊息和刪除信號間做停留
時間可用now或任意數字 (代表分鐘)

 reboot:重新開機

如何使用Linux架設NAT主機(Linux主機伺服器架設技術)

如何使用 Linux 來架設NAT主機,可以解決 IPv4 位址不足的現象。
目前所分配的 IPv4 Address 範圍有限,所建置的 NGN 專案無線 AP ,導致 IPv4 Address 不足。
而 IPv6 Address 尚未普及至全球,若單用 IPv6 Address 會造成某些點連線失敗,因此,我們仍建議可以建置 NAT 主機,以解決此一困境。

attachments/201304/8700375941.jpg

NAT主機基本概念:

 NAT 簡單來講,就是用 Linux Server 來架設一台 IP 分享器。
對外只需1個實體 IP ,對內卻可提供多組的 IP ,供整間電腦教室的電腦及網路設備,以虛擬 IP 上網,如同外面所賣的 IP 分享器一樣,它必須啟用 DHCP Server 以自動配送虛擬 IPv4 位址給終端設備。

Linux Server 的 NAT 功能,是利用 Netfilter 機制以 iptables指令達成的,它除了可以達成 IP 分享器的功能外,也可以鎖網路設備的 MAC 位置,令中毒的機器無法對外攻擊其他電腦。
詳細做法,請參考下文。

實作:

網卡設定

    * 一定要兩張網卡
          NAT 主機對 CPU 與 RAM 的要求不高,但是對網卡的要求較高,因此建議採用 INTEL 或 3COM 的網卡會較好,若真的有困難,至少要 RealTek 的 R8169(GB) 才可以。
          實體網卡的判別很簡單,打開終端機,把網路線插入,再下 dmesg 指令,若在訊息最下面看到「eth0: link becomes ready 」字樣,代表所插入的網卡介面是 eth0 。
          對外網卡使用實體 IPv4 位址
          對內網卡使用虛擬 IP 位址,網卡的設定值不得有 gateway 值
    * 依上述要求,主機網卡設定圖示如下


    * 修改 /etc/network/interfaces 內容示例如下
      root@nat:~# vi /etc/network/interfaces

autleth0 eth1
iface linet loopback

iface eth0 inet static
   address 163.26.108.132
   network 163.26.108.128
   netmask 255.255.255.128
   broadcast 163.26.108.255
   gateway 163.26.108.254

iface eth1 inet static
   address 192.168.1.1
   network 192.168.1.0
   netmask 255.255.255.0
   broadcast 192.168.1.255



啟動DHCP Server

    * 安裝 dhcp3-server 套件
      root@nat:# apt-get install dhcp3-server
    * 修改 /etc/default/dhcp3-server , 把要配送 ip 的網路卡代號寫入, 如下所例

INTERFACES="eth1"

    * Linux sqz 請注意,dhcp3-server 套件已改成 isc-dhcp-server (但安裝時仍是 apt-get install dhcp3-server)
          啟動程式可能變成 /etc/init.d/isc-dhcp-server
            root@dns:~# service isc-dhcp-server start|stop
          設定檔位置會變成 /etc/dhcp
          實際位置可以下指令
            root@dns:~# dpkg -L isc-dhcp-server 列出套件檔案列表得知
    * 修改 /etc/dhcp3/dhcpd.conf , 加至檔尾(以配送 192.168.1.0 為例)

# This is a very basic subnet declaration.
subnet 192.168.1.0 netmask 255.255.255.0 {
 range 192.168.1.51 192.168.1.200 ;
 option broadcast-address 192.168.1.255 ;
 option routers 192.168.1.1 ;
 option domain-name-servers 168.95.1.1, 168.95.192.1 ;
}

# 若要分配的是虛擬 IP, 這邊要手動額外加入網段
subnet 163.26.108.128 netmask 255.255.255.128 {

}


Linux sqz 記得改成 /etc/dhcp/dhcpd.conf



修改防火牆規則列

    * 修改 /etc/rc.local 下面所列的部分,皆是要修改的項目
      root@nat:~# vi /etc/rc.local

# 打開下面這四行
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe iptable_nat
/sbin/modprobe ip_nat_ftp
......
###-----------------------------------------------------###
# 設定外部網段 IP 及介面
###-----------------------------------------------------###
ech"Set external ......"
echo

# 不要忘了打開 FW_IFACE
FW_IP="163.26.108.132"
FW_IP_RANGE="163.26.108.128/25"
FW_IFACE="eth0"

###-----------------------------------------------------###
# 設定內部網段 IP 及介面
###-----------------------------------------------------###
ech"Set internal ......"
echo

LAN_IP="192.168.1.1"
LAN_IP_RANGE="192.168.1.0/24"
LAN_BCAST_ADRESS="192.168.1.255"
LAN_IFACE="eth1"

......

###-----------------------------------------------------###
# 打開 forward
###-----------------------------------------------------###
#ech"Enable ip_forward ......"
#echo

ech"1" > /proc/sys/net/ipv4/ip_forward

......

###-----------------------------------------------------###
# 啟動內部對外轉址
###-----------------------------------------------------###

$IPTABLES -t nat -A POSTROUTING -$FW_IFACE -j SNAT --to-source $FW_IP

    * 套用新規則列
      root@nat:~# service rc.local start
    * 檢查 NAT 是否已成功設定
      root@dns:~# iptables -t nat -L

    * 注意:改到此為止,只是啟動封包轉送功能,後續的通訊埠控管尚未處理。不過在南縣 NGN 的架構下,筆者建議只要做到此步驟就好,不必再設定通訊埠的控管,免得一些設備無法連線,反而成為網管的困擾。



通訊埠管制
不管制的作法


這個比較簡單,原 Linux 上的 /etc/rc.local 只要修改到可以轉送封包(虛擬 IP 可以上網),後面的規則保留不動,那就對了。


鎖通訊埠作法

    * 繼續修改規則列 /etc/rc.local
    * 維持 INPUT, OUTPUT, FORWARD 是開放,不必改,再把下面紅字的規則列加到範例中所示的位置

......
###-----------------------------------------------------###
# 啟動外部對內部轉址
###-----------------------------------------------------###
# 凡對 $FW_IP:8080 連線者, 則轉址至 192.168.1.3:80
#$IPTABLES -t nat -A PREROUTING -p tcp -d $FW_IP --dport 8080 -j DNAT --t192.168.1.3:80
###-----------------------------------------------------###

###-----------------------------------------------------###
# 拒絕某一內部 IP 使用某一通道
###-----------------------------------------------------###


#--------------------------------------------------------------------
# NAT對外連線鎖 TCP 埠,思考方向:不管進入封包,只管出去封包
# 被動式 ftp 在經過 port 21 協商後,開始傳資料時,會以本地端 1024:65535 對 ftp server:1024:65535溝通,只要限制
# 連線狀態為:「RELATED」及「ESTABLISHED」封包。即可避免 NAT 內電腦對外掃描,又可使用 FTP 服務
#--------------------------------------------------------------------
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 21 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --sport 1024:65535 --dport 1024:65535 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 對外 SSH 連線
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 22 -j ACCEPT
# 對外 SMTP 寄信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 25 -j ACCEPT
# 對外 DNS 查詢
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 53 -j ACCEPT
# 對外瀏覽網頁(含某些特定通報點採81埠)
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 80:81 -j ACCEPT
# POP3 收信
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 110 -j ACCEPT
# NTPDate 網路校時
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 123 -j ACCEPT
# HTTPS
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 443 -j ACCEPT
# VNC → TCP port range: 5900 ~ 5906
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 5900:5906 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 --dport 8080 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p tcp -s any/0 -j DROP

#--------------------------------------------------------------------
# UDP 埠的部分
#--------------------------------------------------------------------
# DNS查詢
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 53 -j ACCEPT
# VOIP電話
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 5060:5061 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 41000:41999 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 --dport 55000:65000 -j ACCEPT
$IPTABLES -A FORWARD -$FW_IFACE -p udp -s any/0 -j DROP


###-----------------------------------------------------###
# 拒絕外部 IP 連至內部 port 號
###-----------------------------------------------------###
......

虛擬主機(次網域)設定

虛擬主機(次網域)設定
虛擬主機這功能,可以為本台電腦底下某個 user 的個人網頁賦予正式的網址。
例如,我們可以把 http://por.tw/~【~的目錄名稱】/ 改成 http://【~的目錄名稱】.por.tw。在改造的過程要完成以下幾件事:

attachments/201304/2666978699.jpg

先在修改檔案 etc/bind/db.por.tw(你的網址)
 DNS Server 加一筆DNS 正解記錄:【【~的目錄名稱】.por.tw IN A 113.61.187.47】,與 dns.por.tw 共用相同的 IP。
例如: www.por.tw IN A 113.61.187.47


在 /etc/apache2/sites-available/ 加上 【~的目錄名稱】.por.tw 的站台資料,範例如下 :

建立檔案:【~的目錄名稱】wh2esites-available/【~的目錄名稱】wh2es

<VirtualHost 113.61.187.47>
ServerAdmin 【~的目錄名稱】@por.tw
ServerName 【~的目錄名稱】.por.tw
DocumentRoot /home/【~的目錄名稱】/public_html/
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /home/【~的目錄名稱】/public_html/>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
allow from all
AddType application/x-httpd-php .php
</Directory>

</VirtualHost>

在 /etc/apache2/sites-enabled/ 底下做鍵結
root@dns: # cd /etc/apache2/sites-enabled/
root@dns: /etc/apache2/sites-enabled/ # ln -s /etc/apache2/sites-available/【~的目錄名稱】wh2es

最後重新啟動 DNS 及 Apache2 Server 啟用新設定值
root@dns: # /etc/init.d/bind9 restart
root@dns: # /etc/init.d/apache2 restart

----------------------------------------------------------------------------------------------------

郵件伺服器 Postfix 功能概述

郵件伺服器 Postfix 功能概述

Postfix支援的環境:
Postfix 可以在 AIX、BSD、HP-UX、IRIX、LINUX、MacOS X、Solaris、 Tru64 UNIX,以及其它 UNIX 平台上執行。
它需要 ANSI C、 POSIX.1 函式庫,以及 BSD 通訊插座(sockets)。
要運行 Postfix 的檔案系統必須有以下條件:若變更檔案名稱,其 inode 編號仍能保持不變,而且,在 fsync() 函式成功回傳之後,能正常地儲存信件,甚至當檔案在稍後的時間點改變檔名時亦然。

Postfix的設定方式簡單、進階門檻低,更重要的是,Postfix採用模組化的設計,讓郵件伺服器運作穩定、效能卓越、安全性無虞。
Postfix和DNS、POP3、IMAP、資料庫、LDAP、SASL、Dovecot、SMTP授權認證、TLS憑證等組合應用。
Postfix的傳輸限制和內容過濾功能,協助網管人員阻絕垃圾郵件。
運用外部程式,建立過濾垃圾郵件及病毒信件的機制。
建立DomainKeys、DKIM,以防止網域被人偽造。
使用原始碼編譯安裝Postfix和各種模組的方法。

attachments/201304/2568342678.jpg

以下是 Postfix 主要功能列表:
其中某些功能需要搭配第三方提供的函式庫 (例如: LDAP, SQL, TLS)。
有些功能,必須是作業系統有提供支援,而且 Postfix 知道如何去運用時,才會正常可用。
(例如:IPv6,連接快取)。

Postfix支援的協定:
Postfix 2.2     Connection cache for SMTP
Postfix 2.3     DSN status notifications
Postfix 2.3     Enhanced status codes
Postfix 1.0     ETRN on-demand relay
Postfix 2.2     IP version 6
Postfix 1.0     LMTP client
Postfix 2.0     MIME (including 8BITMIME to 7BIT conversion)
Postfix 1.0     Pipelining (SMTP client and server)
Postfix 1.0     SASL authentication
Postfix 2.2     TLS encryption and authentication
Postfix 1.1     QMQP server
棄置信件控管
Postfix 2.1     Access control per client/sender/recipient/etc.
Postfix 2.1     Address probing callout
Postfix 1.1     Content filter (built-in, external before queue, external after queue)
Postfix 2.1     Greylisting plug-in
Postfix 2.1     SPF plug-in
Postfix 2.2     SMTP server per-client rate and concurrency limits
支援的資料庫
Postfix 1.0     Berkeley DB database
Postfix 2.2     CDB database
Postfix 1.0     DBM database
Postfix 1.0     LDAP database
Postfix 1.0     MySQL database
Postfix 2.0     PostgreSQL database
支援的信箱格式
Postfix 1.0     Maildir and mailbox format
Postfix 1.0     Virtual domains
位址處理
Postfix 2.2     Masquerading addresses in outbound SMTP mail
Postfix 2.2     Selective address rewriting
Postfix 1.1     VERP envelope return addresses
【PHP網頁開啟錯誤的解決方法】Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 7905 bytes) in

總教頭您好:
我網站架設後,出現:Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 7905 bytes) in

PHP網頁開啟錯誤(無法正確顯示)

請問總教頭我該如何處理?


總教頭回覆:
原因:
容許記憶體大小錯誤(容許記憶體不夠大)所產生的錯誤
致命錯誤:容許記憶體大小XXXXXXXX位元組用盡(嘗試配置XXXX位元組)

解決方法,如下:


1.請修改修改 php.ini

php.ini在Linux主機下的路徑:

 /etc/php5/apache2/php.ini

請用搜尋找到以下字串:

  memory_limit =

你會找到以下字串:
memory_limit = 16M      ; Maximum amount of memory a script may consume (16MB)

//找到這行原16M修改為32M

memory_limit = 32M

2.重新啟動apache2

語法:
service apache2 restart


=======================================================

[MySQL改善] -- 如何使用SQL Profiler 效能分析器

mysql 的 sql 效能分析器主要用途是顯示 sql 執行的整個過程中各項資源的使用情況。分析器可以更好的展示出不良 SQL 的效能問題所在。
下面我們舉例介紹一下 MySQL SQL Profiler 的使用方法:

  • 首先,開啟 MySQL SQL Profiler

mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 0 |
+-------------+
1 row in set (0.00 sec)
mysql> SET profiling = 1;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT @@profiling;
+-------------+
| @@profiling |
+-------------+
| 1 |
+-------------+
1 row in set (0.00 sec)
預設情況下 profiling 的值為 0 表示 MySQL SQL Profiler 處於 OFF 狀態,開啟 SQL 效能分析器後 profiling 的值為 1.

  • 通過 sql 效能分析器,我們來對照一下 下列語句前後 2 次執行過程的差異,對我們瞭解 sql 的詳細執行過程是非常有說明的。

mysql> create table t_engines select * from t_engines1;
Query OK, 57344 rows affected (0.10 sec)
Records: 57344 Duplicates: 0 Warnings: 0
mysql> select count(*) from t_engines;
+----------+
| count(*) |
+----------+
| 57344 |
+----------+
1 row in set (0.00 sec)
mysql> select count(*) from t_engines;
+----------+
| count(*) |
+----------+
| 57344 |
+----------+
1 row in set (0.00 sec)
mysql> SHOW PROFILES;
+----------+------------+-------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+-------------------------------------------------+
| 26 | 0.10213775 | create table t_engines select * from t_engines1 |
| 27 | 0.00032775 | select count(*) from t_engines |
| 28 | 0.00003850 | select count(*) from t_engines |
+----------+------------+-------------------------------------------------+
15 rows in set (0.01 sec)
mysql> SHOW PROFILE FOR QUERY 27;
+--------------------------------+------------+
| Status | Duration |
+--------------------------------+------------+
| (initialization) | 0.00000425 |
| checking query cache for query | 0.00004050 |
| checking permissions | 0.00001050 |
| Opening tables | 0.00018250 |
| System lock | 0.00000450 |
| Table lock | 0.00001775 |
| init | 0.00001075 |
| optimizing | 0.00000550 |
| executing | 0.00002775 |
| end | 0.00000450 |
| query end | 0.00000325 |
| storing result in query cache | 0.00000400 |
| freeing items | 0.00000400 |
| closing tables | 0.00000500 |
| logging slow query | 0.00000300 |
+--------------------------------+------------+
15 rows in set (0.00 sec)
mysql> SHOW PROFILE FOR QUERY 28;
+-------------------------------------+------------+
| Status | Duration |
+-------------------------------------+------------+
| (initialization) | 0.00000350 |
| checking query cache for query | 0.00000750 |
| checking privileges on cached query | 0.00000500 |
| checking permissions | 0.00000525 |
| sending cached result to client | 0.00001275 |
| logging slow query | 0.00000450 |
+-------------------------------------+------------+
6 rows in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =27 ORDER BY SEQ;
+----------+
| DURATION |
+----------+
| 0.000326 |
+----------+
1 row in set (0.00 sec)
mysql> SELECT sum( FORMAT(DURATION, 6)) AS DURATION FROM INFORMATION_SCHEMA.PROFILING WHERE QUERY_ID =28 ORDER BY SEQ;
+----------+
| DURATION |
+----------+
| 0.000039 |
+----------+
1 row in set (0.00 sec)
mysql>
從上面的例子中我們可以清晰的看出 2 次執行 count 語句的差別, SHOW PROFILE FOR QUERY 27 展現的是第一次 count 統計的執行過程,包括了 Opening tables 、 Table lock 等操作 。而 SHOW PROFILE FOR QUERY 28 展示了第二次 count 統計的執行過程 , 第二次 count 直接從查詢快取中返回 count 統計結果,通過對照 2 次統計的總執行時間發現,快取讀的速度接近物理讀的 10 倍。通過使用 SQL 效能分析器可以說明我們對一些比較難以確定效能問題的 SQL 進行診斷,找出問題根源。
本Linux主機伺服器架設基地立志於收集各類Linux主機伺服器架設、網站架設及網頁設計技術教學資訊,便於本人和廣大網友及網友查詢檢索,無論公司或個人認為本站存在侵權內容均可與本站聯繫,任何此類反饋資訊一經查明屬實後,將立即移除!