CentOS6.9编译安装LNMP环境
今天尝试一下用编译的方式来搭建lnmp运行环境。所有软件都采用当前最新版本,除了CentOS。这是由于目前企业大多数应该都还在使用CentOS6的缘故,并且CentOS7目前还在迭代中。虽说不会有大的改动,但也算不上完全稳定下来吧。
那么开始吧,这次也是边装边写的方式。
运行环境和软件版本
CentOS是运行在Virtual Box虚拟机上的 CentOS 6.9 x86_64 minimal 版本。宿主机是Windows10家庭普通版64位,这一点关系不大,姑且说明一下。在安装好系统后依次运行了 yum update yum groupinstall "development tools" yum install vim yum install wget 来更新系统、安装开发者环境包、安装vim和wget。
Nginx、PHP、MySQL使用当前最新版本的 nginx-1.12.0 php-7.1.4 mysql-5.7.18 。
安装步骤
1.下载要安装的软件包
我这里是直接在虚拟机上用wget工具下载,命令如下:
1 wget http://nginx.org/download/nginx-1.12.0.tar.gz -O /usr/local/src/nginx-1.12.0.tar.gz
1 wget http://am1.php.net/distributions/php-7.1.4.tar.gz -O /usr/local/src/php-7.1.4.tar.gz
1 wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.18.tar.gz -O /usr/local/src/mysql-boost-5.7.18.tar.gz
当然你也可以在其它地方下载好再传到虚拟机上,随意。
注意文件访问权限,有些文件夹非root用户是不能访问的。还有,之所以选择mysql-boost-5.7.18.tar.gz这个安装包是因为mysql5.7编译安装需要用到boost,所以干脆选择了带boost的版本。虽然我也不太明白boost是个啥,好像是编译器的一种?
下载完毕:
接下来就开始编译安装了。
2.编译安装Nginx
就先从nginx开始吧。首先解压:
1 tar -zxv -f /usr/local/src/nginx-1.12.0.tar.gz -C /usr/local/src/
解压完成:
然后进入解压目录:
1 cd /usr/local/src/nginx-1.12.0
通过 ls 命令可以查看解压结果里包含了哪些文件。通过 ./configure --help | less 命令查看编译选项,按 q 退出。
不过我这里只会安装 --with-http_ssl_module 、 --with-http_stub_status_module 、 --with-http_auth_request_module 、 --with-http_perl_module 、 --with-mail 、 --with-stream 、 --with-pcre 这几个模块。
安装模块需要环境的支持,考虑到我之前已经安装了development tools,应该没问题的。如果缺的话,报错了再补。
然后,需要创建nginx运行账号和nginx安装目录,命令如下:
1 useradd nginx -s /sbin/nologin -M 2 mkdir /usr/local/nginx-1.12.0
可以通过 cat /etc/passwd 和 ls /usr/local 查看创建的账号和目录。
接下来执行预编译脚本,如下:
1 ./configure \ 2 --prefix=/usr/local/nginx-1.12.0 \ 3 --user=nginx \ 4 --group=nginx \ 5 --with-select_module \ 6 --with-poll_module \ 7 --with-http_ssl_module \ 8 --with-http_stub_status_module \ 9 --with-http_auth_request_module \ 10 --with-http_perl_module \ 11 --with-mail \ 12 --with-stream \ 13 --with-pcre
然后报错了:
1 ./configure: error: the HTTP rewrite module requires the PCRE library. 2 You can either disable the module by using --without-http_rewrite_module 3 option, or install the PCRE library into the system, or build the PCRE library 4 statically from the source with nginx by using --with-pcre=<path> option.
看来是缺少pcre支持,那么补上: yum install pcre-devel pcre-static ,然后再执行一次。
这次是缺少openssl:
1 ./configure: error: SSL modules require the OpenSSL library. 2 You can either do not enable the modules, or install the OpenSSL library 3 into the system, or build the OpenSSL library statically from the source 4 with nginx by using --with-openssl=<path> option.
执行 yum install openssl-devel openssl-perl openssl-static ,然后再执行一次。
又又报错了:
1 checking for perl 2 + perl version: v5.10.1 (*) built for x86_64-linux-thread-multi 3 Can't locate ExtUtils/Embed.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .). 4 BEGIN failed--compilation aborted. 5 6 ./configure: error: perl module ExtUtils::Embed is required
好像又是少了什么东西,搜索了一下,大概是要装这个: yum install perl-ExtUtils-Embed 。那么,再再执行一次吧。
这次没报错,执行预编译脚本成功。
可以编译安装了,分别执行 make 和 make install 吧。
等执行完毕,用 ls /usr/local/nginx-1.12.0 命令可以看到安装目录下有文件生成,接下来执行nginx命令查看是否成功安装。
执行 /usr/local/nginx-1.12.0/sbin/nginx -t ,结果如下:
说明安装成功。接着执行 /usr/local/nginx-1.12.0/sbin/nginx 就可以启动nginx服务。
执行 curl http://localhost 可以看到如下结果:
默认的主页html文件内容被获取了,说明服务确实成功启动。
为了不影响接下来的操作,执行 /usr/local/nginx-1.12.0/sbin/nginx -s quit 关闭nginx服务。
接下来安装PHP。
3.编译安装PHP
先解压: tar -zxv -f /usr/local/src/php-7.1.4.tar.gz -C /usr/local/src/ 。
创建安装目录: mkdir /usr/local/php-7.1.4 。
进入安装包目录: cd /usr/local/src/php-7.1.4 ,可以通过执行预编译脚本 ./configure --help | less 来查看有哪些安装选项。
可以看到php的安装选项众多,扩展数量多也是php的强大之处。
考虑到常用的功能和特性,还有php可以在安装后安装扩展,现在还是尽可能少的选择安装选项吧。
1 ./configure \ 2 --prefix=/usr/local/php-7.1.4 \ 3 --enable-fpm \ 4 --with-fpm-user=nginx \ 5 --with-fpm-group=nginx \ 6 --with-mysqli \ 7 --with-pdo-mysql \ 8 --with-zlib \ 9 --with-gd \ 10 --with-curl \ 11 --with-mcrypt \ 12 --enable-mbstring \ 13 --enable-soap \ 14 --enable-zip \ 15 --enable-ftp \ 16 --with-openssl
稍微查了一下,暂且按上述选项编译吧。
报错了:
1 configure: error: xml2-config not found. Please check your libxml2 installation.
望文生义貌似是libxmls的缺少造成的。那么执行 yum install libxml2 libxml2-devel libxml2-static 补上我猜可能必要的开发环境。然后接着执行上述的预编译脚本。
又报错了:
1 configure: error: Please reinstall the libcurl distribution - 2 easy.h should be in <curl-dir>/include/curl/
这次是libcurl,补上 yum install libcurl libcurl-devel ,再来。
又又报错了:
1 checking for GD support... yes 2 checking for the location of libwebp... no 3 checking for the location of libjpeg... no 4 checking for the location of libpng... no 5 checking for the location of libXpm... no 6 checking for FreeType 2... no 7 checking whether to enable truetype string function in GD... no 8 checking whether to enable JIS-mapped Japanese font support in GD... no 9 If configure fails try --with-webp-dir=<DIR> 10 If configure fails try --with-jpeg-dir=<DIR> 11 configure: error: png.h not found.
这次是和GD库又关,因为是和图像处理有关的扩展,所以jpeg、png、gif等图像开发环境是必要的。
但是我想尽可能少安装,所以先试试 yum install gd gd-devel 。然后执行预编译脚本。
gd库的检测通过了,但是出现了新的错误:
1 configure: error: mcrypt.h not found. Please reinstall libmcrypt.
这次是mcrypt库的问题,问题是CentOS6.9的yum库已经不支持mcrypt的安装,改用gcrypt了。没办法,自己下载吧。
根据php的官方文档:
需求
这些函数需要使用 » mcrypt 库。 请从 » http://mcrypt.sourceforge.net/ 下载 libmcrypt-x.x.tar.gz, 并按以下指导完成安装。
从 PHP 5.0.0 开始,你需要使用 libcrypt 2.5.6 或更高版本。
PHP 5.2 的 Windows 二进制发行版中已经包含了本库。 PHP 5.3 的 Windows 二进制发行版中开始使用 MCrypt 静态库, 所以不再需要 DLL。
如果使用 libmcrypt 2.4.x 或更高版本链接编译 PHP,支持以下附加的分组加密算法: CAST,LOKI97,RIJNDAEL,SAFERPLUS,SERPENT, 以及以下流密码:ENIGMA(加密), PANAMA,RC4 和 WAKE。 如果使用 libmcrypt 2.4.x 或更高版本,那么还支持 nOFB 密码模式。
可以知道php所需要的mcrypt库的下载地址和安装方法,照做就可以了。
先下载 wget https://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz -O /usr/local/src/libmcrypt-2.5.8.tar.gz ,然后解压 tar -zxv -f /usr/local/src/libmcrypt-2.5.8.tar.gz -C /usr/local/src/ ,创建安装目录 mkdir /usr/local/libmcrypt-2.5.8 ,进入解压生成的目录 cd /usr/local/src/libmcrypt-2.5.8 ,执行预编译脚本 ./configure --prefix=/usr/local/libmcrypt-2.5.8 ,编译和安装 make && make install 。到此,libmcrypt的安装就完成了。接着进入php安装包解压生成的目录执行php的预编译脚本。
执行后发现还是报和之前一样的错误,可能是安装libmcrypt时自定义了安装路径的原因。这里需要修改一下php的预编译脚本的编译选项:
1 ./configure \ 2 --prefix=/usr/local/php-7.1.4 \ 3 --enable-fpm \ 4 --with-fpm-user=nginx \ 5 --with-fpm-group=nginx \ 6 --with-mysqli \ 7 --with-pdo-mysql \ 8 --with-zlib \ 9 --with-gd \ 10 --with-curl \ 11 --with-mcrypt=/usr/local/libmcrypt-2.5.8 \ 12 --enable-mbstring \ 13 --enable-soap \ 14 --enable-zip \ 15 --enable-ftp \ 16 --with-openssl
注意第11行, --with-mcrypt 选项指明了安装路径。再次执行php的预编译脚本,这次没有报错,执行成功。
接着只要依次执行 make 和 make install 就可以了,当然也可以放在一起执行 make && make install 。
一般在编译和安装的过程中是不会出什么问题,我也从来没在这出过问题,所以也没有解决的经验。
然后就是简单配置一下看看能不能用。
根据预编译选项 --prefix 和帮助信息,得知php.ini文件应该放在[PREFIX]/lib目录下。那么我们就在该目录下生成一个配置文件吧: cp /usr/local/src/php-7.1.4/php.ini-development /usr/local/php-7.1.4/lib/php.ini 。我记得不用改什么吧。
然后是php-fpm。首先 cp /usr/local/php-7.1.4/etc/php-fpm.conf.default /usr/local/php-7.1.4/etc/php-fpm.conf ,大概看了一下,还需要 cp /usr/local/php-7.1.4/etc/php-fpm.d/www.conf.default /usr/local/php-7.1.4/etc/php-fpm.d/www.conf 。内容不用改,反正是试运行。
还需要配置一下nginx并启动,执行 vim /usr/local/nginx-1.12.0/conf/nginx.conf :
将65行至71行的注释去掉,并将69行的内容按上图改动,接着保存退出。
生成一个测试用的php脚本 vim /usr/local/nginx-1.12.0/html/index.php :
注意文件位置。
启动nginx服务: /usr/local/nginx-1.12.0/sbin/nginx 。或者在启动前检查一下配置文件是否出错: /usr/local/nginx-1.12.0/sbin/nginx -t 。
启动php-fpm: /usr/local/php-7.1.4/sbin/php-fpm 。
关闭iptables: service iptables stop 。
然后在宿主机的浏览器内输入 http://192.168.31.222/index.php 。前面的ip地址因人而异,可以通过 ifconfig 命令查看。显示如下页面说明成功了:
可以通过 ps -aux | grep "php-fpm" 命令查看php-fpm的主进程号,然后通过 kill -quit 2505 来关闭服务。注意这个2505是我的虚拟机上运行的php-fpm的主进程号,这个号码一般都是不同的。
4.编译安装MySQL
5.7版本的MySQL编译和初始化都挺麻烦的,尤其是要自定义安装路径和选项。走到这一步我也不确定能否顺利安装好,姑且按照文档走一步算一步吧。
通过文档的2.9 Installing MySQL from Source这一章节可以知道,cmake工具在编译时是必要的。此外,还需要安装boost。如果安装的是development source tree这一版本,还需要安装git和bison。
那么先准备安装环境吧。执行 yum install cmake 来安装cmake。虽然不知道development source tree是什么,但是为了以防万一还是把git和bison也装上吧: yum install bison git 。
解压安装包: tar -zxv -f /usr/local/src/mysql-boost-5.7.18.tar.gz -C /usr/local/src/ 。通过 ls /usr/local/src/mysql-5.7.18/ 命令可以看到解压生成的目录中附带了boost。
一层层的看进去发现并不是安装文件,更像是已经安装好的文件,那我们就不用再安装boost了。反正根据文档,boost只是在编译的时候用到。
那么现在查看文档看看安装的步骤吧。
首先要创建MySQL服务运行时的账户 useradd mysql -s /sbin/nologin -M 。然后创建安装目录 mkdir /usr/local/mysql-5.7.18 。
接着进入解压生成的目录 cd /usr/local/src/mysql-5.7.18/ 。可以通过 ls 命令查看目录下的文件。还可以通过 cmake . -LAH | less 来查看帮助和安装选项。
发现通过上述命令获取的帮助信息不好懂且没有调理,还是得看文档2.9.4 MySQL Source-Configuration Options。研究了一下,编译选项如下:
1 cmake . \ 2 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 \ 3 -DWITH_BOOST=/usr/local/src/mysql-5.7.18/boost
打算偷个懒,就这样预编译试试看吧。
啊,报错了:
1 -- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) 2 CMake Error at cmake/readline.cmake:64 (MESSAGE): 3 Curses library not found. Please install appropriate package, 4 5 remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. 6 Call Stack (most recent call first): 7 cmake/readline.cmake:107 (FIND_CURSES) 8 cmake/readline.cmake:197 (MYSQL_USE_BUNDLED_EDITLINE) 9 CMakeLists.txt:488 (MYSQL_CHECK_EDITLINE) 10 11 12 -- Configuring incomplete, errors occurred! 13 See also "/usr/local/src/mysql-5.7.18/CMakeFiles/CMakeOutput.log". 14 See also "/usr/local/src/mysql-5.7.18/CMakeFiles/CMakeError.log".
查了一下,好像是缺ncurses组件。那就补上吧: yum install ncurses ncurses-devel ncurses-libs ncurses-static 。之后再次执行预编译。
再次执行却以更快的速度报一样的错,仔细一看原来少执行了一步操作: remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel. 。好吧,删掉目录下的CMakeCache.txt文件 rm CMakeCache.txt ,然后再次执行。
这次顺利预编译完了:
接下来依次执行 make 和 make install 就行了。
编译的过程相当之慢,我去做其他事情好了。
编译过程中报了这个错误,不知道有什么影响没有。话说这和boost有关吧?难道是我的boost没好好安装的原因?
阿西吧,终于编译完了,中间我洗了个澡还看了集动漫。接着执行 make install 。
我擦,报错了:
1 CMake Error at libmysqld/examples/cmake_install.cmake:44 (FILE): 2 file INSTALL cannot copy file 3 "/usr/local/src/mysql-5.7.18/libmysqld/examples/CMakeFiles/CMakeRelink.dir/mysql_client_test_embedded" 4 to "/usr/local/mysql-5.7.18/bin/mysql_client_test_embedded". 5 Call Stack (most recent call first): 6 cmake_install.cmake:122 (INCLUDE) 7 8 9 make: *** [install] Error 1
算了算了,时间不早了。先睡觉,明天再说吧。
我回来了。
查了一下,上述错误是由缺少gcc和gcc-c++引起的,那就干脆补上所有有关的: yum install gcc gcc-c++ gcc-java gcc-gnat libgcc compat-gcc-34 compat-gcc-34-c++ compat-gcc-34-g77 gcc-objc gcc-objc++ 。
我勒个擦,虚拟机的硬盘满了:
1 Running rpm_check_debug 2 Running Transaction Test 3 4 5 Transaction Check Error: 6 installing package gcc-objc-4.4.7-18.el6.x86_64 needs 11MB on the /usr filesystem 7 installing package ecj-1:4.5.2-3.el6.x86_64 needs 21MB on the /usr filesystem 8 installing package libgnat-devel-4.4.7-18.el6.x86_64 needs 46MB on the /usr filesystem 9 installing package libgnat-4.4.7-18.el6.x86_64 needs 50MB on the /usr filesystem 10 installing package gcc-gnat-4.4.7-18.el6.x86_64 needs 73MB on the /usr filesystem 11 installing package jpackage-utils-0:1.7.5-3.16.el6.noarch needs 73MB on the /usr filesystem 12 installing package compat-gcc-34-c++-3.4.6-19.el6.x86_64 needs 162MB on the /usr filesystem 13 installing package gcc-java-4.4.7-18.el6.x86_64 needs 172MB on the /usr filesystem 14 installing package compat-gcc-34-3.4.6-19.el6.x86_64 needs 185MB on the /usr filesystem 15 installing package compat-libf2c-34-3.4.6-19.el6.x86_64 needs 185MB on the /usr filesystem 16 installing package libgcj-devel-4.4.7-18.el6.x86_64 needs 203MB on the /usr filesystem 17 installing package gcc-objc++-4.4.7-18.el6.x86_64 needs 213MB on the /usr filesystem 18 installing package java_cup-1:0.10k-5.el6.x86_64 needs 214MB on the /usr filesystem 19 installing package compat-gcc-34-g77-3.4.6-19.el6.x86_64 needs 220MB on the /usr filesystem 20 installing package sinjdoc-0.5-9.1.el6.x86_64 needs 223MB on the /usr filesystem 21 installing package libobjc-4.4.7-18.el6.x86_64 needs 223MB on the /usr filesystem 22 installing package java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64 needs 223MB on the /usr filesystem 23 24 Error Summary 25 ------------- 26 Disk Requirements: 27 At least 223MB more space needed on the /usr filesystem.
这叫老夫如何是好,网上查查怎么加硬盘或者重新分区之类的吧。实在不行只能重装了。
网上看了看,可能要用到fdisk和Virtual Box Manager。我都不太熟而且好麻烦QAQ,算了算了,重装一个虚拟机吧orz
这次分30G给/usr/local,总没问题了吧。
等等等等,仔细看了一下,发现容量都是被下载的软件包和解压包给占据了,只要把它们删掉就好。
总之,删掉就好了。
啊~不用重装了,被救赎。
继续吧,运行 yum install gcc gcc-c++ gcc-java gcc-gnat libgcc compat-gcc-34 compat-gcc-34-c++ compat-gcc-34-g77 gcc-objc gcc-objc++ 。
考虑到之前编译MySQL的过程中好像报了boost相关的warning,决定还是老老实实的安装boost吧。
首先下载安装包:
1 wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.18.tar.gz -O /usr/local/src/mysql-5.7.18.tar.gz
1 wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz -O /usr/local/src/boost_1_59_0.tar.gz
这次换不带boost的MySQL版本,然后按文档里说的,boost必须是1.59版本。
用wget下载boost实在太慢了,最后我上了迅雷,下载好后传到了虚拟机上。
解压boost tar -zxv -f /usr/local/src/boost_1_59_0.tar.gz -C /usr/local/src/ 。创建安装目录 mkdir /usr/local/boost-1.59.0 。进入解压生成的目录 cd /usr/local/src/boost-1.59.0 。执行预编译脚本 ./bootstrap.sh --prefix=/usr/local/boost-1.59.0 。然后执行 ./b2 ,这一步必较久,等着吧。报了一些看不懂的错误,查了一下还要安装依赖什么的,那就装上吧 yum install gcc gcc-c++ bzip2 bzip2-libs bzip2-devel python python-devel 。删掉解压的目录前面的步骤再执行一次。接着执行 ./b2 install 就ok了。
接下来重新编译安装MySQL。
删除之前的安装生成文件 rm -rf /usr/local/mysql-5.7.18/* 。解压新的安装文件 tar -zxv -f /usr/local/src/mysql-5.7.18.tar.gz -C /usr/local/src/ 。进入解压生成的目录 cd /usr/local/src/mysql-5.7.18 。执行预编译命令 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 -DWITH_BOOST=/usr/local/boost-1.59.0 。
啊,报错了:
1 CMake Error at cmake/boost.cmake:81 (MESSAGE): 2 You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory> 3 4 This CMake script will look for boost in <directory>. If it is not there, 5 it will download and unpack it (in that directory) for you. 6 7 If you are inside a firewall, you may need to use an http proxy: 8 9 export http_proxy=http://example.com:80 10 11 Call Stack (most recent call first): 12 cmake/boost.cmake:167 (COULD_NOT_FIND_BOOST) 13 CMakeLists.txt:460 (INCLUDE) 14 15 16 -- Configuring incomplete, errors occurred! 17 See also "/usr/local/src/mysql-5.7.18/CMakeFiles/CMakeOutput.log". 18 See also "/usr/local/src/mysql-5.7.18/CMakeFiles/CMakeError.log".
想想应该是预编译时boost的包含路径有问题,应该包含安装生成文件里的include目录。那么,依次执行 rm CMakeCache.txt 和 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.18 -DWITH_BOOST=/usr/local/boost-1.59.0/include 。
结果ok。接下来执行 make 和 make install 就可以了。
漫长的等待过程,去干点别的吧。
终...终于好了。
接下来就是初始化了。
按照文档,要先修改安装目录和文件所属组和所属用户 chgrp -R mysql /usr/local/mysql-5.7.18 chown -R mysql /usr/local/mysql-5.7.18 。
接下来创建一个放数据库文件、socket文件、pid文件和配置文件的目录,就放在/var目录下好了
1 mkdir /var/local/mysql-5.7.18 2 mkdir /var/local/mysql-5.7.18/data 3 mkdir /var/local/mysql-5.7.18/run 4 mkdir /var/local/mysql-5.7.18/log 5 mkdir /var/local/mysql-5.7.18/etc
生成一个配置文件 vim /var/local/mysql-5.7.18/etc/my.cnf ,内容为:
[client] port=3306 socket=/var/local/mysql-5.7.18/run/mysql.sock[mysql] no-auto-rehash[mysqld] basedir=/usr/local/mysql-5.7.18 datadir=/var/local/mysql-5.7.18/data user=mysql port=3306 socket=/var/local/mysql-5.7.18/run/mysql.sock pid-file=/var/local/mysql-5.7.18/run/mysql.pid
网上抄来的,似懂非懂。
把上述目录和文件都修改所属 chgrp -R mysql /var/local/mysql-5.7.18 chown -R mysql /var/local/mysql-5.7.18 。
然后执行初始化命令:
1 /usr/local/mysql-5.7.18/bin/mysqld \ 2 --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf \ 3 --initialize \ 4 --character_set_server=utf8 \ 5 --collation_server=utf8_general_ci
虽然报了一些看不懂的警告,但是初始化好像是成功了,还生成了随机密码:
1 2017-04-24T10:27:35.480795Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2 2017-04-24T10:27:36.378470Z 0 [Warning] InnoDB: New log files created, LSN=45790 3 2017-04-24T10:27:36.557201Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 4 2017-04-24T10:27:36.666538Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: a2c08f2f-28d8-11e7-b53a-08002728b6d3. 5 2017-04-24T10:27:36.673556Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 6 2017-04-24T10:27:36.676216Z 1 [Note] A temporary password is generated for root@localhost: jyJoLj>9G_!-
接下来试着启动服务 /usr/local/mysql-5.7.18/bin/mysqld --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf & ,按 Ctrl + C 退出控制台占用,执行 /usr/local/mysql-5.7.18/bin/mysql --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf -u root -p ,之后要输入密码。后面的密码来自之前初始化后成功的提示的最后一行。
5.8版本规定进入MySQL后并不能执行任何操作,必须先改密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 。且密码必须大于8位,包含字符数字字母,真是烦死了。
如图,终于成功了。接下来可以执行 exit 退出。再接着可以执行 /usr/local/mysql-5.7.18/bin/mysqladmin --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf shutdown -u root -p 后输入密码来结束服务。
至此,MySQL5.7.18终于他喵的装好了。
5.测试Nginx、PHP和MySQL协同工作
接下来就是让这三个软件协同工作,成为一个可以跑php代码的环境。
首先启动所有服务:
1 /usr/local/nginx-1.12.0/sbin/nginx 2 /usr/local/php-7.1.4/sbin/php-fpm 3 /usr/local/mysql-5.7.18/bin/mysqld --defaults-file=/var/local/mysql-5.7.18/etc/my.cnf &
记得关闭iptables服务 service iptables stop 。
在数据库中创建一个test数据库。
创建一个测试用的PHP脚本 vim /usr/local/nginx-1.12.0/html/mysql.php vim /usr/local/nginx-1.12.0/html/mysql.php ,其内容为:
1 <?php 2 echo "hello world"; 3 echo "<br>"; 4 echo "MySQLi<br>"; 5 $mysqli=new mysqli("127.0.0.1","root",'!@#123qwe',"test"); 6 if($mysqli->connect_error){ 7 echo "数据库连接失败!"; 8 }else{ 9 echo "数据库连接成功!"; 10 } 11 echo "<br>"; 12 echo "PDO<br>"; 13 try{ 14 $dbc=new PDO("mysql:host=127.0.0.1;dbname=test","root","!@#123qwe"); 15 }catch(PDOExtension $e){ 16 echo "数据库连接失败:".$e->getMessage(); 17 } 18 echo "数据库连接成功!"; 19 ?>
然后访问这个脚本 http://192.168.31.222/mysql.php ,结果如下:
OK~没有问题~
总结
一步步操作下来,发现环境搭配对萌新来说一点都不友好。所以我觉得志不在运维的同学还是用集成环境吧,那个多省事的。
还有半吊子就不要参与运维了,会给人添麻烦的。
这还只是配了个能跑的环境,还没考虑性能的优化,MySQL主从这些蛋疼的东西。所以运维还是得交给专业的来。
有空的话多学学MySQL,很有必要。