LAMMP环境的搭建

实验环境:

CentOS6.4 32位系统

VMware workstation 10



LAMMP环境的源码包搭建_第1张图片



   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。其守护进程(daemon )是用C写的,但是客户端可以用

任何语言来编写,并通过memcached协议与守护进程通信。


memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款

软件。已成为mixi、hatena、Facebook、Vox、LiveJournal等众多服务中提高Web应用扩展性的重

要因素。许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着

数据量的增大、访问的集中,就会出现RDBMS的负担加重、数据库响应恶化、网站显示延迟等重大影

响。



Memcached是一款开发工具,它既不是一个代码加速器,也不是数据库中间件。其设计哲学思想主要

反映在如下方面:


1. 简单key/value存储:服务器不关心数据本身的意义及结构,只要是可序列化数据即可。存储项

由“键、过期时间、可选的标志及数据”四个部分组成;

2. 功能的实现一半依赖于客户端,一半基于服务器端:客户负责发送存储项至服务器端、从服务端

获取数据以及无法连接至服务器时采用相应的动作;服务端负责接收、存储数据,并负责数据项的超

时过期;

3. 各服务器间彼此之间不互相通信:不在服务器间进行数据同步;服务器宕机,存储的数据立即丢


4. O/I的执行效率

5. 清理超期数据:默认情况下,Memcached是一个LRU缓存,同时,它按事先预订的时长清理超期数

据;但事实上,memcached不会删除任何已缓存数据,只是在其过期之后不再为客户所见;而且,

memcached也不会真正按期限清理缓存,而仅是当get命令到达时检查其时长


具体的实施步骤:


安装之前我们要先确认自己的系统是否已经安装了Apache,如果有rpm包安装的要卸载,如图

wKiom1L4q7jhOw-jAAA7cKR7a9A969.jpg


LAMMP环境的源码包搭建_第2张图片

LAMMP环境的源码包搭建_第3张图片


在我们的web服务器(Apache)上分别安装两块网卡,(此时,你两块网卡可以在同一网段,也可以

不再),注意,在虚拟机上安装网卡时可能会出现错误,如,setup之后ifconfig只出现一块eth1或

eth0的某一块网卡,这时,我们还要在虚拟机(设置中)上另外添加上setup上添加的那块网卡,之

后还可能会出现两块或一块都没有地址的情况,这时我们要用ifconfig eth0/1 x.x.x.x 来再加一

次地址



LAMMP环境的源码包搭建_第4张图片



当然,在此次实验中你也可以将Apache服务器设在同一网段,也可以达到实验效果,只不过不同网段更能体现出服务器间彼此分离的概念(本例虽然Apache服务器有两块网卡,但用的其实是eth0网卡,eth1只做介绍用)



Apache和php安装


和以前安装Apache的方法类似,我们要先安装apr 再安装apr-utils,具体的编译参数并不多,而具

体的头文件,库文件,man手册的操作,大家可参阅《Apache的源码包安装》


[root@localhost ~]# tar -zxvf apr-1.4.6.tar.gz -C /usr/local/src

[root@localhost ~]# cd /usr/local/src/

[root@localhost src]# cd ./apr-1.4.6/

[root@localhost apr-1.4.6]# ./configure --prefix=/usr/local/apr


[root@localhost apr-1.4.6]# make && make install



在apr安装完成之后,生产编译要用的文件的时候有一步老是报错,整了好长时间,可没脾气,最后

发现还是疏忽大意造成的,错误的原因为

