11.1-11.15 预习笔记

1.LAMP架构

1)LAMP=Linux+Apache(httpd)+MySQL+PHP

  • Linux-操作系统,例如,CentOS,ubantu等等

  • Apache-提供web服务的一个软件

  • MySQL-存储的软件,存的是一些数据,字符串,并不是文件和图片

  • PHP-和shell类似的脚本语言,用C开放,通常用来做网站,随着移动互联网的兴起(移动客户端来调接口,而不是在电脑上来连接端口),PHP就不那么流行了

PHP网站-www.baidu.com;Google网站;

现在流行的是Python,JAVA,GO

11.1-11.15 预习笔记_第1张图片

 

2)Apache(httpd)+MySQL+PHP工作架构

在Linux安装这三个东西,做一个简单的架构可以装在一台机器上,但是也可以不装在一个机器上,但是Apache和PHP要在一起

对于一些访问量不大的网站在一台机器上跑三个服务是没有问题的

也可以MySQL在一台服务器上,Apache和PHP在另外一台服务器上

 

11.1-11.15 预习笔记_第2张图片

  • PHP服务作为一个模块的形式和Apache结合在一起的

  • Apache不可以直接与MySQL相连,只能通过PHP模块在MySQL上拿数据(动态请求),在PHP得到数据之后在交给Apache,然后Apache在与用户的浏览器进行数据传输

  • 静态文件 vs.动态文件

例如,我们现在访问ask.apelearn.com, 点击登录,这时登录请求由用户浏览器到Apache,先有Apache检查看看请求为动态还是静态

然而登录请求为用户把账号和密码提交给Apache,然后到数据库去比对,看看输入的账户和密码是对还是错,首先到MySQL里面查到用户的账户和密码,PHP做对比,如果正确Apache就会返回一个登录的状态,这个过程就为一个动态请求

如果我们要点击网站的logo图片,也需要到Apache请求,Apache会去静态文件(linux操作系统的一个目录下的文件)读取数据,这个过程为静态请求

 

静态,就是直接由webserver处理的请求,比如图片,js,css等,而动态的是需要和数据库打交道的请求,比如你现在访问ask.apelearn.com,登录用户,发帖子,看帖子,这些都是需要和数据库打交道的。这样的就是动态。

 

2.MySQL_MariaDB介绍

sun公司-JAVA

Oracle-数据库,银行、金融企业,装在小型机(超级计算机,几百个CPU,上亿Tb的内存)上-unix

 

3-5.MySQL安装

1)MySQL常用的安装包

  • rpm-直接用yum安装,缺点不能指定安装的路径,默认到/usr/下面

  • 源码包

  • 二进制免编译包

相当于再发布之前,在一台linux服务器上做了编译,编译完成的文件重新安排到一个目录下,打包压缩再发布

好处无需再编译,可以直接用而且可以定义安装的路径,比如/usr/local/mysql下

 

2)安装二进制免编译包的步骤

  • cd /usr/local/src/

这个目录用于存放源码包和所需要的资源

  • #wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz,下载MySQL安装的镜像文件

注:uname -a查看操作平台是64位还是32位

      wget命令的用法https://www.cnblogs.com/lxz88/p/6278268.html

  • # tar -zxvf mysql-5.7.23-linux-glibc2.12-x86_64.tar.gz

解压软件包

  • # mv mysql-5.7.23-linux-glibc2.12-x86_64 /usr/local/mysql

  • cd /usr/local/mysql

  • useradd mysql

  • mkdir /data/

  • 把/usr/local/mysql 和/data/mysql的属主和属组都改成mysql

  • 这个步骤为了初始化,生成目录/data/mysql, 因为mysql如果需要启动要一个自带的库/data/mysql

5.6版本的初始方式-

./scripts/mysql_install_db --user=mysql --datadir=/data/mysql

执行了命令之后可能会有下面的error message,提示让安装Perl modules(跟Python相似的脚本语言)少了dumper这个模块

解决方法安装少了的模块或者安装包,我们可以先模糊搜索一下安装包的名字,用yum -list |grep perl |grep -i dumper, 如果这种方法不行可以试着copy error message 在百度搜索

yum -install -y perl-Data-Dumper.x86_64

 

11.1-11.15 预习笔记_第3张图片

 

5.7版本的初始化方式- 

因为scripts/mysql_install_db在新版本中已经改在了/bin目录下了,而且用mysql_install-db的方式初始化已经过时,应该使用mysqld --initialize来初始化

命令写成 bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql

当值执行了该命令之后可能又出现了error message :bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory, 我们可以发现是加载链接文件libaio的时候出现了问题, 这时我们用rpm -qa |grep libaio查看,如果没有下载libaio,就可以使用yum install  libaio-devel.x86_64下载,在用初始化的命令就没问题了

