mysql、php、nginx源码编译、LNMP架构、memcached缓存配置、openresty+memcached实现缓存

本文详细介绍LNMP(Linux + Nginx + MySQL + PHP)环境的搭建过程,包括各组件的源码编译安装、配置及常见问题解决。同时介绍了如何安装Memcache缓存系统并集成到Nginx中,最后演示了OpenResty的部署。
摘要由CSDN通过智能技术生成

一、mysql源码编译安装

server1:

get mysql-boost-5.7.17.tar.gz
get cmake-2.8.12.2-4.el6.x86_64.rpm
tar zxf mysql-boost-5.7.17.tar.gz 
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
[root@server1 ~]# cd mysql-5.7.17/

安装依赖性

yum install gcc gcc-c++ ncurses-devel bison -y

可能出现的错误

具体看报错,不一定出现:rm -f CMakeCache.txt

开始编译

[root@server1 mysql-5.7.17]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql \     #安装目录
> -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data \   #数据库存放目录
> -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock \   #Unix socket 文件路径
> -DWITH_MYISAM_STORAGE_ENGINE=1 \   #安装 myisam 存储引擎
> -DWITH_INNOBASE_STORAGE_ENGINE=1 \   #安装 innodb 存储引擎
> -DDEFAULT_CHARSET=utf8 \   #使用 utf8 字符
> -DDEFAULT_COLLATION=utf8_general_ci \   #校验字符
> -DEXTRA_CHARSETS=all \   #安装所有扩展字符集
> -DWITH_BOOST=boost/boost_1_59_0/

 make && make install

编辑配置文件

