PHP连接mysql

[root@localhost mysql]# yum install php-mysql


CMS:(开源)

    drupal

    joomla

http 2.4新特性:

1、MPM可于运行时装载

    --enable-mpms-shared=all  --with-mpm=event

2、Event MPM

3、支持异步读写,提升HTTP性能

4、在每个模块及每目录上指定日志级别

5、每请求配置:<IF>,<ElseIF>,<Else>

6、增强的表达式分析器

7、毫秒级的KeepAlive Timeout

8、基于域名的虚拟主机不再需要NameVirtualHost指令,需开启vhost

9、降低了内存占用;

10、支持在配置文件中使用自定义变量

11、基于IP的访问控制机制

    2.2中使用机制:

        Order allow,deny

        allow from all

    2.4中不再支持此方法,使用如下方法

        require user USERNAME

        require group GROUPNAME

        require IP IPADDR

            IP

            NETWORK/NATMASK

            NETWORK/LENGTH

            NET

            172.16.0.0/255.255.0.0=172.16.0.0/16=172.16

        require host HOSTNAME

            www.mageedua.com

            mageedua.com

        允许所有主机访问

            require all granted

        拒绝所有主机访问

            require all deny

        不想让哪此主机访问,可以在类前加 not

            require not IP IPADDR

12、新增的模块:

    mod_proxy:proxy的核心modules

    mod_proxy_fcgi:2.2需要单独安装,2.4在编译可直接启用--enable-modules=most

    mod_proxy_scgi

    mod_proxy_express

    mod_remoteip

    mod_session

    mod_ratelimit

    mod_request

    等等


LAMP的安装顺序

    apr->apr_util->httpd->MySQL

编译安装LAMP之httpd

安装顺序:httpd-->mysql-->php

版本:

    httpd:2.4.12

    mysql:5.6.10

    php:5.4.42


apr:Apache Portable Runtime,是HTTPD的虚拟机

    apr-util

    apr-iconv


编译安装httpd软件:

# yum -y install pcre-devel     #HTTPD的编译环境

# tar xf apr-1.4.6.tar.bz2   #httpd虚拟机apr软件安装
# cd apr-1.4.6
# ./configure --prefix=/usr/local/apr
# make
# make install

# tar xf apr-util-1.4.1.tar.bz2    #apr-util工具包的安装
# cd apr-util-1.4.1
# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
# make
# make install


# tar xf httpd-2.4.4.tar.bz2
# cd httpd-2.4.4
./configure --prefix=/usr/local/apache --sysconfdir=/etc/httpd --enable-so --enable-rewirte --enable-ssl --enable-cgi --enable-cgid --enable-modules=most --enable-mods-shared=most --enable-mpms-shared=all --enable-deflate --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util
# make
# make install

--prefix=/usr/local/apache   #安装路径
--sysconfdir=/etc/httpd    #配置文件路径
--enable-so            #支持共享模块
--enable-rewirte         #支持URL重写
--enable-ssl        #支持ssl,依赖于openssl-devel库,需安装
--enable-cgi        #进程方式使用cgi
--enable-cgid    #纯种方式使用cgi
--enable-modules=most
--enable-mods-shared=most    #启用共享模块
--enable-mods-static=MODULE-LIST     #静态库,直接编译进主程序
--enable-mpms-shared=all        #多道处理模块(MPM)的支持
--with-apr=/usr/local/apr
--with-apr-util=/usr/local/apr-util     
--enable-authn-dbm     #启用认证,默认是启用的
--enable-deflate      #启用网页传输压缩,依赖于zlib-devel库,需安装
--enable-mpms-shared=all        #多道处理模块(MPM)的支持,需注意的是,如果是使用worker,event模式,PHP必须编译安装成ZTS格式,prefork模式不需要单独编译php

配置安装好的httpd服务:

#修改httpd的pid进程文件路径 
[root@localhost apache]# vim /etc/httpd/httpd.conf
PidFile "/var/run/httpd.pid"    #需要停用服务,再去修改配置
[root@localhost apache]# ./bin/apachectl start  #启动服务
[root@localhost apache]# ls /var/run/ | grep httpd
httpd.pid
#配置httpd服务管理脚本:
vim /etc/rc.d/init.d/httpd
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: Apache is a World Wide Web server.  It is used to serve \
#	       HTML files and CGI.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd.pid

# Source function library.
. /etc/rc.d/init.d/functions

if [ -f /etc/sysconfig/httpd ]; then
        . /etc/sysconfig/httpd
fi

# Start httpd in the C locale by default.
HTTPD_LANG=${HTTPD_LANG-"C"}

