You are on page 1of 22

win2000/2003 Discuz 生存 环境 搭建 及基 础优 化 攻略

副 标 题 : 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 方 式

解 压 缩 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 找到
CODE:
[Copy to clipboard]

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 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 文件的尾部,将多出

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";

  通过以上操作,你建立一个新的数据库 discuz,并增加了一个名为 test 对 discuz 数据库有所有操


作 权 限 。

  注意:以上仅仅是简单的 Mysql 操作命令,如果你需要了解更加详细的资料,请查阅 Mysql 相关操


作 说 明 文 档 。

点 击 《 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 帐 号 , 点 最 后 的 编 辑 按 钮
设 置 密 码 , 如 图

密码设置成功后,需要重新登陆,至此,便可以对 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
首 先 , 由 于 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 的 安 全 模 式 , 这 个 也 是 一 办 法 , 但 是 比 较 麻 烦
大家可以到网上搜索一项相关的内容,我这里就不说了,毕竟对于效率没什么显著的意义。

另 外 有 些 朋 友 需 要 使 用 全 局 变 量 和 MAGIC , 这 是 一 些 php 程 序 的 必 备 条 件 , discuz2.0 也 需 要


可 以 打 开 , 不 过 安 全 性 能 将 降 低 , 方 法 很 简 单 。
找到

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 ; 上载文件的最大许可大小 ,自己改吧,一些图片论坛需要这个更大的值

关 于 效 率 , 还 有 一 个 , 就 是 , php.ini 的 zend 配 置 , 在 php.ini 中 , 底 部


有一行

CODE:

[Copy to clipboard]

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 有 两 个 地 方 没 有 设 置 , 而 且 一 些 程 序 必 须 用 到 的

将 ;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 的优化,是多样化,且根据环境不同,必须灵活调整的,大家不可生搬硬套,自己慢慢体
会 吧

我 这 次 的 教 程 , 就 写 到 这 里 , 感 谢 大 家 对 我 的 支 持

如果有什么不足,欢迎提出来,我做补充

You might also like