win2000/2003 Php+ZendOptimizer+Mysql+eaccelerator配置及基礎優化全攻略

 
win2000/2003 Php+ZendOptimizer+Mysql+eaccelerator配置及基礎優化全攻略
首先,下載需要安裝的軟件
Php-4.4.1 (php-4.4.1-Win32.zip)

ZendOptimizer-2.6.0 (ZendOptimizer-2.6.0-Windows-i386.exe)

Mysql-4.0.26 (mysql-4.0.26-win32.zip)

Eaccelerator 加速及緩存軟件 (eaccelerator.rar)
當然,這個eaccelerator針對php有不同版本的,如果您安裝的不是php4.4.1,可以在這裏找到您需要的版本
http://www.arnot.info/eaccelerator/

phpMyAdmin-2.7.0-pl1  (phpMyAdmin-2.7.0-pl1.zip) Mysql管理軟件,日常維護必備


第一節,基礎安裝。
一,安裝mysql
首先,我們安裝Mysql 4.0.26,之所以選擇這個版本,是因爲這個版本比較穩定,
而且有關字符集和兼容性也沒那麼麻煩,如果沒有特殊需要,不推薦使用Mysql4.1和mysql5.0
新的版本,也許功能上更強,但是沒有經歷過太長時間的考驗,穩定性和兼容性及使用便捷性不是很佳

下載mysql-4.0.26-win32.zip,解壓縮,直接運行安裝文件。
我是裝在D:/mysql 因爲C盤經常會因爲各種原因重裝系統,數據放在該盤不易備份和轉移
選擇安裝目錄, D:/mysql  ,提示目錄不存在,建立與否,確認,然後按照提示一路安裝下去即可

安裝完畢後,運行 D:/mysql/bin/mysqld-nt.exe
然後運行  D:/mysql/bin/winmysqladmin.exe
輸入帳號 root 密碼 任意輸入  (因爲這一步的密碼設置,實際上是不生效的,需要使用phpmyadmin修改確認)
重新啓動服務器,檢查系統服務中,是否如圖所示

至此mysql的基本 安裝完成,進一步的設置和My.ini優化,將在下一節說明

二,安裝PHP

需要說明的是
php有CGI和ISAPI是兩種  運行的方式

CGI 更消耗資源,容易因爲超時而沒有反映,但是實際上比較安全
ISAPI是大C推薦的模式,負載能力強,節省資源,但是安全性略差於CGI
我的教程中說的是ISAPI方式

解壓縮php-4.4.1-Win32.zip,將第二層目錄php-4.4.1-Win32,改名爲 php
然後複製到 c:/ 成爲 c:/php 並將其目錄安全屬性,添加 everyone 可讀取和運行權限
但是鑑於NT系統種種怪異現象,我們可以給與everyone所有權限,只是安全性有一點點問題
(其理論性,只需要Guest組具備讀取和運行權限,以及IIS所用到的IIS_WPG可以讀取運行就行,但實際上往往會出現一些比較離奇的問題,本教程不作深入探討)
然後將php.ini-dist 改名爲 php.ini
將php4ts.dll複製到系統目錄的 system32目錄中
win2000:  c:/winnt/system32/
win2003:  c:/windows/system32/
打開,php.ini 找到

extension_dir = "./"
改爲

extension_dir = "c:/php/extensions/"
然後打開 Internet 信息服務(IIS)管理器
修改你的站點屬性,選中主目錄,使其可以使用純腳本

然後點 配置  進入 應用程序配置 點添加 如圖所示

可執行文件   C:/php/sapi/php4isapi.dll
擴展名   .php
將“腳本引擎”“確認文件是否存在”選中,然後確認。

win2000中,到此一般就可以支持php腳本了。

2K和03中也可以再設置ISAPI篩選其保其運行正常

如果狀態爲綠色箭頭,即可,該步非必要性操作。

win2003中,還需要設置IIS的WEB服務擴展器
添加一個新的WEB擴展器,擴展名爲.php,要求的文件C:/php/sapi/php4isapi.dll,設置擴展狀態爲允許。
設置完後如圖