# This will prevent initlog from swallowing up a pass-phrase prompt if
# mod_ssl needs a pass-phrase from the user.
INITLOG_ARGS=""

# Set HTTPD=/usr/sbin/httpd.worker in /etc/sysconfig/httpd to use a server
# with the thread-based "worker" MPM; BE WARNED that some modules may not
# work correctly with a thread-based MPM; notably PHP will refuse to start.

# Path to the apachectl script, server binary, and short-form for messages.
apachectl=/usr/local/apache/bin/apachectl
httpd=${HTTPD-/usr/local/apache/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/var/run/httpd.pid}
lockfile=${LOCKFILE-/var/lock/subsys/httpd}
RETVAL=0

start() {
        echo -n $"Starting $prog: "
        LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
	echo -n $"Stopping $prog: "
	killproc -p ${pidfile} -d 10 $httpd
	RETVAL=$?
	echo
	[ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}
reload() {
    echo -n $"Reloading $prog: "
    if ! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&/dev/null; then
        RETVAL=$?
        echo $"not reloading due to configuration syntax error"
        failure $"not reloading $httpd due to configuration syntax error"
    else
        killproc -p ${pidfile} $httpd -HUP
        RETVAL=$?
    fi
    echo
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  status)
        status -p ${pidfile} $httpd
	RETVAL=$?
	;;
  restart)
	stop
	start
	;;
  condrestart)
	if [ -f ${pidfile} ] ; then
		stop
		start
	fi
	;;
  reload)
        reload
	;;
  graceful|help|configtest|fullstatus)
	$apachectl $@
	RETVAL=$?
	;;
  *)
	echo $"Usage: $prog {start|stop|restart|condrestart|reload|status|fullstatus|graceful|help|configtest}"
	exit 1
esac

exit $RETVAL

[root@localhost tmp]# chmod +x /etc/rc.d/init.d/httpd  #给服务脚本权限
[root@localhost tmp]# chkconfig --add httpd    #加入服务列表
[root@localhost tmp]# chkconfig --level 2345 httpd on   #加入运行启动级别
[root@localhost tmp]# chkconfig --list | grep httpd
httpd          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
#现在可以使用service httpd start的方式来管理httpd服务

#添加PATH环境变量,以正常的情况执行http相关命令
[root@localhost ~]# cat /etc/profile.d/httpd.sh 
export PATH=$PATH:/usr/local/apache/bin


配置httpd支持ssl功能

    1、首先需编译安装支持ssl功能

    2、启用mod_ssl模块功能,在httpd.conf文件中开启

    3、Include /etc/httpd/extra/httpd-ssl.conf,在httpd.conf文件中开启

    4、在/etc/httpd/extra/httpd-ssl.conf中定义虚拟主机即可

mysql配置文件格式,集中式配置文件,可以为多个程序提供管理

[mysql]   #对客户端mysql程序生效

指令

[mysqld]    #对服务端mysqld生效

指令

[client]    #对所有客户端程序生效

指令

配置文件:

/etc/my.cnf -->/etc/mysql/my.cnf-->$BASEDIR/my.cnf-->$DATADIR/my.cnf-->~/.my.cnf

#$BASEDIR,进程运行目录,一般为软件安装目录,一般也存入配置文件于此

配置文件寻找的时候,都会把以上文件寻找一次,如果配置中有冲突时,以最后一个生效


show databases;

performance_schema  #是一个系统状态收集库,如连接状态,连接次数、用户请求等信息

mysql服务器维护了两类变量

    1、服务器变量

        用于定义mysql服务器运行特性,如datadir

            show global variables

            show global status like 'datadir'#查看全局中的某个变量信息

    2、状态变量

        保存了mysql服务器运行的统计数据,不可改

            show global status    #查看全局的

            show global status like '%select%'    #查看全局中的某个变量信息

mysql通配符:

    _:任意单个字符

    %:任意长度的任意字符


select version(); 显示当前系统版本

select database();显示当前数据库

select user();当前登陆的用户

 

编译安装LAMP之MySQL

版本mysql.5.5.28

    由于使用的是通用二进制格式,不需要编译安装,可直接使用,