[root@localhost apr-util-1.5.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-congfig

wKiom1L4q-LB1NiIAAAxBGlNkNw637.jpg

正确为

[root@localhost ~]tar -zxvf apr-util-1.5.1.tar.gz -C /usr/local/src

[root@localhost apr-1.4.6]# cd ..

[root@localhost src]# cd ./apr-util-1.5.1/

[root@localhost apr-util-1.5.1]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config


[root@localhost ~]# cd /usr/local/src/apr-util-1.5.1/

[root@localhost apr-util-1.5.1]# make && make install


因为在以后的httpd安装中要用到--with-pcre 而我们可以用 rpm -qa pcre查看并安装

[root@localhost apr-util-1.5.1]# rpm -qa pcre

pcre-7.8-6.el6.i686

[root@localhost apr-util-1.5.1]# rpm -qa libevent

[root@localhost apr-util-1.5.1]# rpm -qa pcre-devel

[root@localhost apr-util-1.5.1]# yum --disablerepo=\* --enablerepo=c6-media install

pcre-devel


然后是httpd的配置编译,具体命令如图,参数如下


[root@localhost ~]tar -jxvf httpd-2.4.4.tar.bz2 -C /usr/local/src


./configure  --prefix=/usr/local/apache \

--sysconfdir=/etc/httpd  \

--enable-so \

--enable-rewrite \

--with-apr=/usr/local/apr/bin/apr-1-config \

--with-apr-util=/usr/local/apr-util/bin/apu-1-config \

--with-pcre  \

-with-z   \

--enable-mpms-shared=all \

--with-mpm=event


LAMMP环境的源码包搭建_第5张图片


[root@localhost httpd-2.4.4]# make && make install



然后编写程序的控制脚本,并加入chkconfig的管理,内容如下:


#!/bin/bash

prog=/usr/local/apache/bin/httpd

lockfile=/var/lock/subsys/httpd


# chkconfig: 2345 88 44  

# description: the httpd server

start () {

      if [ -e $lockfile ]; then

      echo "the httpd is started"

      else

      echo "the httpd is starting..."

      sleep 1

      $prog -k start &>/dev/null  && echo "ok" && touch $lockfile || echo "fail"

      fi

}

stop () {

      if [ ! -e $lockfile ] ; then

      echo "the httpd is stoped"

       else

      echo "the httpd is stoping...."

      sleep 1

      $prog -k stop &>/dev/null && echo "ok" && rm -rf $lockfile || echo "file"

      fi

}

status () {

        if [ -e $lockfile ]; then

        echo "the http is runing....."

        else

        echo "the httpd is stop"

        fi

}

case "$1" in

start)

     start

      ;;

stop)

   stop

    ;;

restart)

     stop

     start

      ;;

*)

   echo "usage {start|stop|restart}"

esac


[root@localhost init.d]# vim /etc/init.d/httpd

[root@localhost init.d]# chmod a+x httpd

启动Apache服务,但在此之前我们要先改一下配置文件中的主机名选项


wKioL1L4q-ezPNLMAAAL3PEsbo0345.jpg



[root@localhost init.d]# service httpd start

the httpd is starting...

ok

[root@localhost init.d]# netstat -tupln |grep 80

tcp        0      0 :::80                       :::*                        LISTEN  


  3510/httpd    




在测试之前一定要记得关闭selinux和防火墙


[root@localhost init.d]# setenforce 0

[root@localhost init.d]# service iptables stop

iptables: Flushing firewall rules:                         [  OK  ]

iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

iptables: Unloading modules:                               [  OK  ]

[root@localhost init.d]#    


LAMMP环境的源码包搭建_第6张图片


安装php之前,我们要先建两个编译时要用的目录


[root@localhost ~]# mkdir -pv /etc/php /etc/php5.d

mkdir: created directory `/etc/php'

mkdir: created directory `/etc/php5.d'


[root@localhost ~]# tar -jxvf php-5.5.8.tar.bz2 -C /usr/local/src


[root@localhost php-5.5.8]#  ./configure    \

>  --prefix=/usr/local/php \

>  --enable-fpm   \

>  --enable-sockets  \

>  --with-mysql=mysqlnd \

>  --with-mysqli=mysqlnd  \

>  --with-pdo-mysql=mysqlnd \

>  --enable-mbstring  \

>  --enable-xml  \

>  --with-png-dir \

>  --with-jpeg-dir \

>  --with-zlib \

>  --with-freetype-dir \

>  --with-config-file-path=/etc/php \

>  --with-config-file-scan-dir=/etc/php5.d


configure: error: xml2-config not found. Please check your libxml2 installation.


[root@localhost php-5.5.8]# rpm -qa libxml2

libxml2-2.7.6-8.el6_3.4.i686

[root@localhost php-5.5.8]# yum --disablerepo=\* --enablerepo=c6-media install


libxml2-devel

Installed:

 libxml2-devel.i686 0:2.7.6-8.el6_3.4                                              

Dependency Installed:

 zlib-devel.i686 0:1.2.3-29.el6                                                    


Complete!