注意生成的临时密码-oSduCXnh!1Kf

 

 

  • 拷贝配置文件

5.6版本/5.7 版本

cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cof(mysql的配置文件,固定放在/etc/下,如果想放到其他目录下,启动的时候要做一个指定)

 

再拷贝之前也可以查看一下/etc/my.con, 具体信息如下,我们也可以不用拷贝文件,直接用里面的设置,只需要做一些改动

[mysqld]

datadir=/var/lib/mysql

把datadir改成/usr/local/mysql/data/mysql

socket=/tmp/mysql.sock

改在/tmp/目录下

# Disabling symbolic-links is recommended to prevent assorted security risks

symbolic-links=0

# Settings user and group are ignored when systemd is used.

# If you need to run mysqld under a different user or group,

# customize your systemd unit file for mariadb according to the

# instructions in http://fedoraproject.org/wiki/Systemd

 

[mysqld_safe]

log-error=/var/log/mariadb/mariadb.log

pid-file=/var/run/mariadb/mariadb.pid

可以加#号注释掉

#

# include all files from the config directory

#

!includedir /etc/my.cnf.d

加#注释掉

 

11.1-11.15 预习笔记_第4张图片

 

  • 运行脚本

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

vim /etc/init.d/mysqld, 只需要修改basedir和datadir的部分

basedir=/usr/local/mysql, datadir=/data/mysql

 

11.1-11.15 预习笔记_第5张图片

 

  • 改脚本权限 chmod 755 /etc/init.d/mysqld

  • 添加开机启动

chkconfig --add mysqld

11.1-11.15 预习笔记_第6张图片

 

  • 启动程序

/etc/init.d/mysqld start或者 service mysqld start

如下图,我们可以看见mysqld服务已经成功启动,监听的端口为3306

 

11.1-11.15 预习笔记_第7张图片

 

注:

  • 在上图绿线的部分有一条命令/bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/localhost.localdomain.pid

使用场景如下,如果我们在无法把启动脚本写入/etc/init.d下或者没有启动模板脚本可供拷贝,可以使用命令行的方式启动

/usr/local/mysql/bin/mysql_safe --default-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &

着这里--default-filey用来制定配置文件的,&把命令丢到后台去

如果用这种形式启动了mysql的服务,只能用# killall mysqld来关闭服务

 

  • killall 是一种比较安全的方式来停止任务,相对于kill pidnumber来说的,尤其在mysql在读写数据的时候,使用killall可以先暂停现在读写动作,把内存中的数据写入到磁盘中去,这样可以避免数据的丢失。有时由于内存的数据比较大,killall可能不会很快杀死进程,那这时切忌使用kill -9来杀死进程,如果使用可能导致数据丢失甚至表的损坏

 

  • mysql常用的引擎-innodb(存储量比较大,和Oracle类似)&myisam (存储量较小)

 

6.MariaDB安装

安装步骤和mysql类似

  • cd /usr/local/src

  • 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

  • 解压文件

tar -zxvf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz

  • mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mariadb

  • cd /usr/local/mariadb

  • mkdir /data/mariadb

  • useradd mariadb

  • 初始化

./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb

最好定义basedir,不然因为还装了mysql,可能base的目录就去找了mysql

  • cp support-files/my-small.cnf /usr/local/mariadb/my.cnf

我们用ls看配置文件模板,可以发现与mysql不同,mariadb有很多的配置模板,其中有my-small.cnf和my-large.cnf。这里的small和large指的是文件缓存的大小,根据内存大小的不同选择缓存的大小从而使mysql功能更加高效

  • vi /usr/local/mariadb/my.cng

如果要修改就修改mysqld部分,但基本不用做什么改动

11.1-11.15 预习笔记_第8张图片

  • cp support-files/mariadb-server /etc/init.d/mariadb

  • vim /etc/init.d/mariadb

定义basedir, datadir, conf (自定义变量,来制定配置文件路径)

定义变量是为了与之前安装的mysql进行区分,如果在以后的工作中只装了mariadb,那么就可以把配置文件放在/etc/my.cnf下,也就在脚本中不需要再定义配置文件的路径了

 

11.1-11.15 预习笔记_第9张图片

 

在指定了配置文件之后,我们需要修改启动参数,可以/start来搜索,找到下面的行加上--defaults-file="$conf"来制定配置文件路径

 

  • /etc/init.d/mariadb start

在启动之前需要check mysqld是否已经启动,因为两种服务监听同一个3306的端口,所以同时运行会产生冲突

我们也可以用 service start mysqld启动

 

11.1-11.15 预习笔记_第10张图片

 

 

7-9.Apache安装

httpd是我们要装的软件包,主流版本为2.4

依赖的软件apr 和apr-util, 是一个通用的函数库,可以让httpd不用管底层的操作系统平台(windows/Linux),可以很方便的移植

