第十一章LAMP架构介绍(上)

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课堂笔记
 
 
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注释掉:
 
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
 
二、服务命令启动
 /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
源码包安装
1、下载php5包
cd /usr/local/src/
 
 
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配置文件
 
 
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.solibphp7.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   #重新加载服务
 
 
vim /usr/local/apache2.4/htodcs/test.php   #增加索引页如下内容
<?php
echo 123;
?>
 
问题:
如果发现网页显示的是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
 
 
11.16扩展
mysql5.7二进制包安装(变化较大) http://www.apelearn.com/bbs/thread-10105-1-1.html
php中mysql,mysqli,mysqlnd,pdo到底是什么http://blog.csdn.net/u013785951/article/details/60876816
 
11.17课堂笔记
一、LAMP的工作原理
浏览器向服务器发送http请求,服务器接收请求,由于php作为Apache的组件模块也会一起启动,它们具有相同的生命周期。Apache会将一些静态资源保存,然后去调用PHP处理模块进行php脚本的处理。处理完脚本后,Apache将处理完的信息通过http response的方式发送给浏览器,浏览器解析,渲染等一些了操作后呈现整个网页。
#php和mysql之间的联系是动态请求
#如果只是查看图片就是静态请求,Apache可以直接解析。不会用到php和mysql动态请求。(mysql不能存图片等文件)
 
http抓包工具fiddler
 
 
二、安装Apache
pcre包   #就是让Apache支持正则
 
expat-devel  pcre-devel   zlib-devel
 
查看Apache加载了什么模块
/usr/local/apache2/bin/httpd -M
 
/usr/local/apache2/bin/httpd -l
 
启动Apache后要想解析php网页,先关闭SElinux,要关闭防火墙或者定义规则
1、关闭firewalld,增加iptables规则
iptables -I INPUT  -p  tcp  --dport 80  -j  ACCEPT
 
2、增加firewalld规则
启动firewalld
然后firewall-cmd --get-default-zone
firewall-cmd --zone=public --add-service=http-permanent
firewall-cmd --reload
 
 
三、MySQL安装
1、yum安装,缺少定制功能,安装简单
2.二进制免编译安装,可以按需定制,
3、源代码编译安装,可以提供最高的性能
 
创建用户时指定shell
  •  /bin/bash      普通用户可登录
  • /sbin/nologin    不让普通用户登录,FTP可登录
  • /bin/false     连FTP用户都登录不了
 
##MySQL启动不了,出现错误,应该查看mysql的错误日志文件,在/data/mysql/目录下的主机名.err文件;如果没有错误就是配置文件有误,检查配置文件。
[root@xinlinux-03 ~]# cd /data/
[root@xinlinux-03 data]# ls
mysql
[root@xinlinux-03 data]# cd mysql
[root@xinlinux-03 mysql]# ls
auto.cnf  ib_logfile0  mysql               test             xinlinux-03.pid
ibdata1   ib_logfile1  performance_schema  xinlinux-03.err
 
 
四、安装PHP5
编译
--with-apxs2=/usr/loacl/apache2.4/bin/apxs
#apxs工具可以自动配置libphp5.so这个文件
 
--with-config-file-path=/usr/local/php/etc
#指定php配置文件目录
 
--with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config
#指定mysql、pdo-mysql、mysqli让mysql能和php进行通信
 
 
五、myslq5.7版本
1. 下载包
wget   http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz
若该链接失效,请到r.aminglinux.com 找最新的下载地址。
 
2. 解压
tar  xxvf mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz
mv  mysql-5.7.12-linux-glibc2.5-x86_64  /usr/local/mysql
 
3. 初始化
useradd -M -s /sbin/nologin  mysql
mkdir -p /data/mysql
chown mysql /data/mysql
cd /usr/local/mysql
 
