lnmp
####mysql###
注意:源码编译完mysql后,就不要再安装mariadb-server,不然源码的脚本会被覆盖掉
一 源码安装 mysql
使用cmake,make,make install命令,cmake的命令可以显示安装的进度的百分比
mysql 官网:www.mysql.com
软件包依赖性:
1 yum install -y gcc gcc-c++ make ncurses-devel cmake
2 tar zxf mysql-boost-5.7.17.tar.gz
3 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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all
**********************************************************************************************
#####参数说明##########
-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 存储引擎,要是不想安装,只要将1写成0即可
DWITH_INNOBASE_STORAGE_ENGINE=1#安装 innodb 存储引擎
-DDEFAULT_CHARSET=utf8#使用 utf8 字符
DDEFAULT_COLLATION=utf8_general_ci#校验字符
-DEXTRA_CHARSETS=all#安装所有扩展字符集
*************************************************************************************************
4 make && make install
5 groupadd -g 27 mysql###创建mysql组###
6 useradd -u 27 -g 27 -s /sbin/nologin -M -d /usr/local/lnmp/mysql/data mysql###创建mysql用户###
7 cp support-files/my-default.cnf /etc/my.cnf###在/etc/my.cnf文件下有datadir和socket的路径,与源码编译时的路径不符,所以要将/etc/my.cnf文件用源码编译产生的配置文件覆盖。####
8 vim ~/.bash_profile###将mysql的脚本文件路径写在该目录下,则执行脚本时更方便###
内容:PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
9 source ~/.bash_profile
10 cd /usr/local/lnmp/mysql/support-files/
11 cp mysql.server /etc/init.d/mysqld###在企业六的版本里,服务的启动和停止脚本文件一般都是放在/etc/init.d/目录下,所以将mysql服务的脚本文件放在该目录下,通过/etc/init.d/mysqld startr就可以启动mysql服务###
12 chown root.root . -R(当前路径:/usr/local/lnmp/mysql)
13 chown mysql data -R###将data的目录及目录下的文件的用户身份改成mysql###
14 mysqld --initialize --user=mysql###以mysql用户的身份进行mysql的初始化###
15 /etc/init.d/mysqld start
16 mysql -p
【过程:
[root@server1 mysql]# mysql -p
Enter password: ###使用初始化产生的临时密码###
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;###使用临时密码,没有权限查看mysql的内容,要进行初始化###
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql>
】
17 mysql_secure_installation###由于在源码编译时,有编译字符校验模块,所以当修该密码时,会询问是否要使用字符校验的功能###
【过程:
[root@server1 mysql]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
VALIDATE PASSWORD PLUGIN can be used to test passwords###询问是否要使用字符校验的功能###
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1###选择字符校验的级别###
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y###不能直接回车,不然会跳过该问题###
New password:
Re-enter new password:
(....省略)
】
编译的具体过程如下:
[root@server1 ~]# tar zxf mysql-boost-5.7.17.tar.gz
[root@server1 ~]# yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm
[root@server1 ~]# cd mysql-5.7.17/
[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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=al
(过程省略,主要看Error)
*****************************************************************************
CMake Error at cmake/boostNaNake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boostNaNake:238 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:455 (INCLUDE)
-- Configuring incomplete, errors occurred!
*******************************************************************************
由此可以看出缺少-DWITH_BOOST=<directory>
[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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=al -DWITH_BOOST=boost/boost_1_59_0/ ###指定-DWITH_BOOST=boost/boost_1_59_0/###
(过程省略,看Error)
*********************************************************************************
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage
CMake Error: Internal CMake error, TryCompile configure of cmake failed
(.....)
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readlineNaNake:107 (FIND_CURSES)
cmake/readlineNaNake:197 (MYSQL_USE_BUNDLED_EDITLINE)
CMakeLists.txt:483 (MYSQL_CHECK_EDITLINE)
*********************************************************************************
由CMAKE_CXX_COMPILER not set可以看出缺少c++编译器,还有要安装ncurses-devel
[root@server1 mysql-5.7.17]# yum install -y ncurses-devel gcc-c++
[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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=al -DWITH_BOOST=boost/boost_1_59_0/
(省略过程...看Error)
*****************************************************************************
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readlineNaNake:107 (FIND_CURSES)
cmake/readlineNaNake:197 (MYSQL_USE_BUNDLED_EDITLINE)
CMakeLists.txt:483 (MYSQL_CHECK_EDITLINE)
*****************************************************************************
由于ncurses-devel已经装过,(可用rpm -q ncurses-devel查看),因此是CMakeCache.txt文件的影响,cmake在编译的过程中,会产生缓存文件,当继续编译时,就会从刚才停下的地方继续编译,而刚才停下的地方就是出错的地方,因此要将该缓存文件删除
[root@server1 mysql-5.7.17]# 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 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=al -DWITH_BOOST=boost/boost_1_59_0/
###没有报错,编译成功####
[root@server1 mysql-5.7.17]# make && make install
测试:
登入mysql
[root@server1 data]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 5.7.17 Source distribution
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> exit
Bye
####php####
一源码编译php
php下载软件网址:php.net
tar jxf php-5.6.20.tar.bz2
cd php-5.6.20
1 编译:./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=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-gmp --with-gettext -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
**********************************************************************************
####参数说明######
--prefix=/usr/local/lnmp/php###指定安装目录###
--with-config-file-path=/usr/local/lnmp/php/etc###指定php主配置文件的位置###
--with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd###php如果要使用到mysql,可以通过调用外部的mysql模块,也可以使用php原身带有的数据库驱动mysqlnd,但是调用外部模块,内存需求量更大,性能也不高,而调用原身具有的mysqlnd模块,性能可以提高40%,因此建议使用原身的mysqlnd模块####
--with-openssl###加密###
--with-snmp###监控###
--with-gd --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-gmp###支持图片###
--with-zlib###网页压缩###
--with-gettext###支持文本###
--enable-soap###支持动态模块的加载,编译完后如果有想要再添加什么功能的模块,再添加,就不用重新编译####
--enable-fpm###支持fastcgi,fastcgi与cgi的区别在于fastcgi有后台进程,而cgi没有后台进程###
--with-mcrypt --with-mhash###网页加密###
****************************************************************************************
2 软件依赖性:取决于你编译时安装的模块的依赖性,此时的依赖软件有libmcrypt-2.5.8-9.el6.x86_64.rpm,libjpeg-turbo-devel-1.2.1-1.el6.x86_64,
net-snmp-devel,re2c-0.13.5-1.el6.x86_64.rpm,libxml2-devel ,curl-devel, jpeglib-devel,libpng-devel,freetype-devel,gmp-devel
3 make&&makeinstall
二 将nginx和php联系在一起
1 cd php-5.6.20
2 cp php.ini-production /usr/local/lnmp/php/etc/php.ini###将配置文件移到/usr/local/lnmp/php/etc/下,并且一定以要命名为php.ini
3 cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
4 chmod +x/etc/init.d/php-fpm
5 vim /usr/local/lnmp/php/etc/php.ini
内容:
date.timezone=Asia/Shanghai
6 cp /usr/local/lnmp/php/etc/php-fpm.conf.default /usr/local/lnmp/php/etc/php-fgm.conf
7 vim php-fpm.conf
内容:
pid = run/php-fgm.pid
8 /etc/init.d/php-fpm reload###使用的fastcgi,有后台进程,有自己的端口(:9000),因此可以直接reload###
9 vim ~/.bash_profile
内容:
PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/php/bin
10 source ~/.bash_profile
11 netstat-antlp | grep :9000
12 vim /usr/local/lnmp/nginx/conf/nginx.conf
内容:
location / {
root html;
index index.php index.html index.htm;
}
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
#fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
13 vim /usr/local/lnmp/nginx/html/index.php
内容:
<?php
phpinfo()
?>
测试:
访问172.25.78.1可以看到php的信息页
三 nginx+php+mysql
client -- > nginx将所有的php的处理转发 --- > php-fpm(端口号为9000) --- > php-mysqlnd --- > mysql:3306 --- > nginx --- > client
部署论坛
1 网上下载一个论坛的压缩包并解压
unzip Discuz_X3.2_SC_UTF8.zip
2 less readme/readme.txt###查看论坛部署的方法###
3 mv upload/ /usr/local/lnmp/nginx/html/bbs###readme.txt中写的要上传upload到服务器###
4 cd /usr/local/lnmp/nginx/html/bbs/
5 chmod 777 config/ uc_client/ data/ uc_server/ -R###安装过程要将目录权限开启###
安装过程会碰到该问题:
数据库连接错误:php不能连接到数据库
解决:
在php的配置文件里指定数据库socket的位置
vim /usr/local/lnmp/php/php.ini
内容:
**************************************************************
mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock
mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
**************************************************************
/etc/init.d/php-fpm reload
还会碰到由于权限而无法连接数据库:
Permission denied
解决:
chmod 755 /usr/local/lnmp/mysql/data/
###php功能模块的扩展###
client -- > nginx将所有的php的处理转发 --- > php-fpm(端口号为9000) --- > php-mysqlnd --- > mysql:3306 --- > nginx --- > client
memcache
它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的 Hash 表,能够用来存储各种格式的数据。可以类比于 MySQL 这样的服务,而 PHP 扩展的 Memcache 实际上是连接Memcache 的方式,一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态web应用的速度,提高可扩展性。
可通过php -m | grep memcached 查看是否有memcached模块,php -m显示所有的php编译的模块,如果没有就要通过phpize添加该功能模块。
phpize官方说明:是用来扩展php扩展模块的,通过phpize可以建立php的外挂模块。
******************************************************************************************
使用phpize扩展memcached模块的步骤:
1 下载网址 http://memcached.googlecode.com/
tar zxf memcache-2.2.5.tgz
2 cd memcache-2.2.5
3 phpize(我已经将路径加入到~/.bash_profile文件下,如果没有加入的要用绝对路径)
****************************************
可能出现的问题:
Cannot find config.m4.
解决:
是因为你没有cd到memcache-2.2.5目录下
***************************************
4 ./configure
5 make && make insall
6 vim /usr/local/lnmp/php/etc/php.ini
内容:(配置文件里有说明添加扩展模块怎么写,模仿着写)
extension=memcache.so
7 /etc/init.d/php-fpm reload
*******************************************************************************************
可能出现reload服务后仍然没有memcache的情况,这时要检查你使用的是系统带有的rpm包,还是源码编译的包,如果是系统的rpm包则要先把系统的包删除,然后就可以了
[root@server1 etc]# which php
/usr/bin/php
[root@server1 etc]# rpm -qa|grep php
php-cli-5.3.3-26.el6.x86_64
php-common-5.3.3-26.el6.x86_64
php-5.3.3-26.el6.x86_64
[root@server1 etc]# rpm -e `rpm -qa|grep php`
[root@server1 etc]# source ~/.bash_profile
[root@server1 etc]# which php
/usr/local/lnmp/php/bin/php
[root@server1 etc]# php -m |grep mem
memcache
******************************************************************************************
###往mecache里存信息###
[root@server1 ~]# telnet localhost 11211
Trying ::1...
Connected to localhost.
Escape character is '^]'.
set name 0 0 6###第二个0指不过期,如果是10,则指10后过期,6指的是存的字符数为6####
westos
STORED
get name
VALUE name 0 6
westos
END
delete name
DELETED
get name
END
###openresty###
nginx本身具有高并发的特点,如果将缓存放在php后面,则客户请求发给nginx,nginx给php-fpm处理,然后缓存到memcache上,则nginx就要等待php-fpm的处理结束,那么就会影响到ngnix本身的效率,但是,如果把memcache放在nginx之后,客户请求过来,如果缓存里有,就可以直接从memcache中取来发给客户端,而不用再等php-fpm,因此就不会影响到nginx的效率,将缓存放在nginx之后需要memc和srcache模块,此实验直接安装openresty做更方便。
openresty是一个全功能的web服务器。他打包了标准的nginx核心,很多的常用的第三方模块,以及他们大多数的依赖项。(来自官网)
vim /usr/local/openresty/nginx/conf/nginx.conf
内容:
upstream memcache {
server 127.0.0.1:11211;
keepalive 512;
}
location /memc {
internal;
memc_connect_timeout 100ms;
memc_send_timeout 100ms;
memc_read_timeout 100ms;
set $memc_key $query_string;
set $memc_exptime 300;
memc_pass memcache;
}
location ~ \.php$ {
set $key $uri$args;
srcache_fetch GET /memc $key;
srcache_store PUT /memc $key;
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
具体过程如下:
[root@server1 ~]# tar zxf openresty-1.11.2.3.tar.gz
[root@server1 ~]# cd openresty-1.11.2.3
[root@server1 openresty-1.11.2.3]# ls
bundle COPYRIGHT README.markdown util
configure patches README-win32.txt
[root@server1 openresty-1.11.2.3]# ./configure
[root@server1 openresty-1.11.2.3]# gmake && gmake install
[root@server1 openresty-1.11.2.3]# ls
build configure Makefile README.markdown util
bundle COPYRIGHT patches README-win32.txt
[root@server1 openresty-1.11.2.3]# cd /usr/local/openresty/
[root@server1 openresty]# ls
bin luajit lualib nginx pod resty.index site
[root@server1 openresty]# nginx -s stop
[root@server1 openresty]# cd nginx/
[root@server1 nginx]# ls
conf html logs sbin
[root@server1 nginx]# cd conf/
[root@server1 conf]# ls
fastcgi.conf koi-win scgi_params
fastcgi.conf.default mime.types scgi_params.default
fastcgi_params mime.types.default uwsgi_params
fastcgi_params.default nginx.conf uwsgi_params.default
koi-utf nginx.conf.default win-utf
[root@server1 conf]# vim nginx.conf
测试:
ab -c10 -n 50000 http://172.25.78.1/index.php