完成所有操作後,重新啓動IIS服務。
到此,PHP的基本安裝已經完成,我們已經使網站支持PHP腳本。
檢查方法是,新建一個文本文件,內容爲

<?php phpinfo(); ?>
改名爲 php.php
放到您的網站根目錄,訪問這個文件,如果顯示了您的php詳細信息,即成功,類似



關於進一步設置和php.ini的優化,我們將在下一節繼續探討。

三,安裝ZendOptimizer

安裝ZendOptimizer,不僅是一些商用PHP必備的條件,也可以大幅度的提高php文件運行的效率。
下載ZendOptimizer-2.6.0-Windows-i386.exe 直接運行安裝
請注意如下提示,根據提示仔細安裝。
必須選擇您使用的WEB SERVER 爲IIS,否則將有不可預知的錯誤發生。如圖


確認後,下一步,點擊瀏覽,選擇您的php.ini所在目錄,這一點也不能錯。如圖


然後根據提示安裝,過程中,他會 停止 和 重新啓動 您的IIS服務,並將原 php.ini 備份爲 php.ini.Zend_Optimizer_bak
如果一切順利,您的 php.ini文件的尾部,將多出

[Zend]
zend_extension_manager.optimizer_ts="C:/Program Files/Zend/Optimizer/lib/Optimizer-2.6.0"
zend_extension_ts="C:/Program Files/Zend/Optimizer/lib/ZendExtensionManager.dll"
zend_optimizer.optimization_level=15
並且檢查C:/Program Files/Zend/Optimizer/lib/Optimizer-2.6.0 的目錄安全屬性是否有系統讀取和運行的權限

至此,ZendOptimizer的基本安裝已經完成,更多設置和優化,將在下一節說明。

基本安裝到此結束,此環境已經完全可以運行discuz及各種php程序。
下面我們來講基本的設置和優化。
基礎設置及優化

第二節,基礎設置及優化
關鍵字   my.ini  php.ini  eaccelerator

一,Mysql的進一步設置及優化。
登錄數據庫
  “命令提示字符”窗口錄入,
  錄入cd C:/mysql/bin 並按下回車鍵,將目錄切換爲 cd C:/mysql/bin
  再鍵入命令mysql -uroot -p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql>

  修改密碼
  C:/mysql/bin提示符下錄入:
  格式:mysqladmin –u用戶名 -p舊密碼 password 新密碼
  例如:給root加個密碼ab12。鍵入以下命令:
  mysqladmin -uroot password ab12

  建立數據庫
  格式:create database 庫名;
  例如:建立新數據庫discuz
  在MYSQL的提示符下:mysql> 錄入 create database discuz;

  顯示數據庫
  格式:show databases;
  注意是databases而不是database

  建立新用戶
  格式:grant all privileges on 數據庫.* to 用戶名@登錄主機 identified by "密碼";
  例如:增加一個用戶test密碼爲1234,讓他只可以在localhost上登錄,並可以對數據庫discuz進行所有的操作(localhost指本地主機,即MYSQL數據庫所在的那臺主機),
  在MYSQL的提示符下:mysql> 錄入grant all privileges on discuz.* to test@localhost identified by "1234";

  通過以上操作,你建立一個新的數據庫 discuz,並增加了一個名爲test對discuz數據庫有所有操作權限。

  注意:以上僅僅是簡單的Mysql操作命令,如果你需要了解更加詳細的資料,請查閱Mysql相關操作說明文檔。

點擊  《MySQL管理員指南》

首先,在上一節,我們安裝的mysql,實際上沒有設置root帳號的密碼,這是極不安全的
下載 phpMyAdmin-2.7.0-pl1.zip 將子目錄 phpMyAdmin-2.7.0-pl1 修改爲 任意名稱,複製到您的網站根目錄
這個目錄的名稱最好複雜,不易被猜解,防止他人使用
然後修改config.default.php
找到

$cfg['PmaAbsoluteUri'] = '';
修改爲