重复上一步./configure 操作,然后


LAMMP环境的源码包搭建_第7张图片


[root@localhost php-5.5.8]# make && make install


编译安装完后进行php.ini的文件配置

进入源码目录

[root@localhost php-5.5.8]# cp php.ini-production /etc/php/php.ini

php-fpm的控制脚本

[root@localhost php-5.5.8]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

改变权限

[root@localhost php-5.5.8]# chmod a+x /etc/init.d/php-fpm

[root@localhost php-5.5.8]# cd /usr/local/php/etc/

产生php-fpm的配置文件

[root@localhost etc]# cp php-fpm.conf.default php-fpm.conf

启动php-fpm

[root@localhost etc]# service php-fpm start

Starting php-fpm  done

[root@localhost etc]# chkconfig --add php-fpm

[root@localhost etc]# chkconfig php-fpm on

[root@localhost etc]# netstat -tupln |grep 9000

tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN  


  5063/php-fpm    



在php和fastcgi配置完成后要完成Apache与php的结合,原理为当客户发出一个80端口请求的时候,

当Apache发现请求的为php页面的时候会把他转发至9000端口(即fastcgi),这一功能的完成靠的是

一个模块,该模块将作用类似将其变为一种dso


将有关的模块加载控制字段打开,如图

LAMMP环境的源码包搭建_第8张图片

并添加一下两行语句

wKioL1L4q-rST2l5AAAwVACxSvo781.jpg

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps


添加代理的匹配规则,编写测试页面并重启Apache

ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/apache/htdocs/$1


wKiom1L4rBChWmqEAABOgsx7jQk731.jpg


[root@localhost etc]# vim /usr/local/apache/htdocs/index.php

LAMMP环境的源码包搭建_第9张图片

[root@localhost etc]# service httpd restart

the httpd is stoped

the httpd is starting...

ok


测试


LAMMP环境的源码包搭建_第10张图片


LAMMP环境的源码包搭建_第11张图片


为php加入加速功能,安装xcache

[root@localhost ~]# tar -zxvf xcache-3.1.0.tar.gz -C /usr/local/src/


利用phpize将其做成php的扩展模块

之后可以用./configure --help 来查看有关的参数帮助,因为他是php的模块,所以不需要额外指

明它的安装目录


[root@localhost ~]# cd /usr/local/src/xcache-3.1.0/

[root@localhost xcache-3.1.0]# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:         20121113

Zend Module Api No:      20121212

Zend Extension Api No:   220121212

[root@localhost xcache-3.1.0]# ./configure --enable-xcache --with-php-

config=/usr/local/php/bin/php-config


[root@localhost xcache-3.1.0]# make && make install

在安装完成之后会在/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/目录下

生成.so文件,如图


wKioL1L4sV-xYjk-AABRZy4dNJ8207.jpg


[root@localhost xcache-3.1.0]# cp xcache.ini /etc/php5.d/

[root@localhost xcache-3.1.0]# cd /etc/php5.d

[root@localhost php5.d]# vim xcache.ini


wKioL1L4sdyDaxKtAAAl6vjzvGE446.jpg


[root@localhost php5.d]# service php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done

[root@localhost php5.d]# vim /usr/local/apache/htdocs/index.php

页面测试:


wKiom1L4slyTAqZuAAAKlqCmhcA558.jpg

LAMMP环境的源码包搭建_第12张图片

LAMMP环境的源码包搭建_第13张图片



