当前位置: > CentOS > CentOS服务器 > 环境配置 >

CentOS 6.2实战部署Nginx+MySQL+PHP

时间:2014-12-01 01:36来源:linux.it.net.cn 作者:IT

#lnmp是什么?

1.Linux操作系统(Linux),是一类Unix计算机操作系统的统称。Linux操作系统的内核的名字也是“Linux”。Linux操作系统也是自由软体和开放源代码发展中最著名的例子.

2.Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx 已经因为它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名了。目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。新近发现Nginx 技术在国内日趋火热,越来越多的网站开始部署Nginx.

3.PHP 是什么?
PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。

4.MySQL是一个开放源码的小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

 

 

 

MySQL的特性:
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性 
支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 
为多种编程语言提供了API。这些编程语言包括C、C++、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 
支持多线程,充分利用CPU资源 
优化的SQL查询算法,有效地提高查询速度 
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中 
提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名 
提供TCP/IP、ODBC和JDBC等多种数据库连接途径 
提供用于管理、检查、优化数据库操作的管理工具 
可以处理拥有上千万条记录的大型数据库

MySQL的应用:
与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL不支持视图(已经被列入5.1版的开发计划)、事件等)等,但是这丝毫也没有减少它受欢迎的程度。对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。
目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。由于这四个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。

MySQL管理:
可以使用命令行工具管理MySQL数据库(命令mysql 和 mysqladmin),也可以从MySQL的网站下载图形管理工具MySQL Administrator和MySQL Query Browser。
phpMyAdmin是由php写成的MySQL资料库系统管理程式,让管理者可用Web介面管理MySQL资料库。
phpMyBackupPro也是由PHP写成的,可以透过Web介面创建和管理数据库。它可以创建伪cronjobs,可以用来自动在某个时间或周期备份MySQL 数据库。

Mysql存储引擎:
MyISAM Mysql的默认数据库,最为常用。拥有较高的插入,查询速度,但不支持事务
InnoDB 事务型数据库的首选引擎,支持ACID事务,支持行级锁定
BDB 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性
Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。但是会占用和数据量成正比的内存空间。并且其内容会在Mysql重新启动时丢失
Merge 将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用
Archive 非常适合存储大量的独立的,作为历史记录的数据。因为它们不经常被读取。Archive 拥有高效的插入速度,但其对查询的支持相对较差
Federated 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。非常适合分布式应用Cluster/NDB 高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。适合数据量大,安全和性能要求高的应用
CSV 逻辑上由逗号分割数据的存储引擎
BlackHole 黑洞引擎,写入的任何数据都会消失

另外,Mysql的存储引擎接口定义良好。有兴趣的开发者通过阅读文档编写自己的存储引擎。

Mysql最常见的应用架构:
单点(Single),适合小规模应用
复制(Replication),适合中小规模应用
集群(Cluster),适合大规模应用

Mysql6.0的alpha版于2007年初发布,新版增加了对falcon存储引擎的支持。Falcon是Mysql社区自主开发的引擎,支持ACID特性事务,支持行锁,拥有高性能的并发性。Mysql AB公司想用Falcon替代已经非常流行的InnoDB引擎,因为拥有后者技术的InnoBase已经被竞争对手Oracle所收购。

5.Zend,eAccelerator这两个是用来加速或优化php的速度的
其实,Zend是一个公司,且有好几个产品.本文里说的zend是指 ZendOptimizer.ZendOptimizer 就是来用加速或优化经过加密的PHP代码
ZendOptimizer是用来提高PHP应用程序的执行速度。实现的原理是对那些程序在被最终执行之前由运行编译器(Run-Time Compiler)产生的代码进行优化。一般情况下,执行使用Zend Optimizer的PHP程序比不使用的要快40%到100%。这意味着网站的访问者可以更快的浏览网页,从而完成更多的事务,创造更好的客户满意度。

6.eaccelerator是一个自由开放源码php加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍

7.Imagick
PHP中Imagick类,提供了比GD库函数更为方便和强大的图片处理功能。由于工作关系研究了一阵,略有收获,不敢独乐,特与大家分享。使用Imagick类,需要PHP安装imagemagick扩展模块。其实就是linux命令行中增加了convert命令。最有一个图片压缩的函数只能针对jpeg图片,但是我用PHP中Imagick类提供的图片质量压缩不能达到压缩功能,目前尚未解决。所以用命令行解决。

8.Memcache
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。

9.ImageMagick
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、 PNG、PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存,对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。现在,ImageMagic的主要精力集中在性能、减少bug以及提供稳定的API和ABI上。

10.google-perftools
google-perftools 是一款针对 C/C++ 程序的性能分析工具,它是一个遵守 BSD 协议的开源项目。使用该工具可以对 CPU 时间片、内存等系统资源的分配和使用进行分析

#系统环境:
[root@dba01 ~]# cat /etc/RedHat-release 
CentOS release 6.2 (Final)
[root@dba01 ~]# uname -a
Linux dba01 2.6.32-220.el6.x86_64 #1 SMP Tue Dec 6 19:48:22 GMT 2011 x86_64 x86_64 x86_64 GNU/Linux

 


[root@dba01 ~]# rz -y

rz waiting to receive.
zmodem trl+C ȡ


 100%    5349 KB 2674 KB/s 00:00:02      0 Errors
 100%  23727 KB  988 KB/s 00:00:24      0 Errors


[root@dba01 ~]# ll cmake-2.8.4.tar.gz mysql-5.5.19.tar.gz 
-rw-r--r--. 1 root root  5477628 Sep 19  2011 cmake-2.8.4.tar.gz
-rw-r--r--. 1 root root 24296942 Dec 19  2011 mysql-5.5.19.tar.gz


#安装cmake
[root@dba01 ~]# tar -zxf cmake-2.8.4.tar.gz 
[root@dba01 ~]# cd cmake-2.8.4
[root@dba01 cmake-2.8.4]# ./configure && gmake && gmake install


#安装mysql
[root@dba01 cmake-2.8.4]# cd ..
[root@dba01 ~]# groupadd mysql
[root@dba01 ~]# useradd -g mysql mysql
[root@dba01 ~]# tar -zxf mysql-5.5.19.tar.gz 
[root@dba01 ~]# cd mysql-5.5.19
[root@dba01 mysql-5.5.19]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STOPAGE_ENGINE=1 -DWITH_BLACKHOLE_STOPAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DMYSQL_DATADIR=/var/mysql/data -DMYSQL_USER=mysql -DMYSQL_TCP-PORT=3306

 


参数说明:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql //安装目录
-DMYSQL_DATADIR=/var/mysql/data数据库存放目录
-DWITH_MYISAM_STORAGE_ENGINE=1 //安装myisam存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 //安装innodb存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 //安装archive存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 //安装blackhole存储引擎
-DENABLED_LOCAL_INFILE=1 //允许从本地导入数据
-DDEFAULT_CHARSET=utf8   //使用utf8字符
-DDEFAULT_COLLATION=utf8_general_ci //校验字符
-DEXTRA_CHARSETS=all   //安装所有扩展字符集
-DMYSQL_TCP_PORT=3306 //MySQL监听端口
-DMYSQL_USER=mysql //MySQL用户名
其他参数:
-DWITH-EMBEDDED_SERVER=1 //编译成embedded MySQL library (libmysqld.a)
-DSYSCONFDIR=/etc //MySQL配辑文件
-DMYSQL_UNIX_ADDR=/tmp/mysqld.sock //Unix socket 文件路径
-DWITH_READLINE=1 //快捷键功能
-DWITH_SSL=yes //SSL
-DWITH_MEMORY_STORAGE_ENGINE=1 //安装memory存储引擎
-DWITH_FEDERATED_STORAGE_ENGINE=1 //安装frderated存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 //安装数据库分区
-DINSTALL_PLUGINDIR=/usr/local/mysql/plugin //插件文件及配置路径


