r1 - 14 Aug 2008 - 09:41:04 - Main.yfangYou are here: YWiki >  MyTech Web > 如何检查LAMP系统的配置

如何检查LAMP系统的配置

说明

  • 作者:yfang (yangfang at fudan.edu.cn)
  • 修改时间:2008-8-14
  • 原创文章,欢迎转载,转载请注明出处及作者信息,谢谢

本文简介

  • LAMP开发现在可谓越来越流行,Linux + Apache + MySQL? + PHP 相关的配置文章也是数不胜数。
  • 由于开发的需要,每个人配出来的apache,mysql和php都可能需要自己特定的配置,这样动手更改配置文件就成为了家常便饭。这三个套件又刚好都是使用简单配置文件配置的软件,所以当我们修改完配置文件之后,你敢直接restart 服务么?如果不是经过严格的训练,我想没有人敢随便在重要的服务器上经常该配置并不经过任何测试就重启服务。你总不想在服务重启失败之后再去颤抖着紧急抢修吧,如果你刚好自信到没有去备份原始的config文件而且又慌忙得找不到正确的修正方法,你就等着你们老板的惩罚吧!@@
  • 本文的内容非常简单,目标也很明确,就是介绍一下Apache,MySQL和PHP的配置检查方法。

  • 本文的工作环境是CentOS4.6+Apache2.2+MySQL5.1rc+PHP5.2,不过其他版本基本也都支持本文中介绍的测试方法

Apache

  • 配置文件 httpd.conf
  • 检查方法 执行`apachectl configtest'或者`httpd -t'
  • 详细说明
# 通常Apache安装好之后,'httpd' 和 'apachectl' 这两个程序就在安装目录中的bin目录下,比如我后面运行的程序就是在我的安装目录(/usr/local/httpd)下的bin目录中,你可能需要找到真实的程序位置来执行检查
# 如果是二进制安装,比如rpm或者deb包,大部分情况这两个命令已经被放到了PATH可以引用到的位置,这样你直接执行`apachectl configtest'或者`httpd -t'就可以了

# apachectl configtest 其实就是去调用 httpd -t,所以这两个命令是完全一样的

# 正确范例:
root@S71[1]lib# /usr/local/httpd/bin/httpd -t
Syntax OK

# 错误范例:
root@S71[1]lib# /usr/local/httpd/bin/httpd -t
httpd: Syntax error on line 20 of /usr/local/httpd/conf/httpd.conf: Cannot load /usr/local/httpd/modules/mod_proxy.so into server: /usr/local/httpd/modules/mod_proxy.so: cannot open shared object file: No such file or directory
# 上面的错误表明这个文件找不到了,其实是我临时移走了 ^.^

# 有时候你会看到一些[warn],这些可能会导致你的服务和自己想像的不一样,有助于你诊断错误,但并不一定有问题,也不会导致apache服务挂掉
# 如果你确认没有问题,可以忽略这些警告信息,比如像下面这样的
root@S71[1]lib# /usr/local/httpd/bin/apachectl configtest
[Thu Aug 14 17:29:36 2008] [warn] NameVirtualHost *:7777 has no VirtualHosts
[Thu Aug 14 17:29:36 2008] [warn] NameVirtualHost *:80 has no VirtualHosts
Syntax OK

MySQL

  • 配置文件 my.cnf (Windows中可能叫做my.ini)
  • 检查方法 执行`mysqld --help'
  • 详细说明
# 通常MySQL安装好之后,'mysqld' 这个程序就在安装目录中的bin目录下,比如我后面运行的mysqld程序就是在我的安装目录(/usr/local/mysql)下的bin目录中,你可能需要找到真实的程序位置来执行检查
# 如果是二进制安装,比如rpm或者deb包,大部分情况mysqld这个命令已经被放到了PATH可以引用到的位置,这样你直接执行`mysqld --version' 就可以了
# mysqld程序会首先检查配置文件是否正常,如果有明显的配置问题,它会报错,否则他将正常输出mysqld的版本信息

# 有时候你启动的服务除了去读配置文件外,还需要在命令行里写大量的配置信息,那么你可以参考下面的写法
/usr/local/mysql/bin/mysqld --defaults-extra-file=/var/mydata/my.cnf --basedir=/usr/local/mysql --datadir=/var/mydata --user=mysql --pid-file=/var/mydata/mysql.pid --skip-locking --open-files-limit=8192 --socket=/var/mydata/mysql.sock --port=3306 --version
#这个命令会按照你的配置参数去测试,这样就很方便,即便配置失败了,也只不过报个错而已

# 正确范例:
root@S71[1]lib# /usr/local/mysql/bin/mysqld --defaults-extra-file=/var/mydata/my.cnf --basedir=/usr/local/mysql --datadir=/var/mydata --user=mysql --pid-file=/var/mydata/mysql.pid --skip-locking --open-files-limit=8192 --socket=/var/mydata/mysql.sock --port=3306 --version
/usr/local/mysql/bin/mysqld  Ver 5.1.25-rc-log for redhat-linux-gnu on i686 (MySQL Community Server (GPL))

# 错误范例:
# 这里为了制造错误,特别在/var/mydata/my.cnf中写了一句key_buffer_size=yfang
root@S71[1]lib# /usr/local/mysql/bin/mysqld --defaults-extra-file=/var/mydata/my.cnf --basedir=/usr/local/mysql --datadir=/var/mydata --user=mysql --pid-file=/var/mydata/mysql.pid --skip-locking --open-files-limit=8192 --socket=/var/mydata/mysql.sock --port=3306 --version
Unknown suffix 'y' used for variable 'key_buffer_size' (value 'yfang')
080814 17:18:10 [Warning] option 'key_buffer_size': unsigned value 0 adjusted to 8
080814 17:18:10 [ERROR] /usr/local/mysql/bin/mysqld: Error while setting value 'yfang' to 'key_buffer_size'

PHP

  • 配置文件 php.ini
  • 检查方法 执行`php -v'
  • 详细说明
# 通常php安装好之后,'php'这个程序就在安装目录中的bin目录下,比如我后面运行的php程序就是在我的安装目录(/usr/local/php)下的bin目录中,你可能需要找到真实的程序位置来执行检查
# 如果是二进制安装,比如rpm或者deb包,大部分情况php这个命令已经被放到了PATH可以引用到的位置,这样你直接执行`php -v' 就可以了

# 正确范例:
root@Server[1]lib# /usr/local/php/bin/php -v
PHP 5.2.6 (cli) (built: Aug  8 2008 16:08:19)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

# 错误范例:
# 下面是一个典型的错误输出,报告找不到配置文件中设定的so,原因是没有更改extension_dir,找不到指定的so文件
root@Server[1]lib# /usr/local/php/bin/php -v
PHP Warning:  PHP Startup: Unable to load dynamic library './curl.so' - ./curl.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library './tidy.so' - ./tidy.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.2.6 (cli) (built: Aug  8 2008 16:08:19)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with Zend Extension Manager v1.2.2, Copyright (c) 2003-2007, by Zend Technologies
with Zend Optimizer v3.3.3, Copyright (c) 1998-2007, by Zend Technologies

多说两句

  • 这些检测方法都主要是非业务逻辑层的检查,他们保证的是你的服务配置没有原则性错误,所以你还需要做其他检查来保证,比如是否有端口冲突,等等。这些事情显然不属于程序的配置检查范畴了。
Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r1 | More topic actions
 
Powered by YWiki
This site is powered by the TWiki collaboration platformCopyright © by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding YWiki? Send feedback