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.1 LAMP架构介绍
LAMP其实是 Linux+Apache(httpd)+MySQL+PHP
三个服务可以安装在同一台机器或者也可以分开安装(但是httpd和PHP要在一起)
httpd、PHP、MySQL三者之间的工作
注:Apache和PHP是一个整体,因为PHP以模块的形式跟Apache结合在一起;
但是Apache不能直接跟MySQL打交道,只能通过PHP模块去MySQL里面拿数据,然后将结果交给Apache,最后Apache将结果交给用户(这是动态请求)
例如:进入一个PHP网站进行网站登录,登录请求先交给Apache,Apache判断请求是动态还是静态,
若是动态请求,Apache拿着用户的登录账号和密码通过PHP模块对比MySQL保存的用户密码是否正确,然后Apache返回给用户一个登录的状态;
若是静态请求,登录网站时有图片需要加载,也是向Apache发送请求,Apache通过某个目录拿到这个图片
,然后返回给用户
11.2 MySQL、MariaDB介绍
MySQL是一个关系型数据库,由mysql ab公司开发,mysql在2008年被sun公司收购(10亿刀),2009年sun公司被oracle公司收购(74亿刀)
MySQL官网https://www.mysql.com 最新版本5.7GA/8.0DMR
MySQL5.6变化比较大,5.7性能上有很大提升
Mariadb为MySQL的一个分支,官网https://mariadb.com/ 最新版本10.2
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内部测试版本
11.3/11.4/11.5 MySQL安装
MySQL的几个常用安装包:rpm、源码、二进制免编译
二进制免编译(没特殊要求时可用这种方法)
1、下载mysql包
cd /usr/local/src
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.6/mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
2、解压包,并将包移动到/usr/local/mysql目录
tar -zxvf mysql-5.6.39-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.6.39-linux-glibc2.12-x86_64 /usr/local/mysql
3、新增加mysql用户,并在根目录下创建/data/目录
cd /usr/local/mysql
useradd mysql
mkdir /data/ #存放MySQL数据目录(在根目录下)
4、初始化mysql
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql #初始化(生成MySQL数据库)
#--user指定用户, --datadir指定MySQL数据库目录
ps:检查是否初始化成功两种方法
一、查看是否有两个ok
二、echo $? 为0
5、拷贝配置文件参考模板到默认的/etc/my.cnf
cp support-files/my-default.cnf /etc/my.cnf
#my-default.cnf 是mysql配置文件
##默认将my-default.cnf 放在/etc/目录下
6、定义配置文件
vim /etc/my.cnf
#datadir放在/data/mysql;socket放在/tmp/mysql.sock;pid-file和includedir注释掉:
datadir=/data/mysql
socket=/tmp/mysql.sock
7、拷贝启动脚本到/etc/init.d/mysqld
cp support-files/mysql.server /etc/init.d/mysqld
8、定义启动脚本
vi /etc/init.d/mysqld #启动脚本,定义basedir和datadir,
内容如下:
basedir=/usr/local/mysql
datadir=/data/mysql
#要确保/etc/init.d/mysqld的文件权限是755
开启MySQL的三种方法
一、设置mysql开机自启
chkconfig --add mysqld
chkconfig mysqld on
二、服务命令启动
/etc/init.d/mysqld start 或者 service mysqld start
三、命令行启动
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql &
#--defaults-file=配置文件所在路径
##适用于你的配置文件所在路径不在etc目录或者启动脚本不在/etc/init.d/目录,让mysql正常启动
关闭MySQL
一、服务方式
/etc/init.d/mysqld stop
二、命令行方式
killall mysqld
使用kill关闭mysqld时,一定要使用killall mysqld,不能用kill -9 [pid]
#因为mysqld会实时的读写数据,写数据的速度很快,可能会把写的数据保存在内存中(缓存中),或许这部分缓存并未同步到磁盘中去,若是直接使用kill -9 pid ,会造成数据丢失;若是使用killall,会先停止当前的写读操作,让还没写入磁盘的数据继续写入磁盘,直到所有数据写完才哦会把进程杀死
##如果遇到mysqld进程始终杀不死,等了一分钟还没杀死,ps还会有进程,说明数据量很大,还在慢慢写入磁盘,这时要等待数据写入完后再killall进程,不要强制用kill -9,这很可能会造成数据丢失或者损坏数据表
错误:
一、
FATAL ERROR: please install the following Perl modules before executing ./scripts/mysql_install_db:
Data::Dumper
解决:
yum list |grep perl |grep -i dumper #查找含有perl和dumper的包
yum install -y perl-Data-Dumper
二、
Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
解决:
yum install -y libaio-devel
11.6 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
二、解压包并移动到/usr/local/目录下
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
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb
四、拷贝配置文件到/usr/local/mariadb目录(因为/etc/目录下有mysql了)
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
注意:mariadb有多个类型配置文件模板,不同之处在于缓存或缓冲的数值大小不一样,所以要根据自身内存大小选择合适的缓存,能让mysql性能更高效
五、定义配置文件
vi /usr/local/mariadb/my.cnf #定义basedir和datadir 改[mysqld]这部分,添加datadir=/data/mariadb
六、拷贝启动脚本到/etc/init.d/目录下
cp support-files/mysql.server /etc/init.d/mariadb
#拷贝启动脚本到/etc/init.d/mariadb目录
七、定义启动脚本
vim /etc/init.d/mariadb #定义basedir、datadir、conf以及启动参数
##如果启动脚本是放在/etc/目录下的话,就不用定义conf这个变量
修改内容如下:
basedir=/usr/local/mariadb
datadir=/data/mariadb
conf=/usr/local/mariadb/my.conf
还要找到启动命令那行,将conf添加进去
中间插入添加一句 --default file="$conf"
#开启前要检查mysql是否停止,因为mysql和mariadb监听的端口是一样的
/etc/init.d/mariadb start
11.7/11.8/11.9 Apache安装
Apache是一个基金会的名字,httpd才是我们要安装的软件包,早期它的名字就叫apache
Apache官网www.apache.org
源码包安装Apache
1、先下载Apache所需的包
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
apr和apr-util是一个通用的函数库,它让httpd可以不关心底层的操作系统平台,可以很方便地移植(从linux移植到windows)
2、解压包
tar -zxvf httpd-2.4.34.tar.gz
tar -zxvf apr-util-1.6.1.tar.gz
tar -zxvf apr-1.6.3.tar.gz
3、编译apr包
cd /usr/local/src/apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install
4、编译apr-util包
cd /usr/local/src/apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
5、编译httpd包
cd /usr/local/src/httpd-2.4.34
./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 #支持动态扩展
#make前要把apr和apr-util的目录放到/usr/local/apache2.4/srclib/目录下
cp -r /usr/local/src/apr-1.6.3 srclib/
cp -r /usr/local/src/apr-util-1.6.1 srclib/
make && make install
#most指的是绝大多数常用的模块
httpd内的目录
/bin/目录 #表示执行可执行文件(命令)
/conf/ #配置文件所在目录
/htdocs/ #访问网站所在目录
/logs/ #日志所在目录(帮助文档、错误日志等)
/modules/ #扩展模块所在目录
ls /usr/local/apache2.4/modules
/usr/local/apache2.4/bin/httpd -M #查看加载的模块
/usr/local/apache2.4/bin/apachectl -M #同等效果,查看加载模块
#static,表示静态模块,直接编译进了主脚本(/bin/httpd)里面
#shared,表示扩展模块,是一个.so结尾的文件,在/modules目录下
启动httpd
/usr/local/apache2.4/bin/apachectl start
错误:
一、
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/usr/local/src/apr-1.6.3':
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details
解决:
yum install -y gcc
二、
config.status: executing libtool commands
rm: cannot remove 'libtoolT': No such file or directory
config.status: executing default commands
解决:
这个错误没有关系,不影响
三、
xml/apr_xml.c:35:19: 致命错误:expat.h:没有那个文件或目录
#include <expat.h>
^
编译中断。
make[1]: *** [xml/apr_xml.lo] 错误 1
make[1]: 离开目录“/usr/local/src/apr-util-1.6.1”
make: *** [all-recursive] 错误 1
解决:
yum install -y expat-devel
四、
checking for pcre-config... false
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
解决:
yum install -y pcre-devel
五、
collect2: error: ld returned 1 exit status
make[2]: *** [htpasswd] 错误 1
make[2]: 离开目录“/usr/local/apache2.4/support”
make[1]: *** [all-recursive] 错误 1
make[1]: 离开目录“/usr/local/apache2.4/support”
make: *** [all-recursive] 错误 1
解决:
没有在httpd make前将apr和apr-util目录拷贝到httpd2.4目录下的srclib目录里面
11.10/11.11/11.12 安装PHP5
PHP官网www.php.net
当前主流版本为5.6/7.1
源码包安装
php5所需依赖包:
yum install -y libxml2-devel openssl-devel bzip2-devel libjpeg-turbo-devel libpng-devel freetype-devel libmcrypt-devel
1、下载php5包
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-5.6.32.tar.bz2
2、解压包
tar -jxvf php-5.6.32.tar.bz2
3、编译包
#因为编译php时要指定apache的路径,所以要先安装apache
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
make && make install
/usr/local/php/bin/php -m #查看PHP加载的模块(全是静态)
Apache和PHP5是通过libphp5.so这个文件才结合起来的
libphp5.so在/usr/loacl/http2.4/modules/目录下
4、拷贝一份配置文件模板到/usr/local/php/etc/(这个目录默认为空)
cp php.ini-production /usr/local/php/etc/php.ini
#php.ini-production适合在生产环境用的php配置文件;php.ini-development适合在开发环境用的PHP配置文件
错误:
一、
configure: error: xml2-config not found. Please check your libxml2 installation.
解决:yum install -y libxml2-devel
二、
configure: error: Cannot find OpenSSL's <evp.h>
解决:yum install -y openssl-devel
三、
configure: error: Please reinstall the BZip2 distribution
解决:yum install -y bzip2-devel
四、
configure: error: jpeglib.h not found.
解决:yum install -y libjpeg-turbo-devel
五、
configure: error: png.h not found.
解决:yum install -y libpng-devel
六、
configure: error: freetype-config not found.
解决:yum install -y freetype-devel
七、
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
解决:yum install -y libmcrypt-devel
11.13 安装PHP7
源码包安装
1、下载php7包
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-7.1.6.tar.bz2
2、解压包
tar -jxvf php-7.1.6.tar.bz2
3、编译包
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
#Apache和PHP7是通过libphp7.so这个文件才结合起来的
4、拷贝配置文件到/usr/local/php/etc
cp php.ini-production /usr/local/php7/etc/php.ini
注意:php5和php7可以在同一台机器共存,但是Apache使用时需要指定php;安装php5和php7后,两种php都会在Apache配置文件/usr/local/apache2.4/conf/httpd.conf内产生libphp5.so和libphp7.so模块,将不用的模块注释掉即可
11.14/11.15 Apache和PHP结合
httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
vim /usr/local/apache2.4/conf/httpd.conf
#修改以下4个地方
1、ServerName #将ServerName前面的#删掉
这样启动httpd服务是就不会提示没有ServerName
2、Require all denied #将denied改为granted
不修改前会出现403 forbidden错误,修改后便可以正常访问,主要就是授权访问
3、AddType application/x-httpd-php .php #增加这一行
增加这一行可以后可以解析php;如果发现网页显示的是php的代码,说明解析不了php
4、DirectoryIndex index.html index.php #在index.html后面增加index.php
增加一个索引页(默:认网址不输入index.php也能跳转到index.php)
ps:
打开windows系统的telnet客户端方法
#telnet客户端用于window连接Linux服务器
控制面板--》程序--》启用或关闭程序功能--》选择telnet客户端,然后点击确定
/usr/local/apache2.4/bin/apachectl -t #测试配置文件语法是否正确
#每次修改配置文件要检查
/usr/local/apache2.4/bin/apachectl graceful #重新加载配置文件(并不会重启服务)
快捷小技巧:CTRL+R可以快速访问命令历史的命令
按CTRL+R,然后输入关键命令,就会显示出完整命令
/usr/local/apache2.4/bin/apachectl start #启动服务
/usr/local/apache2.4/bin/apachectl restart #重新加载服务
问题:
如果发现网页显示的是php的代码,说明解析不了php
第一步,检查是否有php模块
ls /usr/local/httpd2.4/modules/libphp5.so
第二步,如果有文件,但是并没有显示,检查httpd配置文件有没有加载libphp5.so模块
第三步,检查是否有加解析php的语句AddType application/x-httpd-php .php ,并查看句子是否写对(httpd-php与.php之间有空格)
第四步、检查index.php