[root@dba01 mysql-5.5.19]# make && make install
[root@dba01 mysql-5.5.19]# chmod +w /usr/local/mysql
[root@dba01 mysql-5.5.19]# chown -R mysql:mysql /usr/local/mysql
[root@dba01 mysql-5.5.19]# ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib/libmysqlclient.so.18
[root@dba01 mysql-5.5.19]# mkdir -p /var/mysql/
[root@dba01 mysql-5.5.19]# mkdir -p /var/mysql/data
[root@dba01 mysql-5.5.19]# mkdir -p /var/mysql/log
[root@dba01 mysql-5.5.19]# chown -R mysql:mysql /var/mysql/
[root@dba01 mysql-5.5.19]# cd support-files/
[root@dba01 support-files]# cp my-large.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? yes
[root@dba01 support-files]# cp mysql.server /etc/init.d/mysqld
[root@dba01 support-files]# /usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql/ --datadir=/var/mysql/data/ --user=mysql
[root@dba01 support-files]# chmod +x /etc/init.d/mysqld


[root@dba01 support-files]# vim /etc/init.d/mysqld +46

 


在basedir=/usr/local/mysql (添加)
datadir=/var/mysql/data  (添加)


[root@dba01 support-files]# chkconfig --add mysqld
[root@dba01 support-files]# chkconfig --level 345 mysqld on
[root@dba01 support-files]# chkconfig --list|grep mysqld 
mysqld          0:off  1:off  2:on    3:on    4:on    5:on    6:off


[root@dba01 support-files]# ln -s /usr/local/mysql/bin/* /bin/
[root@dba01 support-files]# /etc/init.d/mysqld restart
ERROR! MySQL server PID file could not be found!
Starting MySQL.......................... SUCCESS! 
[root@dba01 support-files]# netstat -lntp|grep mysqld
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                  LISTEN      46116/mysqld 

 


[root@dba01 support-files]# mysqladmin -uroot password '123456'
[root@dba01 support-files]# mysql -uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.19-log Source distribution


Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.


Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show engines;                                              #查看mysql存储引擎
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine            | Support | Comment                                                    | Transactions | XA  | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| MyISAM            | YES    | MyISAM storage engine                                      | NO          | NO  | NO        |
| InnoDB            | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |
| MRG_MYISAM        | YES    | Collection of identical MyISAM tables                      | NO          | NO  | NO        |
| PERFORMANCE_SCHEMA | YES    | Performance Schema                                        | NO          | NO  | NO        |
| CSV                | YES    | CSV storage engine                                        | NO          | NO  | NO        |
| MEMORY            | YES    | Hash based, stored in memory, useful for temporary tables  | NO          | NO  | NO        |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
6 rows in set (0.00 sec)


mysql> show variables like 'innodb_version'\G;                    #查看innodb存储引擎版本。
*************************** 1. row ***************************
Variable_name: innodb_version
      Value: 1.1.8
1 row in set (0.00 sec)

 

 


mysql> show variables like 'log_error';                            #查看mysql错误日志存放路径
+---------------+---------------------------+
| Variable_name | Value                    |
+---------------+---------------------------+
| log_error    | /var/mysql/data/dba01.err |
+---------------+---------------------------+
1 row in set (0.00 sec)

 


mysql> system hostname;                                            #查看mysql主机名
dba01