./bin/mysqld  --initialize --user=mysql --datadir=/data/mysql
注意,这一步最后一行会有一个提示
[Note] A temporary password is generated for root@localhost: B*s1i(*,kXwg
最后面的字符串为root密码。
./bin/mysql_ssl_rsa_setup --datadir=/data/mysql
 
4. 拷贝配置文件和启动脚本
cp support-files/my-default.cnf  /etc/my.cnf  
vim /etc/my.cnf     #编辑或者修改
basedir = /usr/local/mysql
datadir = /data/mysql
port = 3306
socket = /tmp/mysql.sock
 
cp support-files/mysql.server /etc/init.d/mysqld
vi /etc/init.d/mysqld    #编辑或者修改
basedir=/usr/local/mysql
datadir=/data/mysql
 
5. 启动服务
/etc/init.d/mysqld start
 
6. 设置root密码
使用初始化密码登录
/usr/local/mysql/bin/mysql -uroot -p'B*s1i(*,kXwg'  #进入后直接设置密码
mysql>set password = password('mypass');   #一定要设置一下新密码
退出来,再使用新的密码登录就可以了
 
7、还有一种情况,就是不知道初始化密码
vi /etc/my.cnf
在[mysqld]下面增加一行
skip-grant-tables
 
重启  /etc/init.d/mysqld restart
/usr/local/mysql/bin/mysql -uroot
mysql> update user set authentication_string=password('123333') where user='root';
退出来后,更改my.cnf,去掉刚加的 skip-grant-tables
重启 /etc/init.d/mysqld restart
此时就可以使用新的密码了。
 
六、Apache的DSO原理
DSO(动态共享目标)()
DSO是Dynamic Shared Objects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache在1.3以后的版本后开始支持它。因为Apache早就使用一个模块概念来扩展它的功能并且在内部使用一个基于调度的列表来链接扩展模块到Apache核心模块.所以,Apache早就注定要使用DSO来在运行时加载它的模块。
 
 
七、Apache的apxs功能
可以用来编译modules中的模块,生成.so的文件
 
 
八、Apache的三种MPM模式
 Apache 2.X  支持插入式并行处理模块,称为多路处理模块(MPM)。在编译apache时必须选择也只能选择一个MPM,对类UNIX系统,有几个不同的MPM可供选择,它们会影响到apache的速度和可伸缩性。
1、prefork MPM    多进程
 
优点:成熟,兼容所有新老模块。进程之间完全独立,使得它非常稳定。同时,不需要担心线程安全的问题。(我们常用的mod_php,PHP的拓展不需要支持线程安全)
缺点:一个进程相对占用更多的系统资源,消耗更多的内存。而且,它并不擅长处理高并发请求,在这种场景下,它会将请求放进队列中,一直等到有可用进程,请求才会被处理。
 
2、worker MPM    多进程+多线程
优点:占据更少的内存,高并发下表现更优秀。
缺点:必须考虑线程安全的问题,因为多个子线程是共享父进程的内存地址的。如果使用keep-alive的长连接方式,也许中间几乎没有请求,这时就会发生阻塞,线程被挂起,需要一直等待到超时才会被释放。如果过多的线程,被这样占据,也会导致在高并发场景下的无服务线程可用。(该问题在prefork模式下,同样会发生)
 
3、event  MPM  多进程+多线程+epoll
keep-alive   #手拉手,表示两边一直连接着不断开,即使交流完也不断开
它解决了 keep-alive 场景下 ,长期被占用的线程的资源浪费问题(某些线程因为被keep-alive,挂在那里等待,中间几乎没有请求过来,一直等到超时)。
 
 
九、mysql、mysqli、pdo
MYSQL 也叫 Original MySQL,PHP4版本的MYSQL扩展,从PHP5起已经被废弃,并别从PHP7开始已经被移除。
 
MYSQLI 叫做 “MySQL增强扩展”。
 
MYSQLND MYSQL NATIVE DIRVER 叫做MYSQL “官方驱动”或者更加直接点的叫做“原生驱动”
 
PDO PHP Data Objects PHP数据对象,是PHP应用中的一个数据库抽象层规范。
 
 
十、查看Nginx、Apache、MYSQL和PHP的编译参数
Linux下查看Nginx、Napache、MySQL、PHP的编译参数的命令如下:
 
1、nginx编译参数:
#/usr/local/nginx/sbin/nginx -V
 
2、apache编译参数:
# cat /usr/local/apache/build/config.nice
 
3、php编译参数:
# /usr/local/php/bin/php -i |grep configure
 
4、mysql编译参数:
# cat /usr/local/mysql/bin/mysqlbug|grep configure
 
 
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课堂笔记
 
 
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注释掉:
 
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
 
二、服务命令启动
 /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
 

 

posted @ 2018-09-11 10:24  最爱吃菜  阅读(260)  评论(0编辑  收藏  举报