前言
本文将介绍LNMP架构中Mysql、PHP、Nginx的源码编译过程;这时有人不仅会问:在我们使用的Linux系统中,可以从yum源中获得mysql、php,为什么要进行如此漫长复杂的过程进行编译呢? 这是因为官方为我们提供的mysql、php等其功能有限,我们自行编译,是为了定制化,可以在编译过程中添加需要的功能模块。
实验前准备工作:
(1)为了编译完成后的其它服务的配置,我选择创建一台虚拟机,IP:172.25.6.1
(2)虚拟机相关细节
mysql源码编译时要求虚拟机的硬盘大小不能小于20G,否则后边的编译过程可能会出问题,而且会很漫长,为了提升速度我们增加CPU核数和内存大小
很难过,假如你的内存像我这般大小,在你编译后,内存的使用率会达到100%,为了解决这个问题,我们可以进行扩容 ?(如果内存够可以跳过这些操作,当然以下操作也可以作为编译后的补救措施)
<1>添加磁盘
<2>查看新增的硬盘,/dev/sdb,进行分区
fdisk -l
<3>更改新增磁盘的标签为8e
fdisk /dev/sdb
<4>将新增的磁盘扩充到磁盘的逻辑卷dev/mapper/VolGroup中
pvcreate /dev/sdb1
vgextend VolGroup /dev/sdb1
lvextend -l +5118 /dev/mapper/VolGroup-lv_root
<5>再次查看磁盘的大小发生变化
fdsik -l
<6>查看挂载情况,发现没有变化
<7>重新加载后查看发生变化,扩容成功
resize2fs /dev/mapper/VolGroup-lv_root
一.Msyql编译详解
1.下载安装包,解压
mysql-boost-5.7.17.tar.gztar zxf mysql-boost-5.7.17.tar.gz cd mysql-5.7.17/
2.新建一个目录,作为mysql的目录
mkdir /usr/local/lnmp/
3.安装必要的软件
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y##选择合适的版本,编译需要的软件yum install -y ncurses-devel##安装依赖性yum install gcc gcc-c++ -yyum install -y bison
cmake跨平台工具时用来编译mysql源码的,用于设置mysql的编译参数,如安装目录,数据存放目录,字符编码,排序规则等
4.开始编译
参数详解
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \##这里mysql上级目录是上面我们建立的/usr/local/lnmp/-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \-DWITH_MYISAM_STORAGE_ENGINE=1 \-DWITH_INNOBASE_STORAGE_ENGINE=1 \-DDEFAULT_CHARSET=utf8 \-DDEFAULT_COLLATION=utf8_general_ci \-DEXTRA_CHARSETS=all \-DWITH_BOOST=boost/boost_1_59_0
一定要在解压后的目录中进行编译
注意:如果编译有报错,按照报错提示解决问题后,删除编译产生的目录,重新编译即可
[root@server1 mysql-5.7.17]# rm -fr CMakeCache.txt
5.make
make
**6.make install**
7.安装之后可以看到/usr/local/lnmp目录下生成了mysql目录,而mysql目录下有一些子目录和文件
8.将mysql的配置文件复制到etc下
养成好习惯,次类操作前先备份:备份/etc/f文件为/etc/f.bak
cp /etc/f /etc/f.bak
9.编辑mysql的配置文件,内容如下:
vim my-f
10.创建mysql组和用户
11.新建一个data目录作为数据存放目录,修改目录的属性,让mysql用户对这个目录有操作的权限
chgrp mysql /usr/local/lnmp/mysql -Rchown mysql /usr/local/lnmp/mysql/data/ -R
12.将编译生成的mysql二进制命令放进系统环境变量的文件中,保证可以直接使用二进制命令(配置完之后mysql命令可以自动补齐)
vim ~/.bash_profile
source ~/.bash_profile
13.将编辑生成的mysql启动脚本复制到系统服务的目录中,保证脚本有可执行权限
14.将mysql初始化,这时data目录下不能有任何文件,如果有的话删除
mysqld --user=mysql --initialize##下图高亮部分是初始化生成的临时密码
/etc/init.d/mysqld start
15.初始化文成后会生成一个临时密码,用这个密码登陆数据库
mysql -p
SHOW DATABASES;
查看数据失败,这是因为没有进行安全初始化
16.对mysql进行安全初始化
mysql_secure_installation
17.再次进入数据库查看,可以查看
顺便说一句:虽然数据库中的操作语句大小写是通用的,但是养成好习惯,使用大写看起来更专业一点
二、源码安装php
1.下载php及需要的安装包,解压
php-5.6.35.tar.bz2libmcrypt-2.5.8-9.el6.x86_64.rpmlibmcrypt-devel-2.5.8-9.el6.x86_64.rpm
解压
tar jxf php-5.6.35.tar.bz2
yum install libmcrypt-* -y
2.安装编译php源码时需要的依赖性
直接安装可以从yum源里直接获得
yum install net-snmp-devel curl-devel libxml2-devel libpng-devel libjpeg-devel freetype-devel gmp-devel openldap-devel -y
3.进行编译
所需参数
php-5.6.35./configure\--prefix=/usr/local/lnmp/php \--with-config-file-path=/usr/local/lnmp/php/etc \--with-openssl --with-snmp --with-gd --with-zlib \--with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir \--with-freetype-dir --with-gmp --with-gettext --with-pear \--enable-mysqlnd --with-mysql=mysqlnd \--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd \--enable-inline-optimization --enable-soap --enable-ftp \--enable-sockets --enable-mbstring --enable-fpm \--with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
编译成功后:
4.安装
make && make install
很不幸,如果在安装过程中你出现了和我一样的报错,如下:
libtool: link: `ext/opcache/zend_accelerator_blacklist.lo' is not a valid libtool objectmake: *** [ext/opcache/opcache.la] Error 1
解决方案:在php解压文件下运行
make distclean
执行完之后重新编译安装
安装成功后如下:
5.安装成功后会看到/usr/local/lnmp下会出先一个php目录
ll /usr/local/lnmp/php/
6.切换到这个目录下,编辑php的默认配置文件
cd /usr/local/lnmp/php/etccp php-fpm.conf.default php-fpm.confvim php-fpm.conf
25 pid = run/php-fpm.pid ##pid行去掉注释149 user = nginx150 group = niginx##保证用户和组都是nginx
7.将源码包中的php.ini文件复制到安装后的目录中
编辑这个文件:更改时区
8.将php的启动文件复制到系统启动脚本的默认目录下
9.创建nginx用户
useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
10.启动php服务,启动成功后可以查看到他使用的端口
/etc/init.d/php-fpm startnetstat -tnlp
三、源码安装Nginx
1.获得并解压安装包
nginx-1.14.0.tar.gz tar zxf nginx-1.14.0.tar.gz
2.切换到解压出的目录,修改下面文件的内容
(1)去掉版本号
cd nginx-1.14.0vim src/core/nginx.h
(2)去掉debug日志(debug日志的级别很低,会产生很多数据,一般不需要开启)
[root@server1 nginx-1.14.0]# vim auto/cc/gcc
3.创建编译环境,添加需要的模块
yum install pcre-devel -y##先解决倚赖
编译参数如下:
[root@server1 nginx-1.14.0]# ./configure --prefix=/usr/local/lnmp/nginx --with-threads --with-file-aio --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
编译完成如下:
4.安装
make && make install
安装后在/usr/local/lnmp目录下会产生一个nginx子目录
5.配置nginx服务
修改内容如下:
3 worker_processes 2;##2表示cpu内核数43 location / {44 root html;45 index index.php index.htm;##添加php46 }65 location ~ \.php$ {66 root html;67 fastcgi_pass 127.0.0.1:9000;68 fastcgi_index index.php;69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;##注释掉70 include fastcgi.conf;##改为fastcgi.conf71 }
切换到nginx/sbin目录下可以进行语法检测,检查配置文件中有没有语法问题
[root@server1 sbin]# ./nginx -v##查看版本号[root@server1 sbin]# ./nginx -V##查看编译环境
6.创建一个软连接可以直接使用nginx命令
ln -s /usr/local/lnmp/nginx/sbin/nginx /usr/local/sbin/
7.打开服务查看端口号
[root@server1 sbin]# nginx##做完软连接可以用这条命令直接打开服务
打开服务后可以看到生出了几个子目录
8.打开浏览器,访问测试
出现nginx的页面
9.编辑一个php文件,浏览器访问测试
浏览器中刷新后出现php页面,说明nginx和php结合成功