Professional Documents
Culture Documents
副 标 题 : win2000/2003 Php+ZendOptimizer+Mysql+eaccelerator 配 置 及 基 础 优 化 全 攻 略
关 键 字 discuz php zendoptimizer mysql eaccelerator my.ini php.ini 安 装 优 化
本帖即我原创,欢迎转贴,但请注明出处,另外如果大家还有哪方面感兴趣的我没写到,请跟帖,我将补
充
原 帖 地 址 http://club.muzone.cn/viewthread.php?tid=27794
首 先 , 下 载 需 要 安 装 的 软 件
Php-4.4.1
http://www.muzone.cn/soft/php-4.4.1-Win32.zip
ZendOptimizer-2.6.0
http://www.muzone.cn/soft/ZendOptimizer-2.6.0-Windows-i386.exe
Mysql-4.0.26
http://www.muzone.cn/soft/mysql-4.0.26-win32.zip
Eaccelerator 加 速 及 缓 存 软 件
http://www.muzone.cn/soft/eaccelerator.rar
当然,这个 eaccelerator 针对 php 有不同版本的 ,如果您安装的不是 php4.4.1,可以在这里找到您需要
的 版 本
http://www.arnot.info/eaccelerator/
phpMyAdmin-2.7.0-pl1 Mysql 管 理 软 件 , 日 常 维 护 必 备
http://www.muzone.cn/soft/phpMyAdmin-2.7.0-pl1.zip
第 一 节 , 基 础 安 装 。
一 , 安 装 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 方 式
extension_dir = "./"
改为
CODE:
[Copy to clipboard]
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 脚 本 。
检查方法是,新建一个文本文件,内容为
CODE:
[Copy to clipboard]
改 名 为 php.php
放 到 您 的 网 站 根 目 录 , 访 问 这 个 文 件 , 如 果 显 示 了 您 的 php 详 细 信 息 , 即 成 功 , 类 似
关 于 进 一 步 设 置 和 php.ini 的 优 化 , 我 们 将 在 下 一 节 继 续 探 讨 。
三 , 安 装 ZendOptimizer
CODE:
[Copy to clipboard]
[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";
点 击 《 MySQL 管 理 员 指 南 》
首 先 , 在 上 一 节 , 我 们 安 装 的 mysql , 实 际 上 没 有 设 置 root 帐 号 的 密 码 , 这 是 极 不 安 全 的
下载 phpMyAdmin-2.7.0-pl1.zip 将子目录 phpMyAdmin-2.7.0-pl1 修改为 任意名称,复制到您的
网 站 根 目 录
这 个 目 录 的 名 称 最 好 复 杂 , 不 易 被 猜 解 , 防 止 他 人 使 用
然 后 修 改 config.default.php
找到
CODE:
[Copy to clipboard]
$cfg['PmaAbsoluteUri'] = '';
修改为
CODE:
[Copy to clipboard]
$cfg['PmaAbsoluteUri'] = 'http://test.muzone.cn/89xd983s';
即 您 的 网 站 网 址 及 phpmyadmin 具 体 所 在 目 录
找到
CODE:
[Copy to clipboard]
$cfg['blowfish_secret'] = '';
修改为
CODE:
[Copy to clipboard]
$cfg['blowfish_secret'] = 'muzone'
;
这 个 地 方 的 值 主 要 用 作 与 加 密 您 的 cookie , 可 以 任 意 设 置
找到
CODE:
[Copy to clipboard]
$cfg['Servers'][$i]['auth_type'] = 'config';
修改为
CODE:
[Copy to clipboard]
$cfg['Servers'][$i]['auth_type'] = 'cookie';
此 处 为 关 键 修 改 , 设 置 完 后 , 只 有 输 入 正 确 的 帐 号 和 密 码 才 可 以 管 理 您 的 mysql
全 部 修 改 完 毕 , 保 存 后 , 通 过 您 的 phpmyadmin 访 问 并 管 理 您 的 mysql
第 一 次 登 陆 , 由 于 我 们 没 有 设 置 root 的 密 码 , 所 以 帐 号 填 root 密 码 空 , 即 可 登 陆
进 入 后 第 一 件 事 情 , 就 是 修 改 root 帐 号 的 密 码
登 陆 以 后 , 点 权 限 , 修 改 root 帐 号 , 点 最 后 的 编 辑 按 钮
设 置 密 码 , 如 图
二 , 安 装 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
如 果 有 加 载 eaccelerator 的 信 息 , 说 明 安 装 成 功 。
至 此 , 对 于 php 的 第 一 步 优 化 完 成 。
下 面 我 们 要 修 改 php.ini 的 其 它 项
二 , 对 php.ini 进 行 最 基 本 的 设 置 和 优 化
对于 php.ini 的优化和设置,非常多样化,根据不同的程序需要和服务器配置,各人都有不同的方案
这 里 我 不 会 说 的 太 过 详 细 , 仅 提 供 一 些 基 本 的 。
大 家 可 以 阅 读 php.ini 基 本 中 文 说 明 http://club.muzone.cn/viewthread.php?tid=27800
首 先 , 由 于 discuz 的 验 证 码 需 要 , 我 们 需 要 打 开 GD 库 的 支 持
第 一 节 中 , 我 们 已 经 设 置 好 了 扩 展 库 的 目 录 , 即 extension_dir = "c:/php/extensions/"
下面我们只需要找到
CODE:
[Copy to clipboard]
;extension=php_gd2.dll
将前面的冒号去掉,即
CODE:
[Copy to clipboard]
extension=php_gd2.dll
然 后 保 存 php.ini , 即 可
然后,我们可以先做一项对于页面处理效果比较明显的设置
QUOTE:
output_buffering = Off
输出缓存允许你甚至在输出正文内容之后发送 header(标头,包括 cookies)行 其代价是输出层
减慢一点点速度。你可以使用输出缓存在运行时打开输出缓存, 或者在这里将指示设为 On 而使得所有
文 件 的 输 出 缓 存 打 开 。
output_handler = ; 你 可 以 重 定 向 你 的 脚 本 的 所 有 输 出 到 一 个 函 数 ,
那 样 做 可 能 对 处 理 或 以 日 志 记 录 它 有 用 。
例如若你将这个 output_handler 设为 ob_gzhandler, 则输出会被透明地为支持 gzip 或 deflate 编
码 的 浏 览 器 压 缩 。
设一个输出处理器自动地打开输出缓冲。
找到这个
CODE:
[Copy to clipboard]
output_buffering = Off
修改为
CODE:
[Copy to clipboard]
output_buffering = On
注 意 , 不 要 设 置 数 值 , 只 需 要 设 置 为 On 即 可 。
相 应 的 , 你 还 可 以 在 你 的 discuz 后 台 , 打 开 gzip 支 持 , 也 是 优 化 的 一 项 内 容 。
有 些 朋 友 为 了 安 全 , 还 启 用 了 php 的 安 全 模 式 , 这 个 也 是 一 办 法 , 但 是 比 较 麻 烦
大家可以到网上搜索一项相关的内容,我这里就不说了,毕竟对于效率没什么显著的意义。
CODE:
[Copy to clipboard]
register_globals = Off ;
和
CODE:
[Copy to clipboard]
magic_quotes_gpc = Off ;
将 其 修 改 为 On 即 可
还有,一些朋友经常反映无法上传较大的文件或者后台备份数据经常超时,那么可以找到
max_execution_time = 30 ; 这个是每个脚本运行的最长时间,可以自己修改加长,单位秒
max_input_time = 60 ; 这 是 每 个 脚 本 可 以 消 耗 的 时 间 , 单 位 也 是 秒
memory_limit = 8M ; 这 个 是 脚 本 运 行 最 大 消 耗 的 内 存 , 也 可 以 自 己 加 大
upload_max_filesize = 2M ; 上载文件的最大许可大小 ,自己改吧,一些图片论坛需要这个更大的值
CODE:
[Copy to clipboard]
zend_optimizer.optimization_level=15
如果您的机器配置足够好,可以优化这里
QUOTE:
所以 15 只是开了前四个,如果您的内存足够多,也可以开更高,如设置为 1023,即打开所有加速过程
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 和 老 高 的 两 篇 优 化 措 施 , 给 大 家 看 看
首先,我们打开这个文件,先将最底部的密码项改成其它的,这个对数据库本身没影响,主要是防止一些
有 心 人 获 取 这 个 密 码 , 对 我 们 不 利
然后大家看看两个例子,其中一些设置,略懂的英文的,即明白是什么意思,
不 懂 得 可 以 去 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 说得)
另 外 , 我 再 引 用 一 篇 文 章
数据库连接过多的错误,可能的原因分析及解决办法
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
设 置 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
--------------------------------------------------------------------------------
注 意 :
1 、 虽 然 这 里 写 的 32000 。 但 实 际 MySQL 服 务 器 允 许 的 最 大 连 接 数 16384 ;
2 、 除 max_connections 外 , 上 述 其 他 配 置 应 该 根 据 你 们 系 统 自 身 需 要 进 行 配 置 , 不 必 拘 泥 ;
3 、 添 加 了 最 大 允 许 连 接 数 , 对 系 统 消 耗 增 加 不 大 。
4、如果你的 mysql 用的是 my.ini 作配置文件,设置类似,但设置的格式要稍作变通。
可见,mysql 的优化,是多样化,且根据环境不同,必须灵活调整的,大家不可生搬硬套,自己慢慢体
会 吧
我 这 次 的 教 程 , 就 写 到 这 里 , 感 谢 大 家 对 我 的 支 持
如果有什么不足,欢迎提出来,我做补充