[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# rpm -qa|grep mysql
mysql-libs-5.1.71-1.el6.x86_64
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf 
cp: overwrite `/etc/my.cnf'? y
[root@server1 support-files]# vim /etc/my.cnf 
 18 basedir = /usr/local/lnmp/mysql
 19 datadir = /usr/local/lnmp/mysql/data
 20 port = 3306
 21 # server_id = .....
 22 socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 support-files]# file mysql.server 
mysql.server: POSIX shell script text executable
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld   #启动脚本
[root@server1 support-files]# ll /etc/init.d/mysqld 
-rwxr-xr-x 1 root root 10916 Aug  5 11:21 /etc/init.d/mysqld

建立用户

cd ..
[root@server1 mysql]# groupadd -g 27 mysql
[root@server1 mysql]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[root@server1 mysql]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)

添加权限

[root@server1 mysql]# chown -R mysql.mysql .

这里写图片描述

[root@server1 ~]# vim .bash_profile 
 10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 ~]# source .bash_profile

这里写图片描述
数据库初始化
这里写图片描述
数据库初始化出现这种错误时:

2018-08-06T04:16:01.757570Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2018-08-06T04:16:01.757589Z 0 [ERROR] Aborting

解决办法:

data目录中的数据删除
[root@server1 mysql]# cd /usr/local/lnmp/mysql/data/
[root@server1 data]# ls
ib_buffer_pool  ibdata1  ib_logfile0  ib_logfile1
[root@server1 data]# rm -fr *

更改目录权限

/etc/init.d/mysqld start
cd /usr/local/lnmp/mysql
chown root.root . -R
chown mysql data/ -R

这里写图片描述
mysql 安全设置

mysql_secure_installation
Enter password for user root:   #将mysql初始化后的随机字符密码复制到这
New password: 
Re-enter new password: 
Press y|Y for Yes, any other key for No: n
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y

登陆查看

mysql -p
mysql> show databases;

这里写图片描述

二、php源码安装

server1:

get php-5.6.35.tar.bz2 
get re2c-0.13.5-1.el6.x86_64.rpm
get gd-devel-2.0.35-11.el6.x86_64.rpm
get libmcrypt-devel-2.5.8-9.el6.x86_64.rpm  libmcrypt-2.5.8-9.el6.x86_64.rpm
解压包
tar jxf php-5.6.35.tar.bz2 

解决依赖性

yum install -y libxml2-devel openssl-devel  gmp-devel net-snmp-devel curl-devel
yum install -y gd-devel-2.0.35-11.el6.x86_64.rpm 
yum install -y libmcrypt-devel-2.5.8-9.el6.x86_64.rpm  libmcrypt-2.5.8-9.el6.x86_64.rpm 
rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm 

开始编译

[root@server1 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-mcrypt --with-mhash

[root@server1 php-5.6.35]# make && make install
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 ~]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini936行的注释取消,时间改为亚洲上海
 933 [Date]
 934 ; Defines the default timezone used by the date functions
 935 ; http://php.net/date.timezone
 936 date.timezone = Asia/Shanghai

[root@server1 etc]# vim php-fpm.conf
25行取消注释
25 pid = run/php-fpm.pid

建立用户

[root@server1 etc]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
[root@server1 etc]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 ~]# cd php-5.6.35/sapi/fpm
[root@server1 fpm]# file init.d.php-fpm
init.d.php-fpm: POSIX shell script text executable
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm 
[root@server1 fpm]# /etc/init.d/php-fpm start
Starting php-fpm  done

进程查看

ps ax     

这里写图片描述
查看端口

netstat -antlp
tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      4211/php-fpm      

三、nginx源码编译

get nginx-1.10.1.tar.gz  nginx-sticky-module-ng.tar.gz 
tar zxf nginx-1.10.1.tar.gz 
tar zxf nginx-sticky-module-ng.tar.gz 
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h
 14 #define NGINX_VER          "nginx"       ##修改名字
[root@server1 nginx-1.10.1]# vim auto/cc/gcc 
178 # debug                      
179 #CFLAGS="$CFLAGS -g"

解决依赖性

yum install -y pcre-devel 

开始编译

[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx

[root@server1 nginx-1.10.1]# make && make install
cd /usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
 13     worker_connections  65535;
 45             index  index.php index.html index.htm;
 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;
 71         }
[root@server1 conf]# vim /etc/security/limits.conf 
 51 nginx   -       nofile          65536
[root@server1 ~]# vim .bash_profile 
 10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin
[root@server1 ~]# source .bash_profile 
[root@server1 ~]# nginx -t
[root@server1 ~]# nginx
[root@server1 ~]# netstat -antlp
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      4828/nginx     

检测

浏览器访问172.25.61.5,出现默认nginx页面

这里写图片描述
修改默认发布文件

[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php
<?php
phpinfo()
?>

检测

浏览器访问172.25.61.5,出现php页面

这里写图片描述

四、搭建论坛

get Discuz_X3.2_SC_UTF8.zip
yum install unzip -y
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
[root@server1 ~]# cd /usr/local/lnmp/nginx/html
[root@server1 html]# mv upload/ bbs

检测

浏览器访问输入172.25.61.5/bbs 访问论坛安装界面

这里写图片描述
这里写图片描述
安装论坛时出现以下情况时的解决办法:
1、当前状态全是X
这里写图片描述
解决方法:

[root@server1 ~]# cd /usr/local/lnmp/nginx/html/bbs/
[root@server1 bbs]# chmod 777 config/ data/ uc_server/ uc_client/ -R

2、数据库连接错误
No such file or directory
解决方法:

[root@server1 bbs]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini 
1013 pdo_mysql.default_socket=/usr/local/lnmp/mysql/data/mysql.sock
1162 mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
1221 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm  done

3、数据库连接错误
Permission denied
解决方法:
这里写图片描述

[root@server1 mysql]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# ll
drwxr-x---  5 mysql root  4096 Aug  6 13:09 data
[root@server1 mysql]# chmod 755 data/

4、如果提示connection refused,那就是数据库没打开
解决方法:

[root@server1 install]# /etc/init.d/mysqld start

5、以管理员身份进入论坛后进入管理中心,
页面提示 Please delete install/index.php via FTP!
这里写图片描述
这里写图片描述
这里写图片描述
解决方法

[root@server1 data]# cd /usr/local/lnmp/nginx/html/bbs/install/
[root@server1 install]# rm -fr index.php 

至此lnmp架构配置成功

五、添加memcache缓存

Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
为什么会有memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。一个是项目名称,一个是主程序文件名。
memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储。
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。

tar zxf memcache-2.2.5.tgz
[root@server1 ~]# vim .bash_profile 
 10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin
[root@server1 ~]# source .bash_profile 

创建一个预编译环境

[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize

这里写图片描述
开始编译

./configure
make
make install

编译好后查看

[root@server1 html]# cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls
memcache.so  opcache.a  opcache.so
[root@server1 no-debug-non-zts-20131226]# php -m

这里写图片描述

[root@server1 no-debug-non-zts-20131226]# php -m |grep memcache  ##
[root@server1 extensions]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini 
 873 extension=memcache.so               #php扩展指向memcached的动态连接库文件 
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# php -m |grep memcache
memcache

安装memcached服务器

yum install -y memcached
/etc/init.d/memcached start
netstat -antlp
tate       PID/Program name   
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      7465/memcached      
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   L
cd memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php example.php /usr/local/lnmp/nginx/html/  #example.php是php开发的用来往memcache中添加数据的程序页
[root@server1 memcache-2.2.5]# rpm -q memcached
memcached-1.4.4-3.el6.x86_64
[root@server1 memcache-2.2.5]# netstat -antlp |grep :11211
tcp        0      0 0.0.0.0:11211               0.0.0.0:*                   LISTEN      10645/memcached     
tcp        0      0 :::11211                    :::*                        LISTEN      10645/memcached     
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim memcache.php    #查看memcache的缓存页面
 23 define('ADMIN_PASSWORD','westos');      // Admin Password  #登陆界面的密码
 28 $MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array  #指定memcache服务器
 29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array

浏览器访问

http://172.25.61.5/example.php
http://172.25.61.5/memcache.php

这里写图片描述
这里写图片描述
输入密码后
这里写图片描述
物理机:
此命令意思是开启10个并发连接访问http://172.25.61.5/index.php来处理1000个请求

ab -c 10 -n 1000 http://172.25.61.5/index.php

这里写图片描述

ab -c 10 -n 1000 http://172.25.61.5/example.php

这里写图片描述

六、openresty

OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。

OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。

get openresty-1.13.6.1.tar.gz 
tar zxf openresty-1.13.6.1.tar.gz 

关掉原来的nginx

nginx -s stop

开始编译

cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ./configure --prefix=/usr/local/lnmp/openresty --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio
gmake
gmake install
cd /usr/local/lnmp/openresty/nginx/conf/
[root@server5 conf]# vim nginx.conf
 13     worker_connections  65535;

 17 http {
 18 
 19         upstream memcache {
 20         server localhost:11211;
 21         keepalive 512;   #保持512个不立即关闭的连接用于提升性能
 22         }
 23 

 53 
 54         location /memc {
 55         internal;    #将/memc设为internal表示只接受内部访问,不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指令控制权限
 56         memc_connect_timeout 100ms;
 57         memc_send_timeout 100ms;
 58         memc_read_timeout 100ms;
 59         set $memc_key $query_string;  #$memc_key这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的$query_string来作为key
 60         set $memc_exptime 300;   #$memc_exptime表示缓存失效时间,以秒记。
 61         memc_pass memcache;   #指向upstream模块
 62         }
 63 

 81         location ~ \.php$ {     #所有请求都通过请求这个location来操作memcache,memc-nginx-module存取memcache是基于http method语义的,使用http的GET方法表示get、PUT方法表示set、DELETE方法表示delete。
 82             set $key $uri$args;   #用$uri和$args等Nginx内置变量设定缓存key规则
 83             srcache_fetch GET /memc $key;
 84             srcache_store PUT /memc $key;   #srcache_fetch_skip和srcache_fetch_skip,这两个指令接受一个参数,当参数已定义且非0时,则进行相应操作,否则不进行。
 85             root           html;
 86             fastcgi_pass   127.0.0.1:9000;
 87             fastcgi_index  index.php;
 88         #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name    ;
 89             include        fastcgi.conf;
 90         }
 91 
[root@server1 conf]# /usr/local/lnmp/openresty/nginx/sbin/nginx -t
[root@server1 conf]# /usr/local/lnmp/openresty/nginx/sbin/nginx 
[root@server1 conf]# cd ..
[root@server1 nginx]# cd html/
[root@server1 html]# cp /usr/local/lnmp/nginx/html/example.php .
[root@server1 html]# cp /usr/local/lnmp/nginx/html/index.php .

物理机检测

ab -c 10 -n 1000 http://172.25.61.5/index.php

这里写图片描述

ab -c 10 -n 1000 http://172.25.61.5/example.php

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值