1.Apache PHP MySQL三者如何工作
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内部测试版本
MySQL的几个常用安装包:rpm、源码、二进制免编译
mysql二进制安装包基本操作流程:
cd /usr/local/src #把包下到指定目录下
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz #解压
mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql #把解压的文件移动到我们指定目录并更名
cd /usr/local/mysql
useradd mysql #创建用户
mkdir /data/ #创建mysql数据文件存放目录
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql #初始化
cp support-files/my-default.cnf /etc/my.cnf #拷贝Mysql默认配置文件
cp support-files/mysql.server /etc/init.d/mysqld #拷贝mysql启动文件
vi /etc/init.d/mysqld #定义basedir和datadir
/etc/init.d/mysqld start #启动
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
./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb/ --datadir=/data/mariadb
cp support-files/my-small.cnf /usr/local/mariadb/my.cnf
vi /usr/local/mariadb/my.cnf #定义basedir和datadir
cp support-files/mysql.server /etc/init.d/mariadb
vim /etc/init.d/mariadb #定义basedir、datadir、conf以及启动参数
/etc/init.d/mariadb start
/usr/local/apache2.4/bin/apachectl -M
/usr/local/apache2.4/bin/httpd -l
MySQL源码安装
首先安装必要的库
yum -y install gcc*
###### 安装 MYSQL ######
首先安装camke
1.支持YUM,则
- yum install -y cmake
2.也可以源码安装
- cd /usr/local/src
- #下载cmake
- wget http://www.cmake.org/files/v2.8/cmake-2.8.7.tar.gz
- tar zxvf cmake-2.8.7.tar.gz
- cd cmake-2.8.7
- #安装cmake
- ./configure
- make
- make install
安装 MYSQL
官网下载 MYSQL5.5版本 linux下源码包
http://dev.mysql.com/downloads/
安装
- groupadd mysql
- useradd -g mysql mysql
- tar zxvf mysql-5.2.25.tar.gz
- cd mysql-5.2.25
- #cmake . //默认情况下安装,安装目录为/usr/local/mysql 数据目录为/usr/local/mysql/data
- #也可以指定参数安装,如指定UTF8,数据引擎等
- #具体参照http://dev.mysql.com/doc/refman/ ... ration-options.html
- cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/mysql/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS:STRING=all -DWITH_DEBUG=0 -DWITH_SSL=yes -DWITH_READLINE=1 -DENABLED_LOCAL_INFILE=1
- make && make install
- cd /usr/local/mysql
- chown -R mysql:mysql /usr/local/mysql
- ./scripts/mysql_install_db --user=mysql -datadir=/mysql/data
- #此处如不指定datadir,到启动时会报错
- chown -R root .
- chown -R mysql data
- cp support-files/my-medium.cnf /etc/my.cnf
- bin/mysqld_safe --user=mysql &
- # Next command is optional
- cp support-files/mysql.server /etc/init.d/mysqld
- chmod +x /etc/init.d/mysqld
- /etc/init.d/mysqld start
到此安装完成
3.安装Apache
apr安装:
cd /usr/local/src/apr-1.6.3
./configure --prefix=/usr/local/apr
make && make install
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
安装httpd:
这里有个包需要提前安装:
yum install -y prce-devel 注意看自己错误提示!
cd /usr/local/src/httpd-2.4.29
./configure \ #这里的反斜杠是脱义字符,加上它我们可以把一行命令写成多行
--prefix=/usr/local/apache2.4 \
--with-apr=/usr/local/apr \
--with-apr-util=/usr/local/apr-util \
--enable-so \
--enable-mods-shared=most
make && make install
ls /usr/local/apache2.4/modules
/usr/local/apache2.4/bin/httpd -M #查看加载的模块
4.PHP5安装
环境配置:
rpm -ivh 'http://www.lishiming.net/data/attachment/forum/epel-release-6-8_64.noarch.rpm'
yum install -y libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libjpeg libjpeg-devel libpng libpng-devel freetype-devel libmcrypt-devel
cd /usr/local/src/
wget http://cn2.php.net/distributions/php-5.6.30.tar.gz
tar zxf php-5.6.30.tar.gz
cd php-5.6.30
./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
cp php.ini-production /usr/local/php/etc/php.ini
PHP7安装
cd /usr/local/src/
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
apache与php结合
流程:
httpd主配置文件/usr/local/apache2.4/conf/httpd.conf
vim /usr/local/apache2.4/conf/httpd.conf //修改以下4个地方
ServerName 去掉前面的#号
Require all denied 修改为granted
AddType application/x-httpd-php .php 增加
DirectoryIndex index.html index.php 增加
/usr/local/apache2.4/bin/apachectl -t //测试语法
/usr/local/apache2.4/bin/apachectl start //启动服务
netstat -lntp
curl localhost
vim /usr/local/apache2.4/htodcs/1.php //增加如下内容
<?php
phpinfo();
?>
curl localhost/1.php
Apache Dos原理
Apache HTTP服务器是一个模块化的软件,使管理者可以选择核心中包含的模块以裁剪功能。可以在编译时选择被静态包含进httpd
二进制映象的模块,也可以编译成独立于主httpd
二进制映象的动态共享对象DSO,DSO模块可以在编译服务器之后编译,也可以用Apache扩展工具(apxs)编译并增加
DSO是Dynamic Shared Objects(动态共享目标)的缩写,它是现代Unix派生出来的操作系统都存在着的一种动态连接机制。它提供了一种在运行时将特殊格式的代码,在程序运行需要时,将需要的部分从外存调入内存执行的方法。Apache在1.3以后的版本后开始支持它。因为Apache早就使用一个模块概念来扩展它的功能并且在内部使用一个基于调度的列表来链接扩展模块到Apache核心模块.所以,Apache早就注定要使用DSO来在运行时加载它的模块
不管是Worker模式或是Prefork 模式,Apache总是试图保持一些备用的(spare)或者是空闲的子进程(空闲的服务线程池)用于迎接即将到来的请求。这样客户端就不需要在得到服务前等候子进程的产生