LAMP简介
LAMP指的Linux(操作系统)、ApacheHTTP 服务器,MySQL(有时也指MariaDB,数据库软件)和PHP(有时也是指Perl或Python) 的第一个字母,一般用来建立web应用平台。
虽然这些开放源代码程序本身并不是专门设计成同另几个程序一起工作的,但由于它们的免费和开源,这个组合开始流行。
Linux是免费开源软件,这意味着源代码可用的操作系统。
Apache是使用中最受欢迎的一个开放源码的WEB服务器软件。实际为httpd,人们更喜欢叫它Apache
MySQL是多线程、多用户的SQL数据库管理系统。MySQL 已由Oracle公司自2010年1月27日通过SUN购买。SUN最初于2008年2月26日收购MySQL。
PHP,Perl 或 Python 是一种编程语言最初设计生产动态网站。PHP是主要用于服务器端的应用程序软件。Perl和Python类似。
LAMP工作原理
client请求httpd服务:
静态:向本地的内核发起系统调用,通过IO请求,加载本地文件,返回即可client--http-->httpd
动态:httpd进程通过cgi协议,向后端运行cgi程序的环境,提请一个进程,加载到cgi脚本到用户空间,让子进程运行子进程运行的结果用cgi协议返回给server client--http-->httpd--->cgi-->libphp5.so() 动态资源:client--[http]-->httpd--->libphp5.so()--[mysql]--->mysql server ##可以把libphp5.so理解为php引擎
注:php自己是不会和mysql交互的,但是php中的代码可能用到mysql,对于http来说,返回的都是纯文本数据流 动态的返回的也是运行后的结果而已 http负责响应client请求以及管理后端的cgi进程
MySQL&MariaDB
MySQL是一个关系型数据库,由mysql ab公司开发mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)MySQL官网https://www.mysql.comMySQL5.6变化比较大,5.7性能上有很大提升
Mariadb为MySQL的一个分支,官网:https://mariadb.com/MariaDB主要由SkySQL公司(现更名为MariaDB公司)维护,SkySQL公司由MySQL原作者带领大部分原班人马创立.Mariadb5.5版本对应MySQL的5.5,10.0对应MySQL5.6
版本名称
Community 社区版本
Enterprise 企业版
GA(Generally Available)指通用版本,在生产环境中用的
DMR(Development Milestone Release)开发里程碑发布版
RC(Release Candidate)发行候选版本
Beta开放测试版本
Alpha内部测试版本
安装MySQL
采用二进制免编译安装包进行安装
#进入软件源码存放目录cd /usr/local/src/
#下载二进制包wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
#解压二进制包tar xvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
#将解压好的目录移动到/usr/local/目录下重命名为mysql mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
#进入/usr/local/mysql目录cd /usr/local/mysql
###到此安装成功
安装完成后,创建mysql用户,数据文件夹,以及修改对应权限
useradd -s /sbin/nologin -rM mysql
chown -R mysql.mysql /usr/local/mysql
#创建数据目录 mkdir -p /data/mysqlchown -R mysql.mysql /data/mysql
#初始化数据库cd /usr/local/mysql/
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql/
编辑MySQL配置文件
cp /etc/my.cnf /etc/my.cnf.bak #备份初始配置文件
echo > /etc/my.cnf #清空配置文件
vim /etc/my.cnf #编辑配置文件写入下面的内容后保存退出
[mysqld]port = 3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
user=mysql
default-time-zone=system
default-storage-engine=InnoDB
log-error=/var/log/mysqld.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
将mysql启动脚本放入/etc/init.d/目录中重命名为mysqld
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
将mysql启动脚本加入chkconfig管理
chkconfig --add mysqld
设置mysql开机自启动
chkconfig mysqld on
启动mysqld
service mysqld start
安装MariaDB
下载二进制包
wget https://downloads.mariadb.com/MariaDB/mariadb-10.2.6/bintar-linux-glibc_214-x86_64/mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
解压二进制包,然后移动到/usr/local/目录下重命名为mariadb
tar zxf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb
创建mysql数据库用户
useradd mysql -s /usr/bin/nologin -M
创建数据库数据存放目录及赋予权限
mkdir /data/mariadb -p
chown mysql.mysql /data/mariadb /usr/local/mariadb -R
初始化mariadb
cd /usr/local/mariadb/
./scripts/mysql_install_db --user=mysql --datadir=/data/mariadb
复制配置文件到/etc目录下
cd /usr/local/mariadb/support-files
cp my-small.cnf /etc/my.cnf
#在配置文件中 [mysqld] 标签下面一行添加以下内容
datadir = /data/mariadb
复制mariadb启动脚本到/etc/init.d/目录下,重命名为mariadbd
cp mysql.server /etc/init.d/mariadbd
im /etc/init.d/mariadbd #编辑mariadb启动脚本
##找到下面的两行:basedir=datadir=
##修改为:basedir=/usr/loacl/mariadb
datadir=/data/mariadb
将mariadbd服务加入chkconfig管理
chkconfig --add mariadbd
chkconfig mariadbd on
chkconfig --list
ariadbd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
network 0:off 1:off 2:off 3:on 4:off 5:off 6:off
启动mariadbd服务
systemctl start mariadbd 或者 mysql_safe start --defaults-file=/etc/my.cn --datadir=/data/mariadb
Apache
###1:进入存放源码的目录cd /usr/local/src
###2:下载源码安装包wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.33.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz
wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.bz2
wget https://sourceforge.net/projects/expat/files/expat/2.2.3/expat-2.2.3.tar.bz2##(注:apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows))
####apr-util 1.6.0不再捆绑安装 expat ,但又需要expat的支持,所以我们得手动先安装expat。不然编译 apache 的时候会报错。
###进入expat-2.2.3源码目录cd expat-2.2.3
###设置安装参数./configure --prefix=/usr/local/expat
###编译安装make -j4 && make install
#检查是否有错误。输出0表示安装成功 echo $?
编译安装apr依赖包
###进入apr-util源码目录cd /usr/local/src/apr-1.6.3
###设置安装参数 ./configure --prefix=/usr/local/apr
###编译并安装make -j4 && make -j4 install
#检查是否有错误。输出0表示安装成功 echo $?
编译安装apr-util
###进入apr-util源码目录cd /usr/local/src/apr-util-1.6.1
###设置安装参数 ./configure \--prefix=/usr/local/apr-util \--with-apr=/usr/local/apr \--with-expat=/usr/local/expat
###编译并安装make -j4 && make -j4 install
#检查是否有错误。输出0表示安装成功 echo $?0
编译安装httpd
###进入httpd源码目录 cd /usr/local/src/httpd-2.4.33
###设置安装参数# ./configure \--prefix=/usr/local/apache2.4 \--with-apr=/usr/local/apr \--with-apr-util=/usr/local/apr-util \--enable-so \--enable-mods-shared=most###这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行,反斜杠后面不能有任何字符###--enable-so 可以让Apache支持动态扩展,###--enable-mods-shared=most 让Apache加载大多数需要用到的模块。
#检查是否有错误。输出0表示没有错误 echo $?0#####如果报错:configure: error: pcre-config for libpcre not found. #####解决办法:yum install -y pcre-devel
###编译并安装# make && make install#检查是否有错误。输出0表示安装成功echo $?0
Apache常用目录
./bin存放Apache主要的二进制可执行文件,还有一些命令,httpd,apachectl等。
./conf 存放配置文件的目录
./logs 存放日志文件的目录
./modules 存放模块的目录,一个文件就是一个模块,也就是一个功能
查看httpd加载了哪些模块
/usr/local/apache2.4/bin/apachectl -M
Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_event_module (static) authn_file_module (shared)(省略...) (static) 表示静态的模块,已经编译到httpd主程序中, (shared) 表示这个一个扩展的模块。
启动httpd服务
/usr/local/apache2.4/bin/apachectl -t #检查配置文件是否有错误
/usr/local/apache2.4/bin/apachectl start 启动httpd服务。
安装PHP5
##进入存放源码包的目录cd /usr/local/src/
##下载源码包wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
##解压源码包tar zxf php-5.6.30.tar.gz
##进入源码目录cd php-5.6.30
设置安装参数
./configure --prefix=/usr/local/php \--with-apxs2=/usr/local/apache2.4/bin/apxs \--with-config-file-path=/usr/local/php/etc \--with-mysql=/usr/local/mysql \--with-pdo-mysql=/usr/local/mysql \--with-mysqli=/usr/local/mysql/bin/mysql_config \--with-libxml-dir \--with-gd \--with-jpeg-dir \--with-png-dir \--with-freetype-dir \--with-iconv-dir \--with-zlib-dir \--with-bz2 \--with-openssl \--with-mcrypt \--enable-soap \--enable-gd-native-ttf \--enable-mbstring \--enable-sockets \--enable-exif
####重要安装参数说明:--prefix 指定安装路径--apxe2 apache的一个工具,可以自动将PHP生成的模块文件放到modules目录下,并且添加相关配置--with-config-file 指定php配置文件所在的路径 --with-mysql 指定mysql的路径--with-pdo-mysql、--with-mysqli : mysqli扩展技术不仅可以调用MySQL的存储过程、处理MySQL事务,而且还可以使访问数据库工作变得更加稳定。
配置httpd支持php
PHP安装完成后,apxs工具会自动在httpd.conf配置文件中添加相应的模块加载配置
httpd.conf是httpd服务的主要配置文件。
检查apxs自动添加的配置
cat /usr/local/apache2 .4 /conf/httpd.conf | grep "LoadModule php"cd /usr/local/apache2.4/conf
sed -i s'/LoadModule php7/#&/'p httpd.conf
grep "LoadModule php7" httpd.conf
#LoadModule php7_module modules/libphp7.so
[root@long0000 conf]# vim httpd.conf
找到:#ServerName www.example.com:80 去掉前面的#号,可解决安装完apache时,启动服务的那个警告
找到:<Directory /> AllowOverride none Require all denied</Directory>将 Require all denied 修改为 Require all granted
找到:AddType application/x-gzip .gz .tgz在下面添加一行:AddType application/x-httpd-php .php
找到:<IfModule dir_module> DirectoryIndex index.html index.php</IfModule>在DirectoryIndex后面添加上 index.php##index一般为索引页, 也就是默认页面##当访问一个域名时,域名后面没有指定任何文件时,默认就会请求这个文件。##比如访问www.baidu.com 实际就是访问的是 www.baidu.com/index.php
启动httpd服务
##测试配置文件是否有语法错误cd /usr/local/apache2.4/bin
./apachectl -tSyntax OK #输出Syntax OK 表示配置文件没有语法错误。
##启动服务 ./apachectl start
测试访问PHP页面
##/usr/local/apache2.4/htdocs/目录下创建一个PHP文件test.php,并写入一段简单的PHP代码。
echo -e '<?php\necho"php test";\n?>' > /usr/local/apache2.4/htdocs/test.php
测试浏览器访问PHP index,php
##将htdocs目录下 index.html 文件重命名为 index.php
cd /usr/local/apache2.4/htdocs/
mv index.html index.php##修改index.php的内容
echo -e '<?php\nphpinfo()\n?>' > index.php
cat index.php <?phpphpinfo()?>
如果出现如下界面,表示php正常
扩展:
mysql5.5源码编译安装 http://www.aminglinux.com/bbs/thread-1059-1-1.html
mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html
apache dso https://yq.aliyun.com/articles/6298
apache apxshttp://man.chinaunix.net/newsoft/ApacheMenual_CN_2.2new/programs/apxs.html
apache工作模式 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn.net/u013785951/article/details/60876816
查看编译参数 http://ask.apelearn.com/question/1295