tar xf mysql-5.5.28-linux2.6-x86_x64.tar.gz -C /usr/local  #必须解压到/usr/local/mysql下
ln -sv mysql-5.5.28-linux2.6 mysql #直接创建mysql连接,保留原有的目录格式
groupadd -r -g 306 mysql    #-r指定为一个系统组  -g指定GID
useradd -g 306 -r -u 306 mysql    #-u 指定UID
#安装
#修改权限
chown -R mysql.mysql /usr/local/mysql/* #需要将所有的文件用户、组改到mysql用户和组
#运行mysql_install_db文件,他是初始化数据库
scripts/mysql_install_db --help
--datadir=path     #数据库存放目录,默认存放在软件目录下的data目录中,可以创建lvm卷使用
--user=user_name
scripts/mysql_install_db --user=mysql --datadir=/mydata/data/  #mydata已经是LVM,请以下

#修改软件目录下的属主改为root,以防sql被***利用
chown -R root /usr/local/mysql/*

#cp服务管理脚本文件至/etc/init.d/mysqld
cp support-files/mysql.server /etc/init.d/mysqld

chkconfig --add mysqld

chconfig --level 2345 mysqld

#复制配置文件到/etc/my.cnf
cp support-files/my-large.cnf /etc/my.cnf

thread_concurrency = 8  #mysql的并发量
datadir = /mydata/data  #添加mysql的数据存放目录,如果没有修改,不需要添加

#添加二进制变量
vim /etc/profile.d/mysql.sh
export PATH=$PATH:/usr/local/mysql/bin

#启动mysqld服务
service mysqld start

#mysql连接msyqld服务

show databases;

performance_schema  #是一个系统状态收集库,如果连接状态,连接次数等信息

#输出库文件
vim /etc/ld.so.conf.d/mysql.conf
/usr/local/mysql/lib

#输出库文件,使其生效,让库文件刷新/etc/ld.so.cache缓存
ldconfig -v

#创建头文件连接 
ln -sv /usr/local/mysql/include /usr/include/mysql


创建LVM用于mysqldate存放

#设置好分区,分区在扩展卷最好,用于以后容量扩展,并设置分区类型为8e
[root@localhost ~]# pvcreate /dev/sdb5    #创建物理卷
  Physical volume "/dev/sdb5" successfully created
[root@localhost ~]# vgcreate myvg /dev/sdb5 #创建卷组
  Volume group "myvg" successfully created
[root@localhost ~]# lvcreate -n mydate -L 4G myvg    #创建逻辑卷-n指定名称 -L指定容量
  Logical volume "mydate" created
[root@localhost ~]# lvs
  LV      VG       Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_root VolGroup -wi-ao---- 17.51g                                                    
  lv_swap VolGroup -wi-ao----  2.00g                                                    
  mydate  myvg     -wi-a-----  4.00g  
#创建目录用于lv卷组开机自动挂载,编辑/etc/fstab文件,如下
/dev/myvg/mydate	/mydata			ext3	defaults	0 0	
#运行挂载
[root@localhost ~]# mount -a
/dev/mapper/myvg-mydate on /mydata type ext3 (rw)
[root@localhost mydata]# mkdir mydata     #创建mydata目录专门用于存放sql数据
[root@localhost mydata]# chown -R mysql:mysql /mydata/  #修改相关权限
[root@localhost /]# chmod 750 mydata/mydata/       #修改相关权限

编译安装LAMP之MySQL

版本mysql.5.5.28

配置文件为mysql解压目录中的my.cnf文件。可以不用复制到/etc目录



编译安装LAMP之PHP,及xcache功能

# tar xf php-5.4.13.tar.bz2
# cd php-5.4.13
# ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql --with-openssl --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-mbstring --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml  --enable-sockets --with-apxs2=/usr/local/apache/bin/apxs --with-mcrypt  --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-bz2  --enable-maintainer-zts

--prefix=/usr/local/php  指定安装路径
--with-mysql=/usr/local/mysql #指定mysql安装路径
--with-openssl    #开启支持openssl功能
--with-mysqli=/usr/local/mysql/bin/mysql_config #是php与mysql交互的另一个api接口,mysql_c                                                 onfig也是一个二进制程序
--enable-mbstring    #most byte功能支持
--with-freetype-dir    #支持freetype功能,freetype是一个字体库,引用特殊字体
--with-jpeg-dir    #jpeg库文件
--with-png-dir    #png库文件
--with-zlib    #互联网通用压缩库,安装httpd使用的--enable-deflate也需要zlib库
--with-libxml-dir=/usr  #xml是扩展标记语言,系统交互的通用语言,指定xml库文件路径 
--enable-xml    #开启xml功能
--enable-sockets    #开启进程间通信
--with-apxs2=/usr/local/apache/bin/apxs#把php编译成apache模块,httpd与php通信使用模块难住
--with-mcrypt    #额外的加密库
--with-config-file-path=/etc  #php的配置文件路径 ,一般为php.ini为主配置文件
--with-config-file-scan-dir=/etc/php.d #php分段配置文件存放路径,为/etc/php.d/*.ini文件
--with-bz2    #压缩库文件支持
--enable-maintainer-zts #开启zts功能,如果是perfork模型,就不需要开启
说明
1、这里为了支持apache的worker或event这两个MPM,编译时使用了--enable-maintainer-zts          选项。
2、如果使用PHP5.3以上版本,为了链接MySQL数据库,可以指定mysqlnd,这样在本机就不需要先安装MySQL或MySQL开发包了。mysqlnd从php 5.3开始可用,可以编译时绑定到它(而不用和具体的MySQL客户端库绑定形成依赖),但从PHP 5.4开始它就是默认设置了。
# ./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd

3、如果需要编译成fastcgi工作模型,需要如下:
去掉-with-apxs2=/usr/local/apache/bin/apxs,换成--enable-fpm

#复制php.ini文件到/etc/php.ini

#添加httpd服务支持的文件类型
vim /etc/httpd/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-source .phps
DirectoryIndex index.php index.html  #是在dir_module封装下的。

#编辑httpd的网页文件,测试php是否正常
vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>

#编辑httpd的网页文件,测试php与mysql是否正常
vim /usr/local/apache/htdocs/index.php
<?php
$conn=mysql_connect('localhost','root','')
    if ($conn)
        echo "Success...";
    else
        echo "Failure...";
?>

#php配置为xcache模式
    1、首先使用php命令加载xcache
       /usr/local/php/bin/phpize   #在php的安装目录中执行phpize,识别xcache功能,需切换到        xcache目录中执行
    2、./configure --enable-xcache --with-php-config=/usr/local/php/bin/php-config
        --with-php-config=/usr/local/php/bin/php-config  #这个配置文档能获得php的编译信息                                                          和配置信息
    3、将xcache.ini提供到/etc/php.d/目录,xcache.ini是官方提供的样例配置文件
    4、配置xcache.ini文件,修改zend_extension=选项,将编译完成后的正确信息填写进去
      zend_extension = /usr/local/lib/php/extensions/non-debug-non-zts-20100525/xcache.so
      在配置文件中,告诉php有一个zend扩展,扩展的库文件路径 
    5、xcache其他配置选项
        xcache.admin.enable_auth = on  #Xcache管理认证功能
        xcache.admin.user = "m0o"   #xcache的用户
        xcache.admin.pass = ""     #xcache密码为空密码,加密码需是md5格式
        xcache.shm_scheme = "mmap" #内存共享机制为mmap shm是共享内存 mmap是内存映射
        xcache.size = 60M # 共享内存大小,0为关闭xcache功能
        xcache.count = 1 #设置cpu个数,根据实际cpu数量更改
        xcache.slots = 8k #缓存中有多少个槽位来缓存opcode, 槽位为8k
        xcache.ttl = 0 #过期时间,0表示不过期,实行自我管理
        xcache.gc_interval = 0 #如果设置过期时间,需配置这项,gc是垃圾回收器,0表示不扫描
        xcache.var_size = 4M #var变量缓存大小 
        xcache.var_cont = 1 #缓存数量
        xcache.var_slots = 8k 
        xcache.cacher = on 缓存功能是否启用
        xcache.optimizer = off #是否启用xcache自身的优化器
#需要xcache配置生效,需重启httpd服务,因为php模块是由apache加载的
#在phpinfo()参数中就可以查看xcache的启用情况了

编译安装LAMP之PHP为fpm模式(FastCGI)

1、首先需要保证httpd中有fcgi模块
2、在编译的时候将--with-apxs2=/usr/local/apache/bin/apxs 改为--enable-fpm,去掉 --enable-maintainer-zt


为编译好的httpd服务,提供虚拟主机

1、首先禁用中心主机,注释DocumentRoot选项;

2、启用virtual hosts选项 Include 

3、/etc/httpd/extra/httpd-vhost.conf,再其中添加虚拟主机

    需对每个虚拟主机目录进行访问定义,2.4和以后版本才需要,需明确定义

    <Directory "/www/a.org">

        Options none

        AllowOverride none

        Require all granted

    </Directory>


对httpd的网站进行压力测试

    1、使用ab工具,路径为:/usr/local/apache/bin/ab

        ab工具选项

            -c 并发量

            -n 一共要请求多少个请求

            -r 忽略请求错误

    ab -c 10 -n 100 http://www.a.com/index.html

    2、使用ulimit命令设置进程打开文件限制

        ulimit -n 10000


压力测试工具:

    http_load

    siege

    webbench