经过一天的努力终于在Linux下搞定了,apache、MySql、Php的配置,中间走了不少弯路,有不少的教训,也总结出了一些经验,拿出来和大家分享。
到
www.mysql.com ,
www.apache.org , www.php.net下载mysql,apache,php的最新源码包
Ø mysql-max-5.0.17-linux-i686-glibc23.tar.gz
Ø httpd-2.2.0.tar.gz
Ø php-5.1.1.tar.gz
为了防止Linux系统的版本对xml的支持版本比较的,从
http://xmlsoft.org/sources/下载libxml2-2.6.11.tar.gz包。
Linux下访问外网的问题,还没有解决,我把所有的源码包都放在了ftp上,下面我们开始安装
登录到Linux下,访问
ftp://henu-softlab/free@172.20.1.5,从Apache目录下下载三个工具包,放到linux的目录下面,我选择的是
/usr/local 目录
2. 安装
MySql
a) ,使用tar 命令来将mysql的程序包解压,这是就会在local目录下新建一个mysql-max-5.0.17-linux-i686-glibc23的目录,mysql的程序都在被解压到该目录下。Tar zxvf mysql-max-5.0.17-linux-i686-glibc23.tar.gz
b) ,进入msql程序的目录,因为local目录下只有一个以mysql开头的命名的文件夹,所以这样用就会省很多事,也可以用目录的全名进入目录Cd mysql*
c) 使用 ./configure groupadd mysql
//添加一个用户组
useradd -g mysql mysql //在mysql用户组里添加一个名为mysql的用户,
添加用户组和用户的目的是因为在先前在linux下安装mysql时出现了找不到mysql用户的错误,导致mysql安装无法完成。
d) ,使用脚本,初始化数据库./scripts/mysql_install_db --user=mysql
e) 从后台启动mysql,这时会看到Starting mysqld daemon with databases from……的消息,证明已经成功,可以用ps -aux │ grep mysql 可以看到mysql当前正在运行的进程。./bin/mysqld_safe --user=mysql &
f) 到此为止,MySql安装成功
g) F
3. 安装
Apache
a) ,将Apache源码解压,Tar zxvf httpd-2.2.0.tar.gz
b) ,进入源码目录cd httpd httpd*
c) 配置,configure脚本给你一个很大的控制权来如何配置你的apache。你使用configure命令行的选项进行。你也可以用正确的环境变量作用于configure。对于一个由configure支持的选择列表,运行这个命令:
#./configure – help,
./configure --prefix=/usr/local/apache2 --enable-module=so --enable-module=rewrite --enable-shared=max,--prefix选项指明apache安装的目录,通过
enable-module参数告诉设置脚本,我们需要启动so和rewrite模块,so模块是用来提DSO支持的apache核心模块,而rewrite模块则是用意实现地址重写的模块,由于rewrite模块需要DBM支持,如果在初次安装时没有编译进apache,以后需要用到时需要重新编译整个apache才可以实现。为此除非你可以确定以后不会用到rewrite模块,否则还是建议你在第一次编译的时候把rewrite模块编译好。
enable-shared=max 这个参数的作用时编译apache时,把除了so以外的所有apache的标准模块都编译成DSO模块。而不是编译进apache核心内。
d) 安装
i. make 编译apache源码,
ii. make install 安装apache
iii. 上面是安装的一种方法,另外还可以一步完成,那就是make && make install,这个样子就不用,输两次命令。
e) 运行apache ,
i. 方法1:cd /usr/local/apache2/bin/,进入bin目录,然后./apachectl start,
ii. 方法2:、/usr/local/apache2/bin/apachectl start
iii. 其实这时会出现“httpd: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName”,这个问题的原因是在conf文件中没有设置servername,我们打开/usr/local/apache2/conf/httpd.conf,进行编辑,找到#ServerName new.host.name:80行,在其下添加 ServerName 127.0.0.1:80或者ServerName 机器名:80,也可以不加端口号,修改完毕后保存,然后用以下命令重启/usr/local/apache2/bin/apachectl restart
1. 安装
Php
a) tar zxvf php-5.1.1.tar.gz
b) cd php-5.1.1
c) ,configure脚本的第一个参数的意思还没有搞清楚,关键的目的是为了配置mysql,防止在调试Php程序找不到MySql的库文件
./configure --with-apxs2=/usr/local/httpd*/bin/apxs --with-mysql=/usr/local/mysql*
d) 不过这时会发现出现一个错误,就是这个系统的版本比较低的话,则出现配置错误,最后提示libxml需要2.6.11或者更高的版本,这个是因为PHP5.1.1要求的配置,所以应当先把系统对xml的最新支持库下载下来,安装过之后在进行PHP的配置安装,现在进入第5步
e) 安装xml最新支持库之后,重新对php进行配置,最后有 “
Thank you for using PHP” 的提示信息,ok,现在我们可以开始安装PHP了
f) make && make install
2. 安装
libxml2-2.6.11.tar.gz
步骤和前面的安装一样,
a) tar zxvf libxml2-2.6.11.tar.gz
b) cd libxml*
c) ./configure
d) Make && make install
3. PHP
与
Apache
整合
a) 既然我们已经成功安装上了Apache Web服务器和PHP,那么我们先来建一个Web站点来测试一下,看看结果是什么。F
i. 编辑
/usr/local/apache2/conf/httpd.conf,在最后面加上
NameVirtualHost IP地址(域名也可以,我的虚拟机的IP是172.20.172.14)
<VirtualHost> //这个和IIS下的虚拟目录相似
ServerAdmin root@域名(或IP)
DocumentRoot /var/www/doc //站点的文档所处的目录
ServerName www.test.com //网站的域名,不过想用这个访问是不现实的,因为没有进行域名解析
</VirtualHost>
编辑好conf文件之后我们利用
/usr/local/apache2/bin/apachectl restart命令重新启动apache服务。
ii. 新建过虚拟主机之后,我们在该主机文档存放处新建一个名为test.php的文件 ,<? Phpinfo() ?>,phpinfo方法是用来取php安装信息的
iii. 好了,所有的准备工作都作完了,我们来访问一下站点,在浏览器地址栏中输入
http://172.20.172.14/test.php ,大家肯定希望看到的是本机上php的安装信息,可惜结果是出乎意料,页面上竟然将test.php文件的内容原样输出了。为什么呢?我们已经安装了php的最新版本了,难道还不能使用php,那我们的工作岂不是白做了?大家想一下,我们刚才安装apache时没有配置apache支持php,其实这就是问题的根源所在。好的,既然找到了问题的原因,那么下面我们就来解决这个问题
iv. 编辑
/usr/local/apache2/conf/httpd.conf文件,找到 AddType application/x-compress .Z AddType application/x-gzip .gz .tgz;大约就在838行左右,这两个就是apache现在支持的程序类型,我们在下面添加AddType application/x-httpd-php .php
1. php
中文支持问题
a) 在第六步我们解决了浏览器访问php程序的问题,那么我们也想到,现在编码的问题,看看是不是可以正常显示中文,其实我说的是php页面的,不是html页面上的中文
b) 我们还在/var/www/doc(当然,这个目录可以是任意的,但必须是你的虚拟主机的文档所在地)建一个ch.php,并添加如下内容<?print “中文测试”?>,结果是可想而知的,因为我既然提到了这个问题那就说明结果有问题,结果就是乱码,我们来查看以下页面的编码,原来默认的是”ISO-8859-1”,我们换成GB2312的编码页面就可以正常显示。既然找到了原因,我们又会想到apache的配置问题了。
c) 编辑
/usr/local/apache2/conf/httpd.conf文件,找到ForceLanguagePriority Prefer Fallback,可以看到这一行下面就是apache支持的字符集的配置,我们在其下一行添加”AddDefaultCharSet GB2312”,保存文件,然后重启apache服务。
d) 再次浏览 ch.php,这次发现还是乱码,现在就是个问题了,既然我们都设置过了默认的字符集是GB2312了,为什么还是乱码呢?其实这个原因就是安装系统时安装的web服务启动的问题,我们利用”/etc/rc.d/init.d/httpd stop”将这个服务停掉。重新加载ch.php,这次发现完全正常了。
2. php
连接
mysql
a) 关于如何使用php操作mysql不是我来介绍的重点,我来介绍的是php连接mysql时出现的问题及解决方案。
b) 我们还使用test.php文件,去掉原来的内容,将一下代码添加进取
$link = mysql_connect("localhost","用户名","密码");
mysql_select_db("test",$link);
print ("Connected successfully");
$sql = 'SELECT * FROM tt';
$res = mysql_query($sql,$link);
print '<table><tr><th>测试数据</th></tr>';
while ($row = mysql_fetch_row($res)) {
print "<tr><td>$row[0]</td></tr>";
}
print "</table>";
mysql_close($link);、
c) 好的,我们在浏览一下test.php,大家是不是想着会将tt表里面的数据写到页面上了,这次又让大家失望了,竟然出现以下的错误“
Fatal error: Call to undefined function: mysql_connect() in
/var/www/doc/a.php on line
3”。不是吧,mysql_connect()可是php的方法啊,为什么会说是没有定义的呢?那我们想一下安装系统的时候,我们选了sql服务器和web服务器,应该是版本太旧的问题引起的。
d) 我们用
/etc/rc.d/init.d/httpd stop将系统的http停掉。我们再次浏览test.php,这次的问题更严重,我们无法访问了,大家不用想也会明白,httpd服务给停掉了,当然不能访问了,那我们就把apache服务器启动起来看一下“
/user/local/apache2/bin/apachectl start”命令来启动我们的高版本的服务器。
e) 这次应该成功了吧!我们浏览一下test.php,不是吧,又错了!??
“
Warning: mysql_connect() [
function.mysql-connect]: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) in
/var/www/doc/a.php on line
3
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /var/www/doc/test.php on line 4
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/doc/test.php on line 7” ,从Warning可以想到,应该是mysql服务没有启动起来。我们用下面的方法命令让 mysql服务器在后台运行。cd /usr/local/mysql* ,./bin/safe_mysqld 这次我们再浏览test.php,总算舒了一口气,结果总算出来了
Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource in /var/www/doc/test.php on line 4
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /var/www/doc/test.php on line 7” ,从Warning可以想到,应该是mysql服务没有启动起来。我们用下面的方法命令让 mysql服务器在后台运行。cd /usr/local/mysql* ,./bin/safe_mysqld 这次我们再浏览test.php,总算舒了一口气,结果总算出来了
其中还要注意的一个问题就是,
mysql_connect("localhost","
用户名
","
密码
");
密码一定要正确,否则将会出现访问被拒绝的问题,这就要求我们要知道用户名的密码,
root
默认的是空密码,所以我们应该用
mysqladmin
来修改一下,这样可以相对来说安全一点。
如何让安装的服务自动?这样就省了每次重启服务器之后再去启动我们安装的服务了。
a) 自启动当我们安装好Apache之后,从/usr/local/apache/bin/apachectl 到 /etc/rc.d/init.d/httpd 建立一个符号连接:Apache
# ln -s /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd
然后在此文件总添加以下几行(大概在文件顶部,约第二行的地方):
# chkconfig: 2345 10 90
# description: Activates/Deactivates Apache Web Server
# description: Activates/Deactivates Apache Web Server
最后,运行
chkconfig
把
Apache
添加到系统的启动服务组里面:
# /sbin/chkconfig --del httpd
# /sbin/chkconfig --add httpd
# /sbin/chkconfig --add httpd
如果你的
/etc/rc.d/init.d
已经有了
httpd
这个
shell
脚本,那就先把它删除,再用上面的命令来做一次就可以了。
b) 自启动MySql
i. 在MySQL二进制包里面,有一个叫myslq.server的启动脚本程序。把它复制到/etc/rc.d/init.d目录里面:
1. cd /etc/rc.d/init.d
2. cp /usr/local/mysql/support-files/mysql.server mysql
3. 接着把它的属性改为“
x”(executable,可执行)
chmod +X mysql
4. 最后,运行chkconfig把MySQL添加到你系统的启动服务组里面去。
/sbin/chkconfig --del mysql
,
/sbin/chkconfig --add mysql
测试看看是否正确/etc/rc.d/init.d/mysql start,结果不是预料的那么好哦,出现了如下的错误,”/etc/rc.d/mysql: line 1: my_print_defaults: command not found……”,意思就是说找不到启动程序。那我们来看一下/etc/rc.d/init.d/mysql这个脚本,用文本编辑器打开,找一下bin和data一类的目录是不是设置有问题。对了,脚本对$basedir设置的时候出问题了,原因是我们的mysql放在/usr/local/mysql-max-5.0.17-linux-i686-glibc23,而不是mysql脚本里面的/usr/local/mysql,我们把它改一下,然后再启动,这次我们看到Starting MySql SUCCESS,ok,我们的mysql数据库也可以随着系统的启动而启动了,用不着担心再去启动机器后忘了启动数据库服务器,导致网站出问题了。