(此时你也可以加入xcache的管理页面,也可不加入,方法为

xcache的管理:

拷贝admin目录到Apache的站点目录

改变目录和文件的权限

配置xcache.ini  输入帐号信息




在配置memcached服务器之前要在Apache服务器安装memcached服务器的api插件(与xcache类似)

[root@localhost ~]# tar -zxvf memcache-2.2.7.tgz -C /usr/local/src


[root@localhost src]# cd ./memcache-2.2.7/

[root@localhost memcache-2.2.7]# /usr/local/php/bin/phpize

Configuring for:

PHP Api Version:         20121113

Zend Module Api No:      20121212

Zend Extension Api No:   220121212

[root@localhost memcache-2.2.7]# ./configure --enable-memcache --with-php-

config=/usr/local/php/bin/php-config


[root@localhost memcache-2.2.7]# make && make install


同样的编译安装完之后会在如图所示的相同目录下生成有关文件wKioL1L4s-qjF-T6AABknh2z_7g386.jpg

这时你可以选择将该文件加入/etc/php/php.ini文件下,也可以加入到/etc/php5.d/xcache.ini文

件下,然后重启php服务

[root@localhost memcache-2.2.7]# vim /etc/php5.d/xcache.ini


LAMMP环境的源码包搭建_第14张图片


[root@localhost memcache-2.2.7]# service php-fpm restart

Gracefully shutting down php-fpm . done

Starting php-fpm  done


然后利用浏览器进行测试,结果如图


LAMMP环境的源码包搭建_第15张图片


MySQL的安装



本次实验的MySQL服务器也将和Apache处于不同的物理机器上,我们先以MySQL的绿色软件包安装为例安装MySQL,然后进行测试(php和mysql的连接)

地址规划:


LAMMP环境的源码包搭建_第16张图片



wKiom1L5qKrRDNV2AAArM2ArwSA286.jpg


[root@localhost ~]# tar -zxvf mysql-5.5.35-linux2.6-i686.tar.gz -C /usr/local/


[root@localhost ~]# cd /usr/local/

[root@localhost local]# ls

bin  etc  games  include  lib  libexec  mysql-5.5.35-linux2.6-i686  sbin  share  src

[root@localhost local]# ln -s  mysql-5.5.35-linux2.6-i686/ mysql

[root@localhost local]# ll

total 40

drwxr-xr-x.  2 root root 4096 Sep 23  2011 bin

drwxr-xr-x.  2 root root 4096 Sep 23  2011 etc

drwxr-xr-x.  2 root root 4096 Sep 23  2011 games

drwxr-xr-x.  2 root root 4096 Sep 23  2011 include

drwxr-xr-x.  2 root root 4096 Sep 23  2011 lib

drwxr-xr-x.  2 root root 4096 Sep 23  2011 libexec

lrwxrwxrwx.  1 root root   27 Feb  9 17:43 mysql -> mysql-5.5.35-linux2.6-i686/

drwxr-xr-x. 13 root root 4096 Feb  9 17:42 mysql-5.5.35-linux2.6-i686

drwxr-xr-x.  2 root root 4096 Sep 23  2011 sbin

drwxr-xr-x.  5 root root 4096 Jan 18 06:22 share

drwxr-xr-x.  2 root root 4096 Sep 23  2011 src


主要大致步骤

shell> groupadd mysql

shell> useradd -r -g mysql mysql

shell> cd /usr/local

shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz

shell> ln -s full-path-to-mysql-VERSION-OS mysql

shell> cd mysql

shell> chown -R mysql .

shell> chgrp -R mysql .

shell> scripts/mysql_install_db --user=mysql

shell> chown -R root .

shell> chown -R mysql data

# Next command is optional

shell> cp support-files/my-medium.cnf /etc/my.cnf

shell> bin/mysqld_safe --user=mysql &


mysqld和mysqld_safe 有什么区别?

直接运行mysqld程序来启动MySQL服务的方法很少见,mysqld_safe脚本会在启动MySQL服务器后继续

监控其运行情况,并在其死机时重新启动它。用mysqld_safe脚本来启动MySQL服务器的做法在BSD风

格的unix系统上很常见,非BSD风格的UNIX系统中的mysql.server脚本其实也是调用mysqld_safe脚

本去启动MySQL服务器的。


# Next command is optional

shell> cp support-files/mysql.server /etc/init.d/mysql.server


[root@localhost mysql]# groupadd mysql

[root@localhost mysql]# useradd -r -g mysql mysql


[root@localhost mysql]# chown -R mysql .

[root@localhost mysql]# chgrp -R mysql .

[root@localhost mysql]# scripts/mysql_install_db --user=mysql

Installing MySQL system tables...

OK

Filling help tables...

OK

root@localhost mysql]# ll ./data/

total 4

drwxr-xr-x. 2 mysql mysql 4096 Feb  9 17:40 test

(没有初始化授权表格的出现,这也是下面将会出现错误的原因,会提示找不到pid文件)


[root@localhost mysql]# chown -R root .

[root@localhost mysql]# chown -R mysql data

[root@localhost mysql]# cp support-files/my-medium.cnf /etc/my.cnf