$cfg['PmaAbsoluteUri'] = 'http://test.muzone.cn/89xd983s';
即您的網站網址及phpmyadmin具體所在目錄

找到

$cfg['blowfish_secret'] = '';
修改爲

$cfg['blowfish_secret'] = 'muzone'
;
這個地方的值主要用作與加密您的cookie,可以任意設置

找到

$cfg['Servers'][$i]['auth_type']     = 'config';
修改爲

$cfg['Servers'][$i]['auth_type']     = 'cookie';
此處爲關鍵修改,設置完後,只有輸入正確的帳號和密碼纔可以管理您的mysql

全部修改完畢,保存後,通過您的phpmyadmin 訪問並管理您的mysql
第一次登陸,由於我們沒有設置root的密碼,所以帳號填 root 密碼空,即可登陸
進入後第一件事情,就是修改root帳號的密碼
登陸以後,點權限,修改root帳號,點最後的編輯按鈕
設置密碼,如圖



密碼設置成功後,需要重新登陸,至此,便可以對mysql進行各種管理,phpmyadmin的操作網上有很多教程
我這裏就不詳細講了
至於 my.ini的設置,我們將在下一節詳細講解

二,安裝 Eaccelerator 加速及緩存軟件
安裝 Eaccelerator 加速及緩存軟件,可以加速php文件的讀取和運行速度,並將一些mysql查詢及php文件緩存起來
減輕服務器的負擔,從而達到對論壇的大幅度加速和負載能力的提高,這個軟件我在許多大站上作過試驗
效果非常顯著!其效果可詢問若干長期由我維護的大論壇站長。

安裝eaccelerator非常簡單,
首先,下載eaccelerator.rar
解壓縮後,一個是安裝說明,一個是所需要的dll文件。
將eaccelerator_win_4.4.1.dll 複製到  c:/php/extensions/

QUOTE:
打開c:/php/php.ini
找到

[Zend]
zend_extension_manager.optimizer_ts="C:/Program Files/Zend/Optimizer/lib/Optimizer-2.6.0"
zend_extension_ts="C:/Program Files/Zend/Optimizer/lib/ZendExtensionManager.dll"
zend_optimizer.optimization_level=15

替換爲

[Zend]
zend_extension_ts="C:/php/extensions/eaccelerator_win_4.4.1.dll"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="c:/temp"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
zend_extension_manager.optimizer_ts="C:/Program Files/Zend/Optimizer/lib/Optimizer-2.6.0"
zend_extension_ts="C:/Program Files/Zend/Optimizer/lib/ZendExtensionManager.dll"
zend_optimizer.optimization_level=15
在C盤根目錄建立一個文件夾, c:/temp  將這個目錄授予 everyone 所有權限(實際上只要有寫入,修改,讀取即可)
重新啓動IIS
在phpmyadmin中,察看php信息,看看是否如圖所示


如果有加載eaccelerator的信息,說明安裝成功。

至此,對於php的第一步優化完成。

下面我們要修改php.ini的其它項

二,對php.ini進行最基本的設置和優化
對於php.ini的優化和設置,非常多樣化,根據不同的程序需要和服務器配置,各人都有不同的方案
這裏我不會說的太過詳細,僅提供一些基本的。
大家可以閱讀 php.ini 基本 中文說明   http://club.muzone.cn/viewthread.php?tid=27800

首先,一般由於程序驗證碼需要,我們需要打開GD庫的支持
第一節中,我們已經設置好了擴展庫的目錄,即extension_dir = "c:/php/extensions/"
下面我們只需要找到

;extension=php_gd2.dll
將前面的冒號去掉,即

extension=php_gd2.dll
然後保存php.ini,即可

然後,我們可以先做一項對於頁面處理效果比較明顯的設置

