1、 LAMP架构介绍
LAMP是一个简写,包含了4个东西:linux、apache(httpd)、mysql、php
Linux为操作系统,apache是提供web服务的中间件,mysql主要存储数据,php是一个脚本语言,和shell类似,但是相对复杂,通常用来写网站。
安装 参考链接:http://blog.51cto.com/liuleis/2087528
针对apapche、mysql、php三个角色,它们可以部署在同一台机器上,也可以单独部署mysql,但是httpd和php要部署在同一台机器上(为什么?)
apache和php视为一个整体,因为php是以一个模块(PHP module)和apapche相互进行数据交互的,也就是说apahce不能直接和mysql进行数据交互,只能通过php module模块向mysql取数据,然后再返回给apache ,最终再返回用户发出的访问请求。
注意:
PHP modle向mysql取数据的过程,我们称为动态请求,比如我们访问知乎网站时,在浏览器上输入账号密码,然后交给apache,apache拿到用户输入的账号密码后,通过PHP Module把数据传递给mysql进行一个比较验证,看看用户在浏览器上输入账号密码和mysql数据中的是否一致,mysql再通过PHP Module返回验证结果给apapche,如果用户在浏览器输入正确账号密码后就能顺利登陆。这个过程就是一个动态请求的过程
如果你是访问某个网站上图片(静态文件),也就是没有和mysql进行数据交互,这个过程就是静态请求,需要说明的是mysql里面不存图片(静态文件)
内容:
1、何为LAMP
2、LAMP的架构以及通信过程
3、LAMP的搭建过程(rpm包)
4、基于LAMP搭建wordpress博客
一、何为LAMP
LAMP(Linux-Apache-MySQL-PHP)网站架构是目前国际流行的Web框架,该框架包括:Linux操作系统,Apache网络服务器,MySQL数据库,Perl、PHP或者Python编程语言,所有组成产品均是开源软件,是国际上成熟的架构框架,很多流行的商业应用都是采取这个架构,LAMP具有通用、跨平台、高性能、低价格的优势,因此LAMP无论是性能、质量还是价格都是企业搭建网站的首选平台。
二、LAMP的架构以及通信过程
LAMP的架构:
LAMP是一个多C/S架构的平台,最初级为web客户端基于TCP/IP通过http协议发起传送,这个请求可能是动态的,也可能是静态的。
所以web服务器通过发起请求的后缀来判断,如果是静态的资源就由web服务器自行处理,然后将资源发给客户端。如果是动态这时web服务器会通过CGI(Common Gateway interface)协议发起给php。
这里但是如果php是以模块形式与Web服务器联系。那么他们是通过内部共享内存的方式。如果是php单独的放置与一台服务器,那么他们是通过sockets套接字监听的方式通信(这又是一个C/S架构)。
这时php会相应的执行一段程序,如果在执行程序时,需要用到数据。那么php就会通过mysql协议发送给mysql服务器(也可以看作是一个C/S架构)。由mysql服务器处理,将数据供给php程序。
lamp流程:
1. 用户发送http请求到达httpd服务器
2. httpd解析url获取需要的资源的路径,通过内核空间读取硬盘资源,如是静态资源,则构建响应报文,发回给用户
3. 如果是动态资源,将资源地址发给php解析器,解析php程序文件,解析完毕将内容发回给httpd,httpd构建响应报文,发回给用户
4. 如果涉及到数据库操作,则利用php-mysql驱动,获取数据库数据,返回给PHP解析器。
A,M,P是怎么联动起来工作的呢:
1、apache + php结合的方式大概几种:
第一种:把php编译时直接编译成apache的模块、module模块化的方式进行工作(apahce默认的这种方式)。
第二种:CGI、通用网关接口、apache基于CGI跟hph通信
第三种:fastcgi、他也是一种协议、在这种模块下他们两个是这样结合的:
本来php是做为一个模块或都是php解析器运行的,不是监听在某个套接字上接收别人的请求的,而是让别人调用为一个进程使用的,可能是做为别人的子进程在运行,但是工作在fastcgi这种模块下的hph自行启用为一个服务进程,
他监听在某个套接字上,随时可以接受来自客户端的请求的,他也是有一个主进程的,为了可以响应多个用户的请求,他会启用多个子进程,这些子进程我们也可以称为工作进程,
他也是有空闲进程的,一但有客户请求他马上使用空闲的进程响应客户端的请求,将结果返回给前端的调用者,在php5.3.3版本之前他是没有这个能力了,只能工作在模块和CGI的方式下,而在5.3.3之后这个模块直接被收进php模块中,这种模块就叫php-fpm。
所以在以后编译php时,要想跟apache结合,就要编译成php-fpm,这是基于fastcgi工作的模式,并启动这服务进程,也就意味着他是通过套接字跟前端的调用者通信,既然基于套按字通信了,那么前端的web服务器和后面的php服务器完全可以工作在不同的主机上,实现了所谓的分层机制。
apache不会跟数据库打交道,他是个静态web服务器,跟数据库打交道的是应用程序,作为应用程序的源驱动能够基于某个API跟服务器之间建立会话,而后他会通过我们的mysql语句发送给数据库,数据库再将结果返回给应用程序,不是php进程,而是php进程中所执行的代码。
2、php + mysql的通信:
PHP跟mysql怎么整合起来呢,php又怎么被httpd所调用呢
首先httpd并不具备解析代码的能力,他要依赖于php的解析器,接着php本身不依赖于mysql,他只是一个解析器,能执行代码就OK了,那他什么时候用到mysql呢,如果要在mysql中存数据时才用到mysql,只是当php中有运行mysql语句时才用到mysql。
php语言要想联系mysql,通常用到php的驱动,rpm包的叫php_mysql,php跟mysql没有一点关系,只有程序员在php中编写mysql语句时才连接mysql来执行sql语句的。
基于php-mysql去连接mysql只使用一个函数mysql_connect();而mysql_connect()正是php-mysql提供的一个API,只要指明要连接的服务器即可。
三、LAMP搭建过程(基于rpm包):
(1)安装配置apache,基于虚拟主机模式的https协议
(2)安装配置mysql
(3)安装配置php,以及php-mysql模块
(4)基于LAMP搭建wordpress测试
设置虚拟主机配置:
1 2 3 4 5 6 7 8 9 |
|
LAMP架构原理及搭建详解以及安装:http://blog.51cto.com/6638225/1859803
LAMP架构实现网站动静分离及流行博客论坛安装实验(Linux公社):https://www.linuxidc.com/Linux/2014-12/110940.htm
LAMP网站架构方案分析:http://www.williamlong.info/archives/1908.html
常见问题:
1、发表的帖子为什么会存在mysql里?
答案:图片、js、css等属于静态文件。
帖子内容其实就是文字,这种文字的数据自然是要存到数据库里。
2、httpd和php为什么需要组合在一起,不能分开部署在不同的节点使用网络来进行数据协同吗?
答:因为我们使用的方式是,php作为httpd的一个模块存在的。 他们两者必须要在一起,才能实现效果。
当然,如果你把php做成以fastcgi的形式,这样httpd可以在另外的机器上调用它,这样用就跟lnmp类似了。
静态,就是直接由webserver处理的请求,比如图片,js,css等,帖子是静态,而动态的是需要和数据库打交道的请求,比如你现在访问ask.apelearn.com,登录用户,发帖子,看帖子,这些都是需要和数据库打交道的。这样的就是动态。
3、还有什么方法可以区分动态和静态的请求?、
简单点就是看网址。。
html就是静态的。
动态页面是以ASP、PHP、JSP、ASP.net、Perl、或CGI等编程语言制作的
动态页面又叫动态链接,英文写法是:Dynamic URL
4、
注意:服务器是通过识别文件后缀来区分:动态和静态请求。
静态缓存和动态缓存的比较链接:https://blog.csdn.net/cpp_lzth/article/details/6167940
https://bbs.csdn.net/topics/370227926
2 、MySQL、MariaDB介绍
-
Mariadb是MySQL的另一个版本
-
GA版本是的平常使用的版本。
MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
MariaDB基于事务的Maria存储引擎,替换了MySQL的MyISAM存储引擎,它使用了Percona的 XtraDB,InnoDB的变体,分支的开发者希望提供访问即将到来的MySQL 5.4 InnoDB性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX存储引擎。
3、 MySQL安装
- rpm包直接yum安装
- 二进制免编译包:直接方便快捷,没有指定安装包时,用这个二进制的
1、数据库基础知识
-
MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言–结构化查询语言(SQL)进行数据库管理。
-
MySQL在2008年被SUN公司收购,2009年SUN公司被Oracle公司收购。
-
MySQL5.6功能变化较大,MySQL5.7性能上有很大提升
-
Mariadb为MySQL的一个分支,官方网站:https://mariadb.com, MariaDB主要由SkySQL公司维护,而SkySQL公司团队是由MySQL原作者等大部分原班人马组成的。
- MySQL版本分为Community社区版、Enterprise企业版、GA(Generally Available)通过版本(通常用于生产环境)、DMR(Development Milestone Release)开发里程碑发布版、RC(Release Candidate)发行候选版本、Beta开放测试版本、Alpha内部测试版本。
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式。数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用。
主流的数据库有:sqlserver,mysql,Oracle、SQLite、Access、MS SQL Server等,本文主要讲述的是mysql
2、数据库管理的功能
a. 将数据保存到文件或内存
b. 接收特定的命令,然后对文件进行相应的操作
说明:对于数据库管理系统,无须自己再去创建文件和文件夹,而是直接传递 命令给相应软件,让其来进行文件操作,他们统称为数据库管理系统(DBMS,Database Management System)
MySQL安装配置
1. MySQL的几个常用安装包方法
a.rpm安装 ##不能定义安装路径,默认就是安装/usr/目录下面
b.源码安装
c.二进制免编译安装 ####不用编译,可以指定安装目录
说明:一般在工作中推荐使用二进制免编译安装
实例:
MySQL的几个常用安装包:rpm、源码、二进制免编译(免编译比较方便,不用配置,可以指定路径。)
因为二进制免编译比较方便,也足够正常使用,所以我们就使用二进制棉编译
为了方便日后管理,我们统一把安装包下载到/usr/local/src这个目录下来cd /usr/local/src
下载安装包,下载的版本为5.6 x86_64wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
解压下载的包tar zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz
移动解压完的目录并更改名字为mysql(容易出现的错误,local下已经存在mysql文件,如果这样移动,会变成移动到mysql下,这样就会报错,mv前提前进入local看下是否已存在mysql文件夹)mv mysql-5.6.36-linux-glibc2.5-x86_64 /usr/local/mysql
进入mysql目录下可以查看下mysql下有哪些文件
cd /usr/local/mysql
ls
创建一个data目录,可以看到data目录已经存在,那么就不需要执行命令创建目录mkdir data
创建一个mysql用户(名为mysql)useradd mysql
安装mysql,进行初始化,指定用户为mysql,指定数据存放地址/data/mysql./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
这里它提示少了一个perl模块,所以我们需要安装它。如果不知道包名就需要模糊搜索一下,首先这个文件是perl模块的,所以一定包含perl,还包含dumper(不确定大小写就加-i)yum list |grep perl |grep -i dumper
如下图搜出4个,如果不知道是哪一个就全装上,这里我们知道是第一个包。
安装所依赖的包yum install -y perl-Data-Dumper.x86_64
然后再使用如下命令初始化一下(有时会报错data的父目录不存在,这时在/data/前面加上绝对路径即可)./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
拷贝mysql的模板配置文件,mysql的配置文件存放在/etc/下,并且名字固定为my.cnf,如果不想存放在这个目录下,那么启动的时候需要指定配置文件(该目录下已存在一个my.cnf文件,我们选择y覆盖)cp support-files/my-default.cnf /etc/my.cnf
拷贝启动的脚本cp support-files/mysql.server /etc/init.d/mysqld
编辑启动脚本vi /etc/init.d/mysqld
找到basedir和datadir将内容更改如下:
basedir=/usr/local/mysql
datadir=/usr/locat/mysql/data/mysql
更改启动脚本的配置文件为755chmod 755 /etc/init.d/mysqld
将mysqld加入开启启动chkconfig --add mysqld
启动mysql
1.使用命令启动mysqlservice mysqld start
- 使用脚本启动
/etc/init.d/mysqld start
停止mysqlservice mysqld stop
以命令行的方式启动脚本,--defaults-file指定配置文件,指定用户,指定目录,最后加上&符号,放到后台执行/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &
以命令行的方式启动的mysql脚本不能直接stop,可以使用killall停止服务
查看是否启动成功,已经启动成功了
killall杀死进程的命令。先写入磁盘,再杀死,kill是直接杀死。
[root@localhost ~]# service mysqld status #查看mysql启动状态,, mysqld is stopped 那就说明mysql服务是停止状态,如果是 mysqld is running 那就说明mysql服务是启动状态
[root@localhost ~]# chkconfig --list #查看mysql 的启动状态如图所示:在一下服务中找到mysqld的服务没如果状态为off,说明mysql服务没有启动
[root@localhost ~]# chkconfig --list mysqld
[root@localhost ~]# chkconfig --list | grep on #如果mysql服务已经启动那么这里就会有这个服务
[root@localhost ~]# ps aux | grep mysqld #下图对比是启动与不启动的状态
[root@localhost ~]# pidof mysqld #显示PID说明程序启动,不显示PID即为程序没有启动。
技巧经验总结
killall和kill命令在日常运维工作中的使用
killall是杀掉所有正在运行的进程,对于正在向MySQL写数据的时候,如果无法使用kill命令杀掉某个进程,说明此时数据量较大,那么这样的情况下,不能使用kill -9 来杀进程,因为这样会导致正在写入磁盘或者缓存(内存)中的数据没有同步到磁盘,这样可能会丢掉一些数据,这时候只能用killall。
如果无法kill掉某个服务的进程,说明这个服务的数据量的非常大,只有等服务数据同步完才能杀死进程。
常见问题:
1.出现错误,提示少一个模块,,perl和dumper包。使用yum list查看是否安装,安装第一个包。直接,yum
查看是否安装成功第一张种,查看是否有两个OK。
第二种,刚刚执行是一个命令后,立即执行echo $?命令,出现0说明安装成功了。echo $?命令是查看上一个命令是否被执行成功。
2.是 liaio.so.1 不存在这个目录?
答:解决办法是: yum install libaio-devel
3.
二进制安装mysql能吧目录修改为别的名字,我把mysql的安装目录改名了
[root@Dasoncheng src]# mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql5.6
初始化的时候也指定了安装目录
[root@Dasoncheng mysql5.6]# ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql5.6
[root@Dasoncheng ~]# vim /etc/my.cnf
[root@Dasoncheng ~]# vim /etc/init.d/mysqld
[root@Dasoncheng ~]# /etc/init.d/mysqld start
解决办法,把/usr/local/mysql5.6修改为/usr/local/mysql就可以了!这是为啥不能改变目录名列?我看了启动脚本sh -x /etc/init.d/mysqld start 里面 定义的,都没问题。
这个链接是我记录的这个问题:https://note.youdao.com/share/?id=d1bf305384088ff19b2cd412a8cc6a60&type=note#/
修改目录是没有问题的。
还要修改my.cnf,定义一下basedir,启动脚本里面都搜一下看看是不是哪里还有/usr/local/mysql
4./etc/init.d/mysqld start,service mysqld start,系统识别,但用这个命令systemctl status mysqld却不能检测出来状态。非得用systemctl start mysqld才识别,是不是这个service启动服务会被陶汰掉。
答:service那种是centos6里面用的,centos7 用systemctl
5.
答:去错误日志里看看。datadir=/data/mysql 写错成datadir=/usr/local/mysql了
apache安装错误error: APR not found解决办法:https://jingyan.baidu.com/article/4b07be3c5cd75348b380f3c3.html
链接:
Lamp配置时,访问www.123.com时出现错误 : http://ask.apelearn.com/question/18148
php-fpm优化 : http://blog.51cto.com/xiaoluoge/1562192
在centos7上搭建博客之小白教程~ : https://www.cnblogs.com/keerya/p/7724926.html
Varnish 实战项目 : https://www.cnblogs.com/keerya/p/7833724.html
RHEL7/CENTOS7忘记root密码的修改方式 : http://blog.51cto.com/xiaogongju/1947595
Centos 6.5编译安装LAMP : http://blog.51cto.com/xiaogongju/1941162
yum安装不同的mysql,php版本 : http://blog.51cto.com/xiaogongju/1941020
yum安装mysql5.7和5.6 : http://blog.51cto.com/xiaogongju/1940989
Linux上mysql的安装与配置 : https://www.cnblogs.com/keerya/p/7663742.html
CentOS 5.6(X64)下编译安装LNMP平台(Nginx1.0.4+PHP5.3.6+Mysql5.5.12) 荐 : http://blog.51cto.com/fighter/588453
CentOS 5.5(X64)下编译安装LAMP平台 荐 : http://blog.51cto.com/fighter/606686
centos7.4编译安装lamp : http://blog.51cto.com/11010461/2113093
Centos7.2搭建LNMP : http://blog.51cto.com/xiaogongju/1940519
Centos7.2搭建LAMP : http://blog.51cto.com/xiaogongju/1940502
Centos6.5搭建LNMP : http://blog.51cto.com/xiaogongju/1940328
Centos6.5搭建LAMP : http://blog.51cto.com/xiaogongju/1940327
基于fastcgi分离和LAMP虚拟主机部署wordpress和DiscuzX : http://blog.51cto.com/11010461/2132323
LAMP自动化安装脚本 : http://blog.chinaunix.net/uid-25266990-id-2864481.html
在centos6上实现LAMP的FPM模式 : https://www.cnblogs.com/keerya/p/7727069.html
php-fpm优化 : http://blog.51cto.com/xiaoluoge/1562192
linux学习-apache的安装和配置1 : http://blog.51cto.com/11555417/2154150
使用mysqladmin管理配置mairadb : http://blog.51cto.com/11555417/2152381
基础运维:掌握Apache服务 : http://blog.51cto.com/leoheng/2163645
apache日志管理 : http://blog.chinaunix.net/uid-25266990-id-95790.html
apache请求重定向及ip访问限制 : http://blog.chinaunix.net/uid-25266990-id-96818.html
linux下单独编译安装Apache rewrite_module : http://blog.chinaunix.net/uid-25266990-id-145266.html
Apache的安装总结 : http://blog.chinaunix.net/uid-25266990-id-187783.html
Apache SSI配置动态的包含静态.html文件 : http://blog.chinaunix.net/uid-25266990-id-193640.html
Apache、PHP 服务器隐藏版本信息 : http://blog.chinaunix.net/uid-25266990-id-3064961.html
PHP-5.3.18动态添加mcrypt错误解决方法 : http://blog.chinaunix.net/uid-25266990-id-3426963.html
php编译安装脚本 : http://blog.51cto.com/xiaogongju/1947606
- CentOS 7下搭建LAMP平台环境:https://www.aliyun.com/jiaocheng/118741.html?spm=5176.100033.9.33.8SeWFe
LAMP系列之一Apache服务器、MySQL服务器和PHP服务器实现互通 : http://blog.51cto.com/linuxgentoo/1541275
使用rpm包实现LAMP构架模型 : http://blog.51cto.com/pirateli/1641261
使用源代码包实现LAMP构架模型 : http://blog.51cto.com/pirateli/1641474
LAMP基于rsyslog+loganalyzer实现日志集中管理及分析 : http://blog.51cto.com/scholar/1639292
编译安装LAMP及分离式LAMP平台构建 荐 : http://blog.51cto.com/scholar/1635834
LAMP平台基于NFS实现web服务器负载均衡 : http://blog.51cto.com/scholar/1636605
LAMP架构(LAMP介绍,mysql/mariaDB介绍,Mysql安装):http://blog.51cto.com/13407306/2050636
LAMP系统性能调优 理解LAMP架构 : https://www.linuxprobe.com/chapter-11.html
LAMP系统性能调优 优化Apache和PHP : http://club.topsage.com/forum.php?mod=viewthread&tid=221401
LAMP系统性能调优 MySQL数据库服务器优化 : http://club.topsage.com/thread-221406-1-1.html
LAMP+Xdebug 环境配置 : https://www.jianshu.com/p/9fedda5ad497
heartbeat(v2)实现LAMP提供wordpress博客站点高可用模型实践 : http://blog.51cto.com/pirateli/1657954
在centos6编译配置httpd2.4的N种方法(2) : https://www.cnblogs.com/keerya/p/7705195.html
mysql实现高可用架构之MHA : https://www.cnblogs.com/keerya/p/7883766.html
实战项目——mysql主从架构的实现(5) : https://www.cnblogs.com/keerya/p/7873502.html
数据库-mysql用户权限和管理 : http://blog.51cto.com/11555417/2160730
(MariaDB)MySQL数据类型详解和存储机制:https://www.cnblogs.com/f-ck-need-u/archive/2017/10/25/7729251.html
apache服务器开启https:https://jingyan.baidu.com/article/9158e0002c1e9ea25412282c.html
MariaDB(MySQL)创建、删除、选择及数据类型使用详解:https://blog.csdn.net/wwb456/article/details/53559564
mariadb、mysql使用介绍:https://www.2cto.com/database/201803/727610.html
mongodb 3.4.5安装及安全配置 :https://my.oschina.net/u/2404183/blog/994005
扩展
mysql5.5源码编译安装 http://www.aminglinux.com/bbs/thread-1059-1-1.html
mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html