cp: overwrite `/etc/my.cnf'? y

[root@localhost mysql]# cp support-files/mysql.server /etc/init.d/mysqld

[root@localhost mysql]# chmod a+x /etc/init.d/mysqld



[root@localhost mysql]# service mysqld start

Starting MySQL.... ERROR! The server quit without updating PID file

(/usr/local/mysql/data/localhost.localdomain.pid).


[root@localhost mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &

[1] 3303

[root@localhost mysql]# 140209 18:03:51 mysqld_safe Logging to

'/usr/local/mysql/data/localhost.localdomain.err'.

140209 18:03:51 mysqld_safe Starting mysqld daemon with databases from

/usr/local/mysql/data

140209 18:03:52 mysqld_safe mysqld from pid file

/usr/local/mysql/data/localhost.localdomain.pid ended


[1]+  Done                    /usr/local/mysql/bin/mysqld_safe --user=mysql

[root@localhost mysql]# service mysqld status

ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists

[root@localhost mysql]# service mysqld restart

ERROR! MySQL server PID file could not be found!

Starting MySQL.. ERROR! The server quit without updating PID file


(/usr/local/mysql/data/localhost.localdomain.pid).

在这一步是有错误的(32位系统上小编发现都会出现这种错误),原因很可能是上几步执行scripts/mysql_install_db --user=mysql 时产生不了数据库的初始化运行者(mysql)表的原因,但在继续改变身份(组)后运行scripts/mysql_install_db --user=mysql是可以产生表的

[root@localhost mysql]# chown -R mysql .

[root@localhost mysql]# chgrp -R mysql .

[root@localhost mysql-5.5.35-linux2.6-i686]# scripts/mysql_install_db --user=mysql

Installing MySQL system tables...

OK

Filling help tables...

OK



[root@localhost mysql-5.5.35-linux2.6-i686]# cd ./data

[root@localhost data]# ll

total 29776

-rw-rw----. 1 mysql mysql 18874368 Feb  9 18:00 ibdata1

-rw-rw----. 1 mysql mysql  5242880 Feb  9 18:05 ib_logfile0

-rw-rw----. 1 mysql mysql  5242880 Feb  9 17:59 ib_logfile1

-rw-r-----. 1 mysql mysql     5692 Feb  9 18:05 localhost.localdomain.err

drwx------. 2 mysql root      4096 Feb  9 18:13 mysql

-rw-rw----. 1 mysql mysql      107 Feb  9 18:00 mysql-bin.000001

-rw-rw----. 1 mysql mysql      107 Feb  9 18:03 mysql-bin.000002

-rw-rw----. 1 mysql mysql      107 Feb  9 18:05 mysql-bin.000003

-rw-rw----. 1 mysql mysql    27735 Feb  9 18:13 mysql-bin.000004

-rw-rw----. 1 mysql mysql  1062964 Feb  9 18:13 mysql-bin.000005

-rw-rw----. 1 mysql mysql       95 Feb  9 18:13 mysql-bin.index

drwx------. 2 mysql mysql     4096 Feb  9 18:13 performance_schema

drwxr-xr-x. 2 mysql mysql     4096 Feb  9 17:40 test

[root@localhost data]# pkill mysqld

[root@localhost data]# service mysqld restart

ERROR! MySQL server PID file could not be found(上一次pid的原因)

Starting MySQL... SUCCESS! (成功启动)

[root@localhost data]# service mysqld status

SUCCESS! MySQL running (4338)


[root@localhost data]# ps aux |grep mysq*

Binary file mysql-bin.000004 matches

Binary file mysql-bin.000005 matches

mysql-bin.index:./mysql-bin.000001

mysql-bin.index:./mysql-bin.000002

mysql-bin.index:./mysql-bin.000003

mysql-bin.index:./mysql-bin.000004

mysql-bin.index:./mysql-bin.000005

mysql-bin.index:./mysql-bin.000006

[root@localhost data]# service mysqld restart

Shutting down MySQL. SUCCESS!

Starting MySQL.. SUCCESS!

[root@localhost data]# service mysqld stop

Shutting down MySQL. SUCCESS!

[root@localhost data]# service mysqld start

Starting MySQL.. SUCCESS!

[root@localhost data]#


在MySQL安装完成之后默认只允许在本机上进行连接操作,其他不允许,所以我们要添加额外的管理

账号,我们需要在user表格中写入有关数据

过程如图所示


LAMMP环境的源码包搭建_第17张图片

LAMMP环境的源码包搭建_第18张图片


LAMMP环境的源码包搭建_第19张图片


LAMMP环境的源码包搭建_第20张图片

其中%表示可以来自任意地址


wKiom1L4rBvDQCylAAA_WfSrQ0E179.jpg


LAMMP环境的源码包搭建_第21张图片


编写数据库的连接测试页,


LAMMP环境的源码包搭建_第22张图片

并用浏览器测试,(一定要注意关闭selinux和防火墙设置)


[root@localhost data]# setenforce 0

[root@localhost data]# service iptables stop

iptables: Flushing firewall rules:                         [  OK  ]

iptables: Setting chains to policy ACCEPT: filter          [  OK  ]

iptables: Unloading modules:                               [  OK  ]


[root@localhost data]# service mysqld status

SUCCESS! MySQL running (5054)


LAMMP环境的源码包搭建_第23张图片

[root@localhost data]# service mysqld stop

Shutting down MySQL..... SUCCESS


LAMMP环境的源码包搭建_第24张图片


几种常见错误解决:


《一》 Starting MySQL.. ERROR! The server quit without updating PID file

(/usr/local/mysql/data/localhost.l源目录安装mysql5.5.19后,把mysql.server放

到/etc/init.d/下,使用service mysql start|restart|stop来控制mysql,结果报以下错误:

Starting MySQL.. ERROR! The server quit without updating PID file

(/usr/local/mysql/data/localhost.localdomain.pid)

解决方法:

问题点:权限不足。。。

解决方法:编辑/etc/init.d/mysql,找到start模块,添加--user=root到mysqld_safe。。。后面

就可以



《二》,[root@centos var]# service mysqld stop

MySQL manager or server PID file could not be found!       [FAILED]

解决办法:

首先查看一下进程

[root@irxpert-test /]# ps aux |grep mysq*

root     10274  0.0  0.0  68160  1336 ?        S    13:43   0:00 /bin/sh


/usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/irxpert-


test.pid

mysql    10353  0.0  1.0 344360 39464 ?        Sl   13:43   0:00 /usr/sbin/mysqld -


-basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --

user=mysql --log-error=/var/lib/mysql/irxpert-test.err --pid-

file=/var/lib/mysql/irxpert-test.pid

root     11884  0.0  0.0  63384   760 pts/1    S+   15:44   0:00 grep mysq*

如果看到上面的内容,那说明,Mysql的进程卡死了,这时用就要把这些卡死的进程都关闭

[root@centos mysql]# kill 10274

[root@centos mysql]# kill 10353

启动Mysql就ok了

[root@centos mysql]# service mysql start

Starting MySQL.                                            [  OK  ]




memcached服务器的配置步骤:

安装事件的触发库,用于与Apache服务器连接

[root@localhost ~]# tar -zxvf libevent-2.0.21-stable.tar.gz -C /usr/local/src


编译安装

[root@localhost libevent-2.0.21-stable]# ./configure --prefix=/usr/local/libevent


[root@localhost libevent]# make && make install


编译安装完之后的目录内容如图所示

LAMMP环境的源码包搭建_第25张图片



编写系统库文件的加载配置文件,加入libevent的库,如图步骤

内容为:

wKiom1L4tpOxyjYzAAAZUpCyePU175.jpg

库路径加入后的结果:

LAMMP环境的源码包搭建_第26张图片



安装memcached


[root@localhost ~]# tar -zxvf memcached-1.4.17.tgr.gz -C /usr/local/src


[root@localhost ~]# cd /usr/local/src/memcached-1.4.17/

[root@localhost memcached-1.4.17]# ./configure --prefix=/usr/local/memcached --with

-libevent=/usr/local/libevent/


[root@localhost memcached-1.4.17]# make && make install


编译安装完之后的目录内容如图所示

LAMMP环境的源码包搭建_第27张图片


启动memcached服务并查看端口

wKiom1L4t8bQKSbLAAAoOMxQEoY448.jpg


[root@localhost bin]# ./memcached -u nobody -m 128m -d -vv

[root@localhost bin]# netstat -tupln |grep 11211

tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN  


  13022/./memcached  

tcp        0      0 :::11211                    :::*                        LISTEN  


  13022/./memcached  

udp        0      0 0.0.0.0:11211               0.0.0.0:*                            


  13022/./memcached  

udp        0      0 :::11211                    :::*                                


  13022/./memcached  


测试登录,如图所示



LAMMP环境的源码包搭建_第28张图片


在Apache上编写如下的memcached测试页面


[root@localhost memcache-2.2.7]# vim /usr/local/apache/htdocs/index.php


error_reporting(E_ALL & ~E_NOTICE);


$mc = new memcache;

$mc->addServer("localhost", 11211);


$mc->set("foo", "Hello!");

$mc->set("bar", "Memcached...");


$arr = array(

 $mc->get("foo"),

 $mc->get("bar")

);

var_dump($arr);

?>

LAMMP环境的源码包搭建_第29张图片

上图的意思为在192.168.2.177的服务器上存放一个foo值 “hello” 一个bar 值“memcached”


知识补充:

set foo 0 0 3     (保存命令)

bar               (数据)

STORED            (结果)

get foo           (取得命令)

VALUE foo 0 3     (数据)

bar               (数据)


-p使用的TCP端口。默认为11211

-m最大内存大小。默认为64M

-vv用very vrebose模式启动,调试信息和错误输出到控制台

-d作为daemon在后台启动



查看memcached的内部状态


memcached有个名为stats的命令,使用它可以获得各种各样的信息。 执行命令的方法很多,用telnet最为简单:

$ telnet 主机名 端口号

连接到memcached之后,输入stats再按回车,即可获得包括资源利用率在内的各种信息。

此外,输入"stats slabs"或"stats items"还可以获得关于缓存记录的信息。 结束程序请输入quit。

这些命令的详细信息可以参考memcached软件包内的protocol.txt文档。


列  含义

#          slab class编号

Item_Size   Chunk大小

Max_age     LRU内最旧的记录的生存时间

1MB_pages     分配给Slab的页数

Count        Slab内的记录数

Full?        Slab内是否含有空闲chunk


基于libevent的事件处理


libevent是个程序库,它将Linux的epoll、BSD类操作系统的kqueue等事件处理功能 封装成统一的接口。

即使对服务器的连接数增加,也能发挥O(1)的性能。 memcached使用这个libevent库,

因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。 关于事件处理这里就不再详细介绍,可以参考Dan Kegel的The C10K Problem。

内置内存存储方式


为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。

由于数据仅存在于内存中,因此重启memcached、重启操作系统会导致全部数据消失。

另外,内容容量达到指定值之后,就基于LRU(Least Recently Used)算法自动删除不使用的缓存。


保存数据


向memcached保存数据的方法有

1.add

2.replace

3.set

它们的使用方法都相同:

my $add = $memcached->add( '键', '值', '期限' );

my $replace = $memcached->replace( '键', '值', '期限' );

my $set = $memcached->set( '键', '值', '期限' );

向memcached保存数据时可以指定期限(秒)。不指定期限时,memcached按照LRU算法保存数据。 这三个方法的区别如下:

选项说明

add存储空间中不存在键相同的数据时才保存

replace当存储空间中存在键相同的数据时才保存

setadd和replace不同,无论何时都保存

获取数据


获取数据可以使用get和get_multi方法。

my $val = $memcached->get('键');

my $val = $memcached->get_multi('键1', '键2', '键3', '键4', '键5');

一次取得多条数据时使用get_multi。get_multi可以非同步地同时取得多个键值, 其速度要比循环调用get快数十倍。

删除数据


删除数据使用delete方法,不过它有个独特的功能。

$memcached->delete('键', '阻塞时间(秒)');

删除第一个参数指定的键的数据。第二个参数指定一个时间值,可以禁止使用同样的键保存新数据。

此功能可以用于防止缓存数据的不完整。但是要注意,set函数忽视该阻塞,照常保存数据



在Apache服务器上进行缓存192.168.2.177 memcached服务器测试,结果如图所示


LAMMP环境的源码包搭建_第30张图片

为了验证我们实验浏览器端结果的正确性,我们可以在memcached服务器端进行相同的测试并比较,如图:


LAMMP环境的源码包搭建_第31张图片