LAMP架构介绍
- LAMP是Linux、Apache(httpd)、MySQL、PHP的简写,就是把Apache、MySQL、以及PHP安装在Linux上面,组成一个环境来运行PHP的脚本语言,通常是网站。
- PHP网站 Goole、淘宝、百度等
- 3个角色可以在一台机器、也没有分开(httpd和PHP要在一起)。例如可以把Apache+PHP安装在一台机器上,再把MySQL安装在另一台机器上,也可以将3者安装在同一台机器上。但是Apche与PHP需要在同一机器上。这是因为PHP是作为Apache的一个模块存在的,它们必须在一起。
- 3者之间的关系
1.Apache不能直接与MySQL相互的打交道,必须通过PHP这个模块去拿数据,PHP将数据结果交给Apache,Apache再交给用户。
2. 动态请求.:PHP与MySQL相连去取数据的行为。
例如当登录一个网站时,在浏览器中输入账号与密码,点击登录将请求交给了Apache,之后Apache检查请求是动态的还是静态的请求。Apache拿到用户密码后,通过PHP查到MySQL中保存的用户密码是什么,PHP再进行2个用户密码的对比。如果结果一致Apache返回给用户登录后的界面
3. 静态的请求:当浏览网站时,访问到的logo图片都是静态文件,也就是在linux系统上某个目录下拿到的图片再返回给用户。
4.看Apache是否与MySQL打交道可以知道用户的请求是动态请求还是静态请求。
5.MySQL中不能存图片或是文件,存的是数据。
MySQL_MariaDB介绍
MySQL安装
MySQL的几个常用安装包:rpm、源码、二进制免编译
MySQL通常是通过rpm(使用yum安装)、源码(源码的二进制包与Apache的源码安装不同)、、二进制免编译(不用配置,不用编译,rpm类似。但是rpm是无法定义安装路径,默认就是安装在/usr/下面,而二进制免编译包是可以选择安装位置的。)
1. 安装MySQL 二进制免编译
cd /usr/local/src 自定义安装到/usr/local/src/目录下
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz 下载Mysql
tar -zxvf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz 解压
2. 将解压后的目录移动到/usr/local/目录下并改名为mysql
mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
3. 切换到/usr/local/mysql/目录下,先ls查看是否有文件或者目录。
创建mysql用户但禁止登陆 useradd -s /sbin/nologin mysql
创建/data/目录, mkdir /data/
然后初始化 ./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
报错显示缺少perl-Data-Dumper.x86_64这个包和libaio
yum install -y perl-Data-Dumper
yum install -y libaio
安装后再次执行
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql
如果不确定是否执行过程是对的,可以查看过程中是否出现了2次OK。也执行echo $?看是否显示0
4. 拷贝模板配置文件
因为centos7系统默认安装了mariadb-libs这个包而创建了/etc/my.cnf。这里直接覆盖
cp support-files/my-default.cnf /etc/my.cnf
如果使用系统中默认的/etc/my.cnf 需要做以下更改
datadir=/data/mysql
socket=/tmp/mysql.sock
注释掉:
includedir /etc/my.cnf.d
log-error=
pid-file=
5. 拷贝mysql启动脚本
cp support-files/mysql.server /etc/init.d/mysqld
vim/etc/init.d/mysqld 修改这2个地方
6. 启动服务
修改权限为755 chmod 755 /etc/init.d/mysqld
加入到开机启动列表 chkconfig --add mysqld
开机启动 chkconfig mysqld on
启动服务 service mysqld start 也可以启动脚本 /etc/init.d/mysqld start
ps aux |grep mysqld 查看进程
netstat -lnp |grep mysqld 查看监听端口3306
如果没有启动脚本可以用命令行的方式来启动
/usr/local/mysql/bin/mysql_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql 、
该命令就是进程中出现的命令
7. 设置PATH,否则不能直接调用mysql
修改 vim /etc/profile 文件,在文件末尾添加
export PATH=/usr/local/mysql/bin:$PATH
[root@localhost mysql]# source /etc/profile //使配置文件生效
验证
[root@localhost mysql]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.36 Source distribution
kill命令用来停掉服务,可能会造成数据丢失。killall命令更加安全。
yum install -y psmisc 安装killall
如果以后的工作中遇到mysqld的进程杀不死,ps还会有进程,那说明将数据慢慢写入到磁盘中,千万不能使用kill -9来杀进程,否则很可能丢数据。
MariaDB安装
- 首先移至: 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
- 创建用户(与mysql共用,因为之前已创建可以不用再创建):useradd mysql
- 移动至安装目录: cd /usr/local/mariadb
- 创建datadir目录:mkdir /data/mariadb (为了与mysql区分,在data下再创建一个目录)
- 初始化mariadb:./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/data/mariadb (防止初始化错误与mysql冲突,需指定basedir的路径)
- 在目录/usr/local/mariadb/support-files下有多个配置文件模板,最大的差异是它们的缓存大小不同,根据你的内存大小选择配置模板,此处我们选择最小缓存的配置文件:my-small.cnf
- 复制配置文件正常是放在/etc/my.cnf 下为防止与mysql的配置文件冲突不放在/etc/目录下: cp my-small.cnf /usr/local/mariadb/my.cnf 若不在此处指定datadir的路径,当系统装有mysql时会调用mysql配置文件中的datadir路径
- 复制脚本文件:cp support-files/mysql.server /etc/init.d/mariadb
- 编辑配置文件:设置basedir和datadir的目录,因为自定义配置文件的缘故还要在加注一条配置文件的路径(若默认在etc下则不用)。
- 在配置文件的启动项处,添加配置文件的启动路径:
- 启动mariadb服务(启动前需关闭mysql):/etc/init.d/mariadb start
- 当系统装有mysql和mariadb两个数据库文件时,安装mysql的配置文件会影响的mariadb,如未在mariadb的配置文件下为datadir指定目录时,就会导致mariadb会去mysql的配置文件下寻找datadir的路径。
Apache安装
Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache。Apache官网www.apache.org 。安装httpd时用到的apr和apr-util是一个通用的函数库,它可以让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows)
下载httpd和aprapr-util
cd /usr/local/src/
wget http://mirrors.cnnic.cn/apache/httpd/httpd-2.4.34.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.gz
解压
tar zxvf httpd-2.4.34.tar.gz
tar zxvf apr-1.6.3.tar.gz
tar zxvf apr-util-1.6.1.tar.gz
- 按先后顺序安装编译apr、apr-util、apache
- 编译需要用gcc yum install -y gcc gcc-c++
- cd apr-1.6.3/ 目录并编译后安装:./configure --prefix=/usr/local/apr && make && make install
- 生成apr-util的安装目录并编译后安装:./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && make && make install (xml/apr_xml.c:35:19: 致命错误:expat.h.缺少expat-devel包 yum install expat-devel )
- 生成httpd的安装目录并编译后安装./configure --prefix=/usr/local/apache2 --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-so --enable-mods-shared=most 其中--enable-so选项为开启动态模块、--enable-mods-shared=most尽可能多的安装常用的动态模块
报错 缺少pcre 库
yum install pcre-devel -y
报错 error: ld returned 1 exit status make
yum install libtools-ltdl-devel 并重新编译安装apr-util
- /usr/local/apache2.4/常用的几个目录
- bin:启动进程的目录
- conf: 配置文件所在目录
- htdocs:访问网站时,默认网站会放置在这个目录下
- logs:日志目录
- man:帮助文档
- modules:扩展模块
- 查看httpd开启的模块命令:/usr/local/apache2.4/bin/httpd -M 或 /usr/local/apache2.4/bin/apachectl -M
- 其中static(静态模块)会直接编译进httpd主二进制文件里/usr/local/apache2.4/bin/httpd
- 而shared(扩展模块):保存在modules目录下
- 启动httpd(apache):/usr/local/apache2.4/bin/apachectl start 不用定义启动脚本
启动后查看进程 ps aux |grep httpd
查看监听端口 netstat -lnp|grep httpd http默认80端口
安装PHP5
- cd /usr/local/src/
- 下载源码包:wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
- 解压源码包: tar -jxvf php-5.6.32.tar.bz2
- 移至解压后的cd php-5.6.32目录下执行命令:./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
- 报错
error: xml2-config not found. Please check your libxml2 installation.
yum install -y libxml2-devel
error: Cannot find OpenSSL's <evp.h>
yum install -y openssl-devel
error: Please reinstall the BZip2 distribution
yum install -y bzip2-devel
error: jpeglib.h not found.
yum install -y libjpeg-turbo-devel
error: png.h not found
yum install -y libpng-devel
error: freetype-config not found
yum install -y freetype-devel
error: mcrypt.h not found. Please reinstall libmcrypt (这个包在epel扩展源里)
yum install -y libmcrypt-devel
安装完成显示下面图片
- make && make install
- 其中/usr/local/apache2.4/modules/libphp5.so就是我们想要的模块,php与apache结合起来就是用的libphp5.so这个文件。即使把php目录删除也不影响Apache调到php,如果删除了libphp5.so的文件就无法调用php
- 查看加载的模块 /usr/local/php/bin/php -m
php是最为httpd的扩展模块存在的
查看到php的信息 路径编译参数等
/usr/local/php/bin/php -i
-将参考配置文件拷贝到/etc/目录下
cp php.ini-production /usr/local/php/etc/php.ini
(php.ini-development测试环境 php.ini-production生产环境用的 )
安装PHP7
- 下载php7的源码包:wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
- 解压源码包: tar -jxvf 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
- 根据自己的需求使用php5还是php7在配置文件vi /usr/local/apache2.4/conf/httpd.conf 中注释掉
Apache和PHP结合
/usr/local/apache2.4/bin/apachectl start 启动时报错
修改vi /usr/local/apache2.4/conf/httpd.conf 去掉 ServerName www.example.com:80去掉注释
因为之前下载了两个php所以需要注释掉一个否则也会报错
如果在浏览器中输入ip地址不能访问 开始排查错误
1.检查能否ping通和80端口
检查iptables防火墙将80端口开放
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
打开浏览器ip显示
如果显示403错误
Require all denied该为granted 允许访问
增加一行用来支持php的配置 AddType application/x-httpd-php .php
再增加一个php索引页
最后检查语法有没有错误 /usr/local/apache2.4/bin/apachectl -t
重新加载服务 /usr/local/apache2.4/bin/apachectl graceful
编辑一个php文件检查是否解析php
vi /usr/local/apache2.4/htdocs/1.php
显示页面解析成功如果没有解析需要排查问题
1. /usr/local/apache2.4/bin/apachectl -M 看最后有没有加载php模块
2.如果没有加载需要看有没有这个模块 ls /usr/local/apache2.4/modules/libphp5.so 有该文件但是没有显示,这时就要查看配置文件 vi /usr/local/apache2.4/conf/httpd.conf有没有加载libphp5.so这一行的配置
3.检查配置文件 vi /usr/local/apache2.4/conf/httpd.conf是否添加有AddType application/x-httpd-php .php这一行。(注意php前的空格)
4.检查配置文件 vi /usr/local/apache2.4/conf/httpd.conf 中这一行DirectoryIndex index.html index.php(index.php有没有添加)