QUOTE:
output_buffering = Off
  輸出緩存允許你甚至在輸出正文內容之後發送 header(標頭,包括cookies)行 其代價是輸出層減慢一點點速度。你可以使用輸出緩存在運行時打開輸出緩存, 或者在這裏將指示設爲 On 而使得所有文件的輸出緩存打開。
  output_handler = ; 你可以重定向你的腳本的所有輸出到一個函數,
  那樣做可能對處理或以日誌記錄它有用。
  例如若你將這個output_handler 設爲ob_gzhandler, 則輸出會被透明地爲支持gzip或deflate編碼的瀏覽器壓縮。
  設一個輸出處理器自動地打開輸出緩衝。
找到這個

output_buffering = Off
修改爲

output_buffering = On
注意,不要設置數值,只需要設置爲On即可。

相應的,你還可以在你的PHP程序後臺,打開gzip支持,也是優化的一項內容。

有些朋友爲了安全,還啓用了php的安全模式,這個也是一辦法,但是比較麻煩
大家可以到網上搜索一項相關的內容,我這裏就不說了,畢竟對於效率沒什麼顯著的意義。

另外有些朋友需要使用全局變量和MAGIC,這是一些php程序的必備條件,
可以打開,不過安全性能將降低,方法很簡單。
找到

register_globals = Off ;


magic_quotes_gpc = Off ;
將其修改爲On即可

還有,一些朋友經常反映無法上傳較大的文件或者後臺備份數據經常超時,那麼可以找到

max_execution_time = 30     ; 這個是每個腳本運行的最長時間,可以自己修改加長,單位秒
max_input_time = 60        ; 這是每個腳本可以消耗的時間,單位也是秒
memory_limit = 8M      ; 這個是腳本運行最大消耗的內存,也可以自己加大
upload_max_filesize = 2M ; 上載文件的最大許可大小 ,自己改吧,一些圖片論壇需要這個更大的值

關於效率,還有一個,就是,php.ini的zend配置,在php.ini中,底部
有一行

zend_optimizer.optimization_level=15
如果您的機器配置足夠好,可以優化這裏

QUOTE:
這裏最爲重點的部分,仔細看!Zend Opt總共有10個優化過程,從理論上說開的越多性能越好。當然,理論和實際永遠都存在着差距。優化過程開啓的越多對性能消耗也相對也越大,Zend Opt的10個優化過程並不相同也就是說效果不是平均的。Zend公司定義的最高值(High模式)爲15,這裏15指的是開啓1-4號優化過程。當然,很多朋友並不滿足於此,畢竟最高也只開啓4個優化過程連總數的一半都沒有。各個優化過程的對應的數字代碼(值)如下:

       不使用      0  <= 如果這樣不如不裝,還能節約點內存說!
優化過程1(PASS1) 1
優化過程2(PASS2) 2
優化過程3(PASS3) 4
優化過程4(PASS4) 8
優化過程5(PASS5) 16
優化過程6(PASS6) 32
優化過程7(PASS7) 64
優化過程8(PASS8) 128
優化過程9(PASS9) 256
優化過程10(PASS10) 512
所以15只是開了前四個,如果您的內存足夠多,也可以開更高,如設置爲1023,即打開所有加速過程

12月21日補充,一些朋友反映,php經常報錯,顯示PHP has encountered an Access Violation at XXXXXX
很多人說,是php版本的問題,其實不然,可以從四個地方來看這個問題
1,是否zend所需的dll文件所在目錄給的權限不夠,必須有讀取和運行的權限
2,是否使用的2003,設置過應用池,比如池中限制了什麼什麼,調整一下再試試看,是否好了,呵呵
3,php.ini有兩個地方沒有設置,而且一些程序必須用到的

A

將;upload_tmp_dir該行的註釋符,即前面的分號“;”去掉,使該行在php.ini文檔中起作用。upload_tmp_dir是用來定義上傳文件存放的臨時路徑,在這裏你還可以給其定義一個絕對路徑,例如:upload_tmp_dir = d:upload  當然,此時你的d:upload目錄必須有讀寫權限。
這裏我設置爲
upload_tmp_dir = c:/temp  (因爲前面建立了這個文件夾,我圖省事,呵呵)

