文章大纲

centos8安装php7.2和mysql8的踩坑经历

2020-08-03 23:52:23

前些天常常加班,阿里云服务器过期了,博客一直还没来得及迁移。


昨天才开始重新部署环境,centos版本、php版本、mysql版本都有更换,安装过程坑太多了,这就是IT工作的劣势,技术经验如果不跟上更新步伐,经验就不再是经验了。


下面就开始详细描述踩的哪些坑。


新服务器系统环境(用cat /etc/redhat-release命令查看):

CentOS Linux release 8.1.1911 (Core)


1.安装Nginx

centos8支持yum安装nginx,所以nginx安装很方便,没啥坑。

yum -y install nginx


2. 安装php-fpm

php-fpm是管理php进程的东东,不知道多久以前php和php-fpm是要分开安装的,但是现在编译php,带上--enable-fpm参数就可以在安装php的同时,把php-fpm也给安装进去。


昨天试了,centos8也可以直接yum来安装php了。但是不带mysqli扩展。本人博客数据库采用的mysqli驱动,所以只好另外去下载php源码包了。


下载php源码的位置,戳这里:https://www.php.net/downloads


先安装了7.4版本,结果php -v 和 网页执行php脚本里phpinfo看到的版本号不一致,这种问题之前在windows环境下安装也碰到过,但是处理方法并不一致。


Windows下是phpinfo版本显示正确,php -v显示版本不一致是因为环境变量里引入的php路径是其它php版本的,所以改下环境变量里php路径就好了。


现在Centos系统下php -v里我们可以把/usr/local/php软链到我们7.4版本下的php,但是网页访问phpinfo却始终不是7.4版本,还是yum安装的7.2版本。


php版本有两种,Nginx是如何判断采用的哪一种php版本呢?


一直陷入这个坑问题里。


后面才找到这个根本不是由Nginx来选择使用哪一个版本的。


前面说了,现在php都含有php-fpm, 想使用哪个版本php,就启动哪个php版本下对应的php-fpm服务。


安装好7.4版本php后,网站页面出现各种php方法被注释了的警告,额。。。看来php版本也不要说换就换啊。


只好又重新下载7.2版本的php源码了。


关于php源码编译安装,请参考这个链接,步骤更清楚:https://www.cnblogs.com/heijinli/articles/11715102.html


编译php之前,要先安装很多依赖:

yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ \ 
autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel \
krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake \
boost-devel bison automake libevent libevent-devel gd gd-devel libtool* \
libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel \
gmp gmp-devel libcurl libcurl-devel openjpeg-devel

上面这个是前人试错总结出来的。


可惜还是不够全面,在安装过程中,我还是遇到了很多错误提示。


提示1:configure: error: Package requirements (sqlite3 > 3.7.4)

解决:yum install sqlite-devel


提示2:Package requirements (libxml-2.0 >= 2.7.6)

这个是安装php7.4版本出现的问题。

解决:./configure 后带上--with-libxml2=/opt/libxml2 


提示3:configure: error: Package requirements (oniguruma)

oniguruma,百度了下,这玩意儿是php里正则要用到。之前还真没听过要为了正则安装这么个东东。

这个就是下载对应的源码,编译安装就好了,可参考这里:oniguruma编译安装


提示4:configure: error: Unable to detect ICU prefix or no failed. Please verify ICU install prefix and make sure icu-config works.

解决:yum -y install libicu-devel


提示5:configure: error: Cannot find ldap.h

解决:yum -y install openldap openldap-devel

这个上面依赖安装里有,但是不知道为何没有安装成功。这里只好重新装了。


提示6:libtool: link: `ext/hash/hash_adler32.lo' is not a valid libtool object

这是make时报的错。

解决:执行make clean后,再重新make。


3.安装mysql数据库

好像是执行的yum -y install mysql-community-server,具体细节大家可以百度。


安装好mysql8后,我要给root设置密码,可是mysql8却不再支持password方法了。


百度说用sha1方法,然后我就把authentication_string(mysql5.6版本时都用的password列名,不知道啥时给改了)变成sha1方法加密的字符串,然后就悲剧了,mysql登录不了了。


然后mysql5.6版本时,执行下面这个就好了:

mysqld skip-grant-tables


现在mysql8,却要执行下面这个:

mysqld --console --skip-grant-tables --shared-memory


另外开一个ssh会话窗口,用mysql直接无密登录,然后开始重置密码。

use mysql;
update user set authentication_string = '' where user='root' and host = 'localhost';
flush privileges;


然后重新mysql -uroot -p登录,不用密码就可以进去了。再执行下面命令来修改用户密码。

alter user root@localhost identified with mysql_native_password BY '新密码';
flush privileges;


现在mysql8还引入了caching_sha2_password加密方式,不知道是不是通过sha2方法加密的,这个以后再做了解和尝试。



4. 安装redis

开始下载的redis5版本的源码,编译报了下面错误提示:
fatal error: ext/standard/php_smart_str.h: No such file or directory

说是跟php7版本有冲突导致。


换成redis4版本,就ok了。

这里可以下载redis源码:http://download.redis.io/releases/





我要评论
评论列表