LAMP架构
- 预习:
- 11.1 LAMP架构介绍
- 11.2 MySQL、MariaDB介绍
- 11.3/11.4/11.5 MySQL安装
-
- 操作步骤模板:
- 操作步骤示例:
-
-
-
- 1. 使用 wget 命令下载 MySQL 安装包:
- 2. 解压 MySQL 压缩包:
- 3. 移动文件到 /usr/local/ 下,并且将目录名称改为 mysql:
- 4. 然后进入到 mysql 目录下,可以看到以下文件和目录:
- 5. 创建 mysql 用户:
- 6. 如果系统中没有 /data/ 目录就需要创建这个目录,有这个目录则可以省略这一步:
- 7. 初始化生成 /data/ 下的 mysql 目录,因为 mysql 要启动需要一个自带的库,所以我们要生成这个库,/data/ 目录必须之前就要存在:
- 8. 然后马上使用 echo $? 验证一下是否成功,为 0 的就是成功:
- ==9. 拷贝配置文件和启动脚本,配置文件在 support-files 目录下,support-files 目录下有一个模板配置文件,把这个模板配置文件拷贝到 /etc 目录下并更名为 my.cnf:==
- ==10. 启动脚本,这个脚本也是在 support-files 目录下,拷贝完后编辑mysqld文件,找到 basedir 和 datadir :==
- 11. 如果 /etc/init.d/mysqld 不是 755 权限,就要修改文件权限为 755:
- 12. 如果要将 mysql 设置为开机启动,就要添加进 chkconfig 里:
- 13. 启动 mysqld 服务:
- 14. 查看一下进程:
- 15. 查看一下监听的端口:
- 16. 如果遇到没有启动脚本文件拷贝,或者没法拷贝的情况下可以用命令行的方式启动:
- 17. 使用命令行方式启动的 mysql 服务,不能直接使用 service 等命令去关闭,要使用 killall 去关闭进程:
-
-
- 11.6 MariaDB安装
-
- 操作步骤模板:
- 操作步骤示例:
-
-
-
- 1. 使用 wget 下载 MariaDB :
- 2. 解包:
- 3. 移动到 /user/local/ 下并更名为 mariadb :
- 4. 进入到 /usr/local/mariadb 目录下,使用 mysql 用户进行初始化在 /data/ 目录下生成一个库,验证一下是否成功:
- 5. 拷贝配置文件和定义启动脚本,MariaD B的配置文件模板也是在 support-files 目录下,但是与 mysql 不同的是,MariaDB 的 support-files 目录下有好几个模板配置文件,和 mysql5.1 版本一样:
- 6. 这几个配置文件主要的区别就是内存使用得不一样,my-small.cnf 使用得最小,my-huge.cnf 使用得最大。因为是做实验所以我在这使用 my-small.cnf,因为 /etc/ 下已经有了 mysql 的 my.cnf 了,所以我放在 MariaDB 的安装目录下:
- 7. 拷贝启动脚本:
- 8. 编辑配置文件和启动脚本:
- 9. 接下来就可以启动服务了,但是如果你 mysql 正在运行的话需要把 mysql 的服务给停掉,因为它们监听的是同一个端口,会发生冲突,检查一下是否启动成功:
- 10. 检查一下端口是否有在监听:
- 11. MariaDB 是 mysql 的分支,所以匹配 mysql 也是可以的,但是从结果可以看到,MariaDB 服务使用的库文件依然是 /data/mysql,这是因为我们没有在 MariaDB 的配置文件里去指定 /data/mariadb,所以它还是会去加载 /etc/my.cnf 里的 /data/mysql 。 现在我们在MariaDB的配置文件里指定 /data/mariadb 路径就可以解决这个问题了:
- 12. 修改完成后,重启一下服务,然后再查看一下:
-
-
- 11.7/11.8/11.9 Apache安装
- 11.10/11.11/11.12 安装PHP5
-
- 操作步骤模板:
- 操作步骤示例:
-
-
-
- 1. 先下载源码包到 /usr/local/src/ 目录下:
- 2. 解包:
- 3. 进入到 php-5.6.39 目录下,使用 ./configure --prefix=/usr/local/php 命令检查编译环境和配置参数:
- 4. 然后就是 make && make install,编译安装了:
- 5. 成功编译安装后,就可以ls 一下 php 的目录,可以看到以下几个目录:
- 6. 核心的二进制文件在 bin 目录下,可以看到 php 有 71M 的大小:
- 7. 查看 php 里所加载的模块,这些模块都是静态的:
- 8. 这时候查看 Apache 的模块信息就可以看到 php5 的模块了:
- ==9. 现在去查看 Apache 的配置文件就可以发现多了一行配置内容:==
- 10. php 的 -i 选项可以查看到php的相关信息,编译参数、安装路径等等:
- 11. 从 php 的相关信息中可以看到,没有加载任何的配置文件,因为 /usr/local/php/etc 目录下没有 php.ini 这个文件:
- ==12. 所以我们需要在 /usr/local/src/php-5.6.39 目录下,拷贝 php5 的配置文件到 /usr/local/php/etc 目录下:==
-
-
- 11.13 安装PHP7
- 11.14/11.15 Apache和PHP结合
-
- 操作步骤模板:
- 操作步骤示例:
-
-
-
- 1. 在这之前先解决一个问题,我们启动 apache 时会发现有这么一个警告:
- 2. 不想有这个警告就得编辑 apache 的配置文件:
- 3. 启动了 Apache 后我们可以通过 Windows 上的浏览器来访问,如果出现服务器响应时间过长的问题:
- 4. 如果显示的是 403 的话,就要去 apache 配置文件里把 Require all denied 修改成 Require all granted:
- 5. 因为要让 Apache 支持 php 解析,所以要增加一条 php 相关的配置,让 apache 能够解析 php:
- 6. 然后是增加一个索引页,这是为了能够跳转到这个页面上去:
- 7. 测试一下 Apache 是否能解析 php,首先写一个测试用的 php 脚本:
- 8. 介绍一个快捷键:Ctrl+r 能够帮助我们快速的执行命令历史里面的命令,输入相关的字符就能显示出命令历史里面与之对应的命令,例如我输入 vim,就可以显示之前执行过的 vim 命令:
-
-
预习:
11.1 LAMP架构介绍
11.2 MySQL、MariaDB介绍
11.3/11.4/11.5 MySQL安装
11.6 MariaDB安装
11.7/11.8/11.9 Apache安装
11.10/11.11/11.12 安装PHP5
11.13 安装PHP7
11.14/11.15 Apache和PHP结合
11.16/11.17 Apache默认虚拟主机
11.18 Apache用户认证
11.19/11.20 域名跳转
11.21 Apache访问日志
11.22 访问日志不记录静态文件
11.23 访问日志切割
11.24 静态元素过期时间
11.25 配置防盗链
11.26 访问控制Directory
11.27 访问控制FilesMatch
11.28 限定某个目录禁止解析php
11.29 限制user_agent
11.30/11.31 php相关配置
11.32 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 apxs https://wizardforcel.gitbooks.io/apache-doc/content/51.html
apache工作模式 http://www.cnblogs.com/fnng/archive/2012/11/20/2779977.html
php中mysql,mysqli,mysqlnd,pdo到底是什么 http://blog.youkuaiyun.com/u013785951/article/details/60876816
查看编译参数 http://ask.apelearn.com/question/1295
软件版本alpha、Beta、RC、GA、DMR等含义 http://www.05bk.com/520.html
大作业+5.7-LAMP1 https://docs.qq.com/doc/DR1VSVXlxQ1RvS1Z1
apache的一些学习文档: https://github.com/aminglinux/apache
几种限制ip的方法 http://ask.apelearn.com/question/6519
apache 配置https 支持ssl http://ask.apelearn.com/question/1029
apache rewrite教程 http://coffeelet.blog.163.com/blog/static/13515745320115842755199/ http://www.cnblogs.com/top5/archive/2009/08/12/1544098.html
apache rewrite 出现死循环 http://ask.apelearn.com/question/1043
php错误日志级别参考 http://ask.apelearn.com/question/6973
11.1 LAMP架构介绍
Linux:操作系统
Apache:网页服务器
PHP、Perl或Python:脚本语言
MariaDB或MySQL:数据库管理系统(或者数据库服务器)
LAMP 包含了四种东西,就是 Linux+Apache(httpd)+MySQL+PHP 的一个简写,Linux 我们都很熟悉,它通常作为服务器操作系统,Apache 则是一个提供Web服务的一个软件,它真正的名称是 httpd 。MySQL 是数据库软件,存储的是一些数据、字符串、用户信息。PHP 是一个脚本语言,和 shell 类似但是比 shell 复杂,如果接触过 C 语言的就知道 PHP 是用 C 语言开发的,它通常用来做网站,是前几年比较火热的一门语言,但是现在的趋势是向移动端互联网发展,在 PC 上访问网站的用户少于在手机上访问网站的用户,所以现在 PHP 的需求也没有以前高了。
这两年流行的 web 开发语言是 Java、Python、Go 等语言,但是有些服务端也还在使用着PHP,因为客户端要向服务端读取数据,数据存储在 MySQL 里,如果服务端的程序是用 PHP 写的,那么 MySQL 要和 PHP 打交道,既然有服务端使用着 PHP 程序那么 LAMP 架构就还有学习的必要。
Apache、MySQL、PHP 安装在 Linux,Linux 做为一个承载的平台,如果搭建一个小的架构的话,Apache、MySQL、PHP 可以安装在一台机器上,不过也可以分开安装,但是 Apache 要与PHP 安装在同一台机器上,可以把它俩看作是一个整体,MySQL 则可以单独安装在另一台机器上,因为它们可以通过网络连接起来。对于一些小型的、访问量不是很高网站来讲,在一台机器上跑这三个服务是可以的。
架构:
刚刚上面提到可以把 Apache 和 PHP 看作为一个整体,因为 PHP 是以一个模块的形式与 Apache 结合在一起的。Apache 不能直接与 MySQL 交互,它只能通过 PHP 这个模块去 MySQL 里面读取数据,PHP 把读取的数据交给 Apache,Apache 再交给用户。
我们把 PHP 与 MySQL 交互读取数据的这种请求,称为动态请求。当我们登录某个网站的账户时就是一个动态请求,浏览器先将账户密码发送给 Apache,Apache 再交给 PHP 去与 MySQL 数据库里的数据进行比较,正确或者错误的结果再通过 Apache 反馈给用户。
在网站上我们通常可以看到很多的图片、Logo 什么的,这些网站素材的读取也是要到 Apache 上去请求的,但是这些图片素材没有存储在 MySQL 数据库里,而是存在服务器操作系统的某一个目录上。Apache 可以直接读取到这些图片素材,然后可以直接返回给客户端,这个过程不需要与 MySQL 数据库打交道,所以称之为静态请求。MySQL 数据库是不存储图片或文件的,MySQL 数据库只存储账户密码、用户信息、用户的积分等等数据,而且这些数据也是会经常发生变化的数据。
11.2 MySQL、MariaDB介绍
数据库:
数据库是与应用程序实现信息交互的数据存储、管理软件,并且存储数据的也都可以称为数据库。
MySQL 数据库:由瑞典 MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。
MariaDB 数据库管理系统则是 MySQL 的一个分支,主要由开源社区在维护,采用 GPL 授权许可 MariaDB 的目的是完全兼容 MySQL,包括 API 和命令行,使之能轻松成为 MySQL 的代替品。在存储引擎方面,使用 XtraDB 引擎来代替 MySQL 的 InnoDB 引擎。 MariaDB 由 MySQL 的创始人Michael Widenius(英语:Michael Widenius)主导开发,因为他早前曾以 10 亿美元的价格,将自己创建的公司 MySQL AB 卖给了 SUN,此后,随着 SUN 被甲骨文收购,MySQL 的所有权也落入 Oracle 的手中。Oracle 公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。 过去一年中,大型互联网用户以及 Linux 发行商纷纷抛弃 MySQL,转投 MariaDB 阵营。MariaDB 是目前最受关注的 MySQL 数据库衍生版,也被视为开源数据库 MySQL 的替代品。MariaDB 虽然被视为 MySQL 数据库的替代品,但它在扩展功能、存储引擎以及一些新的功能改进方面都强过 MySQL 。MariaDB 名称来自 Michael Widenius 的女儿 Maria 的名字。
MariaDB 基于事务的 Maria 存储引擎,替换了 MySQL 的 MyISAM 存储引擎,它使用了 Percona的 XtraDB,InnoDB 的变体,分支的开发者希望提供访问即将到来的 MySQL 5.4 InnoDB 性能。这个版本还包括了 PrimeBase XT (PBXT) 和 FederatedX 存储引擎。
11.3/11.4/11.5 MySQL安装
MySQL 安装包:wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
操作步骤模板:
MySQL的几个常用安装包:rpm、源码、二进制免编译:
二进制免编译:
1. cd /usr/local/src
2. wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
3. tar zxvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
4. mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql
5. cd /usr/local/mysql
6. useradd mysql
7. mkdir /data/
8. ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
9. cp support-files/my-default.cnf /etc/my.cnf
1) 定义datadir和socket
10. cp support-files/mysql.server /etc/init.d/mysqld
11. vi /etc/init.d/mysqld
1) 定义basedir和datadir
2) chkconfig --add mysqld
3) chkconfig --list
4) /etc/init.d/mysqld start或者service mysqld start
二进制免编译包是相当于发布之前就在一台 Linux 服务器进行了编译,编译后将文件整合到了一个目录,然后再将这些目录和文件打包压缩后再发布出来。二进制免编译包有一个好处,就是我们不用花费那么多时间去编译,直接拿过来安装就就可以了。
二进制免编译包和 rpm 包有点类似,但是 rpm 包有一个缺点,就是没办法去定义安装路径,因为 rpm 包默认装在 usr 目录下,二进制免编译包则可以自由指定安装路径。
二进制免编译包毕竟是在别的机器上编译的,虽然不会有什么大的问题,但是想追求完美还是自己编译源码包要好一些。
要下载与操作系统相对应位数的二进制免编译包,查看自己操作系统位数的命令是 uname -a,x86_64的就是 64位,i686、i586 之类的则是 32位,如果这个链接失效可以去 r.aminglinux.com上去找。
操作步骤示例:
1. 使用 wget 命令下载 MySQL 安装包:
[root@sc src]# wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
2. 解压 MySQL 压缩包:
[root@sc src]# tar zxvf mysql-5.6.43-linux-glibc2.12-x86_64.tar.gz
3. 移动文件到 /usr/local/ 下,并且将目录名称改为 mysql:
[root@sc src]# mv mysql-5.6.43-linux-glibc2.12-x86_64 /usr/local/mysql
4. 然后进入到 mysql 目录下,可以看到以下文件和目录:
5. 创建 mysql 用户:
[root@sc mysql]# useradd mysql
6. 如果系统中没有 /data/ 目录就需要创建这个目录,有这个目录则可以省略这一步:
创建 /data/ 是为了存放 mysql 的数据
7. 初始化生成 /data/ 下的 mysql 目录,因为 mysql 要启动需要一个自带的库,所以我们要生成这个库,/data/ 目录必须之前就要存在:
初始化一下,生成/data/mysql这个目录,要想启动得有一个自带的库叫mysql
[root@sc mysql]# .