B
出現這樣的錯誤語句一般是因爲你的php.ini中關於session.save_path一項沒有設置好,解決的方法是將session.save_path和session.cookie_path 設置置爲
   session_save_path = c:/temp
   session.cookie_path = c:/temp
   然後在c:/目錄下建立一個temp目錄,即可(前面我們的eaccelerarot正好用到,建立過這麼一個文件夾)

最後
還有一些關於郵件的設置,大家如果裝了mail server 還有需要在win下使用郵件發送的,可能需要設置
大家根據我的中文說明自己調整
進階設置及優化

第三節中,暫時沒有想到有什麼可以給大家說得,只有大家比較關心的
mysql優化了

所以先說說這個,其實這個,很複雜,對於不同的網站,其在線,訪問量,帖子數量,網絡情況,以及機器配置
都有關係,優化不是一次可以完成的,需要不斷的觀察和調試,以取得最佳效果
下面我引用 Asiwish和老高的兩篇優化措施,給大家看看

這些設置,只要通過修改 win2000的c:/winnt/my.ini 或者 win2003的 c:/windows/my.ini 來實現

首先,我們打開這個文件,先將最底部的密碼項改成其它的,這個對數據庫本身沒影響,主要是防止一些有心人獲取這個密碼,對我們不利

然後大家看看兩個例子,其中一些設置,略懂的英文的,即明白是什麼意思,
不懂得可以去 http://cb.kingsoft.com  查單詞,我懶得一個個對照寫說明了
一個是 千人在線,1G內存的

QUOTE:
#This File was made using the WinMySQLAdmin 1.4 Tool
#2004-2-23 16:28:14

#Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions

[mysqld]
basedir=D:/mysql
#bind-address=210.5.*.*
datadir=D:/mysql/data
#language=D:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
set-variable    = max_connections=1500
skip-locking
#skip-networking
set-variable        = key_buffer=384M
set-variable        = max_allowed_packet=1M
set-variable        = table_cache=512
set-variable        = sort_buffer=2M
set-variable        = record_buffer=2M
set-variable        = thread_cache=8
# Try number of CPU's*2 for thread_concurrency
set-variable        = thread_concurrency=8
set-variable        = myisam_sort_buffer_size=64M
#set-variable        = connect_timeout=5
#set-variable        = wait_timeout=5
server-id        = 1
[isamchk]
set-variable        = key_buffer=128M
set-variable        = sort_buffer=128M
set-variable        = read_buffer=2M
set-variable        = write_buffer=2M

[myisamchk]
set-variable        = key_buffer=128M
set-variable        = sort_buffer=128M
set-variable        = read_buffer=2M
set-variable        = write_buffer=2M
[WinMySQLadmin]
Server=D:/mysql/bin/mysqld-nt.exe
這個方案,整體夠用了,但是在pconnect和最大連接數上,需要研究
max_connections沒必要那麼大,我個人認爲幾百就夠,否則給服務器加大了不少負擔,經常會當機
連接超時的設置也要根據實際情況調整,大家可以自由調整,然後觀察效果如何。



下面是老高兩年前的一些建議,大家參考一下

QUOTE:
  7、MYSQL 的優化(/etc/my.cnf)
        1)確認在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”參數;
        2)確認在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”參數;
        3)如果不需要的話,可以將二進制日誌(binlog)停掉,方法是將“log-bin”註釋掉;
        4)在內存允許的情況下,對一些參數進行重新配置,目標在於將大部分操作集中於內存中,儘量不進行磁盤操作,對於我的 MYSQL 服務器我是如下修改的,基於 2G 內存情況:

        [mysqld]
        set-variable    = key_buffer=512M
        set-variable    = max_allowed_packet=4M
        set-variable    = table_cache=1024
        set-variable    = thread_cache=64
        set-variable    = join_buffer_size=32M
        set-variable    = sort_buffer=32M
        set-variable    = record_buffer=32M
        set-variable    = max_connections=512
        set-variable    = wait_timeout=120
        set-variable    = interactive_timeout=120
        set-variable    = max_connect_errors=30000
        set-variable    = long_query_time=1
        set-variable    = max_heap_table_size=256M
        set-variable    = tmp_table_size=128M
        set-variable    = thread_concurrency=8
        set-variable    = myisam_sort_buffer_size=128M

        你可以根據“show status”命令返回的狀態進行微調。我主要注意以下變量的數值,越小越好,最好爲零:)
        Created_tmp_disk_tables
        Created_tmp_tables
        Created_tmp_files
        Slow_queries