然而yum自带安装的apr和httpd 2.4 版本的不兼容,所以需要编译

1)cd /usr/local/src

2)wget http://mirrors.cnnic.cn/apache/apr/apr-1.6.5.tar.gz

           wget http://mirrors.cnnic.cn/apache/apr/apr-util-1.6.1.tar.gz

           http://httpd.apache.org/download.cgi#apache24, 用来下载最新的httpd版本

3)用tar -zxvf来解压这三个文件

11.1-11.15 预习笔记_第11张图片

 

4)先来安装apr

  • cd apr-1.6.5

  • ./configure --prefix=/usr/local/apr

但是出现了alert

checking for gcc... no

checking for cc... no

checking for cl.exe... no

configure: error: in `/usr/local/src/apr-1.6.5':

configure: error: no acceptable C compiler found in $PATH

See `config.log' for more details

解决办法 yum install -y gcc, 再试一次./configure --prefix=/usr/local/apr, 就成功了,可以用# echo $?来查看是否命令执行成功

在安装信息中会出现“rm: cannot remove 'libtoolT': No such file or directory”,可以忽略这个error message

  • # make && make install

  •  

5)安装apr-util

  • cd apr-util-1.6.1

  • ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

与安装apr不同,因为apr-util需要依赖apr,所以要指定apr

  • make && make install

出现error message -致命错误:expat.h:没有那个文件或目录,这是因为缺少expat库,yum install -y expat-devel

我们在试一次安装就可以成功了

 

6)安装httpd源码包httpd-2.4.37

  • cd httpd-2.4.37/

  • 继续安装

./configure \   //这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行

--prefix=/usr/local/apache2.4 \

--with-apr=/usr/local/apr \

--with-apr-util=/usr/local/apr-util \

--enable-so \

表示支持动态扩展模块,Apache和PHP都支持以一个模块的形式存在,正如我们在上文提到,PHP是作为httpd的一个模块存在是一个以.so结尾的文件

Apache本身为一个进程和服务,在进程的配置文件中指定模块的路径,那就可以调用模块,正如PHP作为解析PHP脚本的,如果遇到需要解析PHP脚本的时候就可以调用这个模块,执行一些操作,这些模块为独立的文件

这个参数的目的就是可以支持动态扩展

--enable-mods-shared=most

可以制定需要什么动态模块的支持,制定most是指加进大多模块,加了这个参数会安装很多*.so的文件

这一步可能会出现error message-configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/,用yum list |grep pcre搜索应该安装的包,pcre-devel.x86_64(我们一般需要安装有devel字样的库文件),然后yum install -y pcre-devel.x86_64, 这样就可以了

  • make && make install

  • ls /usr/local/apache

11.1-11.15 预习笔记_第12张图片

如上图,在bin/目录下一般都是执行文件,/bin/httpd就是执行命令核心文件

conf/目录为配置文件所在目录,conf/httpd.conf

 

htdocs/目录下有index.html,通过httpd访问的网站都会放在这个目录下

 

logs/目录下,错误日志和访问日志以及一些帮助文档

 

modules/下面,存放了.os文件,扩展模块,每个模块代表一个功能,如果我们想要查看都安装了哪些模块,可以写成下面的形式

/usr/local/apache2.4/bin/apachectl -M或者/usr/local/apache2.4/httpd -M

11.1-11.15 预习笔记_第13张图片

 

static-静态直接把模块编译到了httpd中

shared-说明为扩展模块,为一个.os文件,在modules/下

 

7)启动

可以 直接启动,无需配置文件或者脚本

# /usr/local/apache2.4/bin/apachectl start

出现的error message可以在配置文件中改动,但是可以忽略

11.1-11.15 预习笔记_第14张图片

 

port 22-ssh

port 80-httpd

port 3306-mysqld

pot 25-master 邮件

 

10-12. PHP安装

官网 www.php.net

主流版本5.6/7.1,大多数使用5.6

1)cd /usr/local/src

2)download php-5.6.38.tar.gz from  www.php.net

3)tar -zxvf php-5.6.38.tar.gz

4)cd php-5.6.38

5) ./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=/usr/local/php 指定安装目录

  • --with-apxs2=/usr/local/apache2.4/bin/apxs 

apxs工具可以自动配置需要加载的扩展模块,指定Apache

  • --with-config-file-path=/usr/local/php/etc 指定配置文件的所在路径,php默认的文件配置路径为/etc/.ini

  • --with-mysql=/usr/local/mysql 指定mysqld的路径

  • --with-pdo-mysql=/usr/local/mysql

--with-mysqli=/usr/local/mysql/bin/mysql_config

来定义mysqld相关的函数来驱动,使得mysqld可以识别PHP模块

  • --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