mysql> show create table mysql.slow_log;                            #查看mysql慢查询日志结构
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table    | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| slow_log | CREATE TABLE `slow_log` (
 `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 `user_host` mediumtext NOT NULL,
 `query_time` time NOT NULL,
 `lock_time` time NOT NULL,
 `rows_sent` int(11) NOT NULL,
 `rows_examined` int(11) NOT NULL,
 `db` varchar(512) NOT NULL,
 `last_insert_id` int(11) NOT NULL,
 `insert_id` int(11) NOT NULL,
 `server_id` int(10) unsigned NOT NULL,
 `sql_text` mediumtext NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log' |
+----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

 


mysql> show variables like 'log_output';                                    #查看mysql慢查询的格式
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)


mysql> set global log_output='TABLE';
Query OK, 0 rows affected (0.00 sec)


mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | TABLE |
+---------------+-------+
1 row in set (0.00 sec)


mysql> select sleep(10);
+-----------+
| sleep(10) |
+-----------+
|        0 |
+-----------+
1 row in set (10.00 sec)

 

 


mysql> \q
Bye


#安装pcre
[root@dba01 support-files]# cd
[root@dba01 ~]# tar -zxvf pcre-8.31.tar.gz && cd pcre-8.31

[root@dba01 pcre-8.31]# ./configure && make && make install
 

#安装Nginx

[root@dba01 ~]# tar -zxvf nginx-1.2.7.tar.gz && cd nginx-1.2.7

[root@dba01 nginx-1.2.7]# /usr/sbin/groupadd www
[root@dba01 nginx-1.2.7]# /usr/sbin/useradd -g www www
[root@dba01 nginx-1.2.7]# ./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
[root@dba01 nginx-1.2.7]# make && make install
[root@dba01 ~]# /usr/local/nginx/sbin/nginx 
/usr/local/nginx/sbin/nginx: error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory
[root@dba01 ~]# ln -s /lib64/libpcre.so.0 /lib64/libpcre.so.1
[root@dba01 ~]# /usr/local/nginx/sbin/nginx          
[root@dba01 ~]# netstat -lntp|grep nginx
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN      29508/nginx  
[root@dba01 ~]# /etc/init.d/iptables stop


#安装php
#备注:php5.3.3以后的版本源码不需要打php-fpm补丁,该补丁已经集成进5.3.3,在编译时,不需再--enable-fastcgi了,在php5.3.3中强制启用fastcgi.
[root@dba01 nginx-1.2.7]# cd
[root@dba01 ~]# tar -zxvf libmcrypt-2.5.8.tar.gz && cd libmcrypt-2.5.8

[root@dba01 libmcrypt-2.5.8]# ./configure && make && make install


[root@dba01 libmcrypt-2.5.8]# cd 
[root@dba01 ~]# tar -zxvf mhash-0.9.9.9.tar.gz && cd mhash-0.9.9.9

[root@dba01 mhash-0.9.9.9]# ./configure && make && make install


[root@dba01 mhash-0.9.9.9]# cd ..
[root@dba01 ~]# tar -zxvf mcrypt-2.6.8.tar.gz && cd mcrypt-2.6.8
config.status: executing default commands
[root@dba01 mcrypt-2.6.8]# LD_LIBRARY_PATH=/usr/local/lib ./configure --prefix=/usr/local/
[root@dba01 mcrypt-2.6.8]# make && make install

 


[root@dba01 mcrypt-2.6.8]# cd ..
[root@dba01 ~]# tar -zxvf libiconv-1.14.tar.gz

[root@dba01 ~]# cd libiconv-1.14
[root@dba01 libiconv-1.14]# ./configure && make && make install
[root@dba01 libiconv-1.14]# cd


[root@dba01 ~]# useradd -g nginx nginx -s /sbin/nologin 
[root@dba01 ~]# tar -zxvf php-5.3.11.tar.gz

[root@dba01 ~]# cd php-5.3.11
[root@dba01 php-5.3.11]# ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap

[root@dba01 php-5.3.11]# make ZEND_EXTRA_LIBS='-liconv'
[root@dba01 php-5.3.11]# make install
[root@dba01 php-5.3.11]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
[root@dba01 php-5.3.11]# cp -rf php.ini-production /usr/local/php/etc/php.ini
[root@dba01 php-5.3.11]# chmod +x /etc/init.d/php-fpm
[root@dba01 php-5.3.11]# chkconfig php-fpm on
[root@dba01 php-5.3.11]# cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf


[root@dba01 php-5.3.11]# cd

[root@dba01 ~]# tar -xjvf eaccelerator-0.9.6.1.tar.bz2

[root@dba01 ~]# cd eaccelerator-0.9.6.1
[root@dba01 eaccelerator-0.9.6.1]#  /usr/local/php/bin/phpize
[root@dba01 eaccelerator-0.9.6.1]# ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config && make && make install

(责任编辑:IT)

------分隔线----------------------------