另外 mysql wait_timeout 那個值設置大了沒用 做10左右就可了 (大C說得)

wait_timeout是使用長久連線時 空閒進程的控制 只要數據庫在連接狀態 他是不進行干預的 不管是否有查詢或更新操作 把這個設置小一點 再使用pconnect就比較理想了 ;)

timeout的時間﹐我的經驗值是5-20﹐看你的SERVER的訪問量了~~ (夢飛說的)

訪問量越大 這個值就應該越小 否則留出的空閒進程太多 會佔用不必要的內存
在一個15分鐘在線3000人的論壇上 設置爲3比較合適 同時打開pconnect

另外,我再引用一篇文章

數據庫連接過多的錯誤,可能的原因分析及解決辦法

QUOTE:
分析

系統不能連接數據庫,關鍵要看兩個數據:
1、數據庫系統允許的最大可連接數max_connections。這個參數是可以設置的。如果不設置,默認是100。最大是16384。
2、數據庫當前的連接線程數threads_connected。這是動態變化的。
查看max_connections、max_connections的辦法見後。

如果 threads_connected == max_connections 時,數據庫系統就不能提供更多的連接數了,這時,如果程序還想新建連接線程,數據庫系統就會拒絕,如果程序沒做太多的錯誤處理,就會出現類似強壇的報錯信息。

因爲創建和銷燬數據庫的連接,都會消耗系統的資源。而且爲了避免在同一時間同時打開過多的連接線程,現在編程一般都使用所謂數據庫連接池技術。

但數據庫連接池技術,並不能避免程序錯誤導致連接資源消耗殆盡。

這種情況通常發生在程序未能及時釋放數據庫連接資源或其他原因造成數據庫連接資源不能釋放,但強壇系統估計不會發生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強壇頁面時,不斷監視threads_connected的變化。如果max_connections足夠大,而threads_connected值不斷增加以至達到max_connections,那麼,就應該檢查程序了。當然,如果採用數據庫連接池技術,threads_connected增長到數據庫連接池的最大連接線程數時,就不再增長了。

從強壇出錯的情況看,更大的可能性是數據庫系統沒能進行適當地配置。下面提出一點建議。供參考

讓你們的工程師把MySQL的最大允許連接數從默認的100調成32000。這就不會老出現連接過多的問題了。


查看max_connections

進入MySQL,用命令:show variables
查看數據庫最大可連接數的變量值:max_connections



查看threads_connected

進入MySQL,用命令:show status
查看當前活動的連接線程變量值:threads_connected


設置max_connections

設置辦法是在my.cnf文件中,添加下面的最後紅色的一行:

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

[mysqld]
port=3306
#socket=MySQL
skip-locking
set-variable = key_buffer=16K
set-variable = max_allowed_packet=1M
set-variable = thread_stack=64K
set-variable = table_cache=4
set-variable = sort_buffer=64K
set-variable = net_buffer_length=2K
set-variable = max_connections=32000


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

修改完畢後,重啓MySQL即可。當然,爲了確保設置正確,應該查看一下max_connections。

注意:
1、雖然這裏寫的32000。但實際MySQL服務器允許的最大連接數16384;
2、除max_connections外,上述其他配置應該根據你們系統自身需要進行配置,不必拘泥;
3、添加了最大允許連接數,對系統消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,設置類似,但設置的格式要稍作變通。

可見,mysql的優化,是多樣化,且根據環境不同,必須靈活調整的,大家不可生搬硬套,自己慢慢體會吧


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章