用来指定PHP所需要的模块的

 

安装过程可能会出现error message “configure: error: Cannot find libmysqlclient_r under /usr/local/mysql.”

解决办法:编译之前,先处理一下mysql的库,默认查找libmysqlclient_r.so,可是mysql默认为libmysqlclient.so,内容完全一样,做个链接即可

# cd /usr/local/mysql/lib/mysql/

# ln -s libmysqlclient.so.版本号 libmysqlclient_r.so

6)make && make install

在结束时我们可以看见放到了Apache的module目录下,PHP模块可以和Apache结合起来是通过libphp5.so的文件实现的、

 

7)ls /usr/local/php

 

  • 核心的二进制文件在/usr/local/php/bin下

  • /usr/local/php/bin/php -m可以看到php所加载的模块,且模块为静态模块

8)PHP作为Apache的一个扩展模块不需要启动了,只要Apache启动,PHP就是启动的,但是这个模块很重要

我们可以看httpd的配置文件,/usr/local/apache2.4/conf/httpd.conf, 看到php模块已经被加到了httpd的配置文件中,如果不想使用此模块,在前面加#就可以了

11.1-11.15 预习笔记_第15张图片

 

9)加载PHP配置文件

cp php.ini-production (php.ini-development 测试环境) /usr/local/php/etc/php.ini

php.ini-production 为生产环境

php.ini-development 测试环境

我们再使用/usr/local/php/bin/php -i,就可以看见配置文件已经被加载了

11.1-11.15 预习笔记_第16张图片

 

 

13.安装PHP7

1)cd /urs/local/src

2)wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2

• tar zxf php-7.1.6.tar.bz2

• cd php-7.1.6

• ./configure --prefix=/usr/local/php7 --with-apxs2=/usr/local/apache2.4/bin/apxs --with-config-file-path=/usr/local/php7/etc  --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

• make && make install

• ls /usr/local/apache2.4/modules/libphp7.so

• cp php.ini-production  /usr/local/php7/etc/php.ini

 

14-15. Apache和PHP结合

1)编辑Apache的配置文件

vim /usr/local/apache2.4/conf/httpd.conf

  • 定义ServerName,把ServerName那一行的#号去掉就可以了

11.1-11.15 预习笔记_第17张图片

  • required all denied 改为required all granted

在ifconfig之后,我们可用看到ip地址为192.168.224.128,用浏览器访问之后发现无法访问

我们可以用windows 上的cmd看是否可以ping通192.168.224.128

如果可以ping通就使用telnet 192.168.224.128 80,去查看80端口是否可以ping通,如果windows的telnet没有打开,那就去控制面板找打开或关闭windows功能,打开telnet客户端

如果80端口ping不通,那就是iptables把80端口禁掉了,我们用iptables -I INPUT -p tcp --dport 80 -j ACCETP,开放80端口,这时再用浏览器访问就显示it works.

但有时80端口是通的但是仍然显示403 forbidden是因为在httpd.conf的配置文件中,required all 被设置为了denied,我们应该把它改成granted

注:我们可以/usr/local/apache2.4/bin/apachectl -t,来检查配置文件语法是否正确

 

 

如果我们改错了配置文件,用-t,发现了语法错误,改正之后可以用graceful来重新加载配置文件,然后再用-t来查看语法

 

 

  • 增加下面的行用来解析PHP

AddType application/x-httpd-php .php

11.1-11.15 预习笔记_第18张图片

 

  • 增加索引页,这样访问时就不需要在地址后面加index.php

11.1-11.15 预习笔记_第19张图片

我们来测试下现在是否解析PHP,我们可以先写一个测试脚本在/usr/local/apache2.4/htdocs/1.php 

内容如下

phpinfo (); 可以把PHP的相关信息打印出来 

?>

这时我们再用浏览器访问19.168.224.128/1.php, 如果出现下面的页面就意味着可以支持PHP解析, 显示的结果和/usr/local/php/bin/php -i命令显示的结果基本相同

11.1-11.15 预习笔记_第20张图片

如果解析不了则出现如下页面,只显示源代码

11.1-11.15 预习笔记_第21张图片

那么这个时候我们就要检查如下几项

  • Apache的配置文件,是否加载PHP扩展模块

/usr/local/apache2.4/bin/apachectl -M

如果发现没有PHP模块,就可以ls /usr/local/apache2.4/modules/libphp.os

如果有,但是没有加载出来,就可以编辑配置文件/usr/local/apache2.4/conf/http.conf,去看是否加载了“LoadModule php5_module        modules/libphp5.so”

  • 如果上面的都没有问题,就查看配置文件中是否有“AddType application/x-httpd-php .php”

  • 再检查是否加了“index.php”

 

你可能感兴趣的:(11.1-11.15 预习笔记)