如何在Windows Server 2008的IIS 7.0下配置MySQL+PHP环境

本文致力于描述如何在Windows Server 2008下安装配置用于开发或产品的MySQL及PHP环境。

环境说明:

  • 操作系统:Windows Server 2008 Standard Edition,英文版(由Microsoft DreamSpark支持)
  • 相关软件:Internet Information Services 7.0
  • MySQL:MySQL 5.0.67, Windows Essentials (x86)。(最新版下载地址
  • PHP:PHP 5.2.6 zip package。(最新版下载地址

1. 安装MySQL

这似乎是一个波澜不惊的过程,任何人都能做好。
[singlepic=18162]
安装欢迎界面。
[singlepic=18163]
这一步选Custom自定义安装比较好,指定安装位置,建议安装在D盘,避开系统盘C盘。由于UAC的问题,在Vista和2008下,C盘的文件搞得很特殊,一些原来好好的程序,由于权限问题的存在,会出现莫名奇妙的故障。

[singlepic=18164]
自定义MySQL安装路径到D盘。
[singlepic=18165]
结束了,立即启动配置向导。我在2008下这里点Finish没有效果,配置向导并没有启动,只好在开始菜单启动之。
[singlepic=18166]
配置向导欢迎界面。
[singlepic=18167]
默认使用Detailed Configuration,这样可控制性高些。
[singlepic=18168]
选择MySQL服务器的类型,不同的选项会影响MySQL内存分配策略。
Developer Machine会使用最小的内存;
Server Machine指MySQL和其他服务,如Web等共存在一个服务器的情况,将使用中等的内存;
Dedicated MySQL Server Machine适用于,此服务器仅仅用于MySQL服务的情况,MySQL将会利用全部内存。
[singlepic=18169]
适用何种数据引擎。
Multifunctional Database:一般通用服务器的选项,InnoDB和MyISAM都可以使用。
Transactional Database Only:在这种情况下,InnoDB是主要的数据引擎并得到性能优化。一般而言,主流开源PHP项目使用MyISAM的还是比较多,如WordPress和Discuz等。但是也有例外,MediaWiki和Gallery 2都使用InnoDB作为其主要数据库表的数据引擎。注意,在这种模式下,MyISAM也可以使用。
None Transactional Database Only:上面一种情况的反面,但是InnoDB就不能用了。可以理解为MySQL 4时代的样子。
[singlepic=18170]
指定数据文件的存储位置,非常重要!
不要把数据存储在C盘,最好存在另外一块物理磁盘,最不济也是其他分区。否则系统挂掉数据也没了。
[singlepic=18171]
并发连接数的假设。
Decision Support(DSS)/OLAP:在这种情况下,数据库服务器主要用于数据存储,而不是并发服务。系统假设某一时刻并发存在约20个同时请求。
Online Transaction Processing(OLAP):这种情况适用于大部分高负载的Web服务器,同时约有500个请求。注意,这个假设还算相当宽泛的,500个请求是同时并发的,也许此刻有5000人在线,但是同时请求数据(查询数据库)的不会太多。
Manual Setting:手动设置一个数目。我想除非你用了一个超级服务器,不然一般不会去设置这种数目。Linux下调节这个数字会达到性能优化的效果。
[singlepic=18172]
启动TCP/IP服务,监听3306端口。如果Web Server也在本机,不打开穿越防火墙也是可以的,反而安全些。你使用phpMyAdmin管理的时候,那个连接其实还是本机到本机的连接,不通过防火墙。穿越防火墙的访问一般发生在,你在另外的Web Server安装应用,然后把数据库保存在这台服务器,然后使用一个能够远程连接MySQL的帐户来访问的情况。这种情况还是比较少见的(WordPress安装向导里说99%情况都不是这样的)。
[singlepic=18173]
字符集设置,建议选择第二个,Best Support For Multilingualism,这样会默认使用UTF-8字符集,对中文支持好。
[singlepic=18174]
建立Windows服务,自动启动。把MySQL的bin目录加入Path环境变量,这样你可以在命令提示符下直接用mysql或者mysqldump之类的命令。
[singlepic=18175]
设置root用户密码。产品机器上不要打开“Enable root access from remote machines”,也不要建立匿名用户。再次说明,不打开“Enable root access from remote machines”,你同样可以用同一台机器上的phpMyAdmin登陆root帐户。
[singlepic=18176]
设置完成。最近几个版本的MySQL做的好多了,以往这一步第一次从是出错,因为脚本不知道新设置的密码,会给新手不少疑惑。
[singlepic=18177]
打开一个Command Prompt,直接使用mysql命令登陆服务器。
[singlepic=18178]
看下数据库。到这里,MySQL就安装好了。

2. IIS 7.0下PHP的安装

我在这里讲最复杂的情况,使用zip安装包安装PHP。
[singlepic=18181,640,480]
首先把PHP解压到一个地方。由于UAC的缘故,最好放在D盘。我在这里放在D:\PHP下。此外,服务器配置的时候,一律不要用带中文的目录(完整路径中不要包含任何中文和其他奇怪的字符)。
[singlepic=18179]
首先先在IIS里的Advanced Setting中,给默认目录改个地方,避开C盘。
[singlepic=18192,640,486]
PHP在IIS里以一种ISAPI的形式出现。据新闻消息,IIS 7.0特别优化了对ISAPI的支持,尤其是对PHP。有机会对比测试一下。
[singlepic=18191,640,482]
Windows Server 2008中最大的好处就是各个组件都可以自定义地安装,而不是Vista般一股脑装好,很好好强大却很慢很复杂。IIS也是如此。IIS可以不装任何ISAPI而成为Apache一样的静态HTML服务器。并不是没有用,作为镜像服务器提供下载之类,这样的高性能服务器是必须的。首先在System Manager中的IIS上,Add Role Services中确认安装了Application Development,否则无法使用ASP.NET和PHP这类服务器脚本。
[singlepic=18193,640,486]
首先在ISAPI Filters里添加PHP。右键Add。
[singlepic=18194]
取个名字叫做PHP,Executable地址选择到PHP的目录下的php5isapi.dll。这一步允许php5isapi.dll这个文件作为ISAPI的形式来运行。
[singlepic=18180,640,486]
然后需要告诉IIS,什么样的文件需要使用这个ISAPI来解释执行。打开Handler Mappings。
[singlepic=18182,640,486]
右键Add Script Map。
[singlepic=18183]
这里告诉IIS,所有符合*.php的文件,都要使用php5isapi.dll这个文件来解释执行,这条规则记做“PHP”。
[singlepic=18184]
Windows Server 2003的IIS6中,新添加的ISAPI默认是禁止的。在IIS7中,刚刚添加的ISAPI会询问是否默认打开。选择Yes,允许这条规则。
[singlepic=18196,640,480]
下面设置些PHP的内容。在PHP安装目录下,把php.ini.recommended这个文件重命名为php.ini,打开编辑之(注意,先编辑再复制到C盘去,否则没权限,提示保存失败。)。编辑的内容主要是PHP扩展,也就是PHP对MySQL的支持之类。
[singlepic=18195,640,486]
首先设置extension_dir这个变量到你的PHP目录下的ext。然后在Windows Extensions里面打开适当的扩展dll。一般,打开bz2,gd2,mbstring,mysql和mysqli就可以了。保存然后把这个文件拷贝到C:\Windows下。此外说一下,有时候你的某个加载项可能会加载失败,这是php.ini误导人的地方,这里的dll是按照英文字典序排序,实际中,某个dll可能有其依赖dll要先于它打开。这时候如果先打开有依赖dll的,就会加载失败。这种情况下,在phpinfo中可以看到其他加载项,唯独看不到这一个。当然,如果别的也看不到,说明配置有问题,ext的全部dll都没找到。
[singlepic=18187,640,480]
可能也是UAC的缘故?按照道理,这样设置应该足以运行了。我的phpinfo仍然加载不了MySQL和MySQLi。我只好把PHP目录下的dll和ext下的dll都拷贝到C:\Windows\System32下。(把PHP目录和ext目录加入Path变量也是无效的,我猜测是加载中需要其他位于C盘的dll,UAC认为不在同一个安全级别下给禁止了。)
[singlepic=18185,640,480]
在Web目录下建立index.php,写入一行代码:
[code=’c#’]

[/code]
这个命令会打印PHP的配置情况。看到上面的界面说明PHP安装成功。
[singlepic=18186,640,480]
关键其实不是看上面的界面,而是看MySQL和MySQLi有没有加载,否则一样用不了MySQL。没有MySQL的PHP,不就像没有一样嘛。MySQL和MySQLi成功加载后,应该可以搜索到上图所示的两段。
[singlepic=18188,640,486]
还有些杂事。IIS中要设置一下默认文档(Default Document),一般情况,按照这个顺序:index.htm;index.html;index.php;default.aspx
[singlepic=18190]
装个phpMyAdmin,设置登陆方式为http(libraries下的config.default.php中,默认是config),这样可以每次登陆时弹出对话框验证用户。
[singlepic=18189,640,384]
进入了phpMyAdmin。然后…
Do what ever you want.

本文图片使用Nocoo.Tools提供的工作窗口截图工具ScreenCapture截取。

发表评论