年前做了一个项目,但是中间公司做了一次数据迁移,然后就http500了,搜寻nginx 错误日志 没有报错,我去,这怎么搞?
打开access.log 发现只有一个 500 的错误码,很蛋疼了。
首先排查nginx的配置,一行一行的瞅,也没有发现哪里有错,接下来,难道是代码的问题?把代码从线上拉下来,运行,没问题,一切都很顺畅。这是什么鬼?实在摸不着头脑,喝口水,压压惊,从头开始捋。
1.项目是迁移服务器之后才出现的500,那证明项目本身没有问题
2。服务器上其他项目都是没问题的 只有这个不行,说明,这个项目的一些程序需要服务器的某些支持,有可能服务器的配置少了一些什么
既然有了思路,就开始整
一步一步调试代码,发现在初始化数据库程序的时候,连接不上数据库,
喏,就是这个 connect();
一万只草泥马在奔腾,数据库怎么会连接不上?
把线下的代码改成线上的数据库配置,能连接上,大概明白了。
于是,写了一个phpinfo 查看线上的php 我去, 只有pdo_mysql 没装mysql模块,
大爷的!!!!
由于我用的是php7 所以需要用mysqli,
好了,闲话不说,
上操作
用指令可以 ps -ef | grep mysql可以查看到mysql相关配置
[root@localhost /]# ps -ef | grep mysql
由上面指令我们知道mysql对应的安装目录就是 --basedir=/usr
[root@localhost /]# cd /home/php-7.0.33/mysqli/
/home/php-7.0.33/ext/mysqli
由于之前一直尝试不成功,所以先进行make clean
[root@localhost mysqli]#make clean
运行phpize指令
[root@localhost mysqli]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20151012
Zend Module Api No: 20151012
Zend Extension Api No: 320151012
顺利完成。
运行./configure
[root@cqs mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config -with-mysqli=/usr/bin/mysql_config
提示报错信息:
mysql_config not found
configure: error: Please reinstall the mysql distribution
我去,没有这个目录?
[root@localhost mysqli]# whereis mysql_config
mysql_config:
空的?????
好吧,无语了。
[root@localhost mysqli]# yum install mysql-devel
......此处省略安装信息
使用 rpm -qa|grep mysql查看mysql的安装情况
[root@localhost mysqli]# rpm -qa|grep mysql
。。。。。。这里也省略
安装成功后,
[root@localhost mysqli]# whereis mysql_config
mysql_config: /usr/bin/mysql_config /usr/share/man/man1/mysql_config.1.gz
查看mysql_float_to_double.h这个文件并不存在于mysqli目录下,所以接下来就是要把同级目录的mysqlnd下的mysql_float_to_double.h复制过来,
[root@localhost mysqli]# cd /home/cqs/source/php-7.0.1/ext/mysqli/
[root@localhost mysqli]# mkdir ext
[root@localhost mysqli]# cd ext/
[root@localhost ext]# mkdir mysqlnd
[root@localhost ext]# cd mysqlnd/
[root@localhost mysqlnd]# cp /home/cqs/source/php-7.0.1/ext/mysqlnd/mysql_float_to_double.h mysql_float_to_double.h
[root@localhost mysqlnd]# ls
mysql_float_to_double.h
成功复制文件后再次回到mysqli目录下,
执行configure
[root@localhost mysqli]# ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli=/usr/bin/mysql_config
creating libtool
appending configuration tag "CXX" to libtool
configure: creating ./config.status
config.status: creating config.h
真的没问题了,接下来运行make指令
[root@localhost mysqli]# make
Build complete.
Don't forget to run 'make test'.
[root@localhost mysqli]# make test
Build complete.
[root@localhost mysqli]# make install
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
Installing header files: /usr/local/php/include/php/
成功安装了,进入到对应目录查看:
[root@localhost bin]# cd /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
[root@localhost no-debug-zts-20151012]# ls
curl.so my_module.so mysqli.so opcache.so pdo_mysql.so zip.so
mysqli.so就是对应的扩展,再把它添加到对应的php.ini文件
extension= /usr/local/php/lib/php/extensions/no-debug-zts-20151012/mysqli.so
保存,重启fpm
[root@localhost lib]# ps aux | grep php-fpm
[root@localhost lib]# kill -USR2 主进程号
浏览器运行phpinfo文件,查看到该模块mysqli已经加载
总结,mysqli目录下没有那个mysql_float_to_double.h文件 一定要复制
/home/php-7.0.33/ext/mysqlnd/mysql_float_to_double.h
到
/home/php-7.0.33/ext/mysqli/ext/mysqlnd/mysql_float_to_double.h
php在已安装的情况增加扩展步骤:如下
进入对安装扩展的目录,
[root@localhost lib]# cd /home/php-7.0.33/ext/
再进入对应的扩展目录
[root@localhost lib]# cd xx
[root@localhost xx]# /usr/local/php/bin/phpize
加载php已有的配置目录,再加上要安装的扩展,--with-xx=xx.path
[root@localhost xx]#./configure --with-php-config=/usr/local/php/bin/php-config --with-xx=xx.path(如--with-mysqli=/usr/bin/mysql_config)
[root@localhost xx]#make
[root@localhost xx]#make install
完成后进入到对应目录,查看产生的xx.so
[root@cqs xx]# cd /usr/local/php/lib/php/extensions/no-debug-zts-20151012/
xx.so
最后一步把这个xx.so添加到php.ini文件,重启服务器即可生效。
extension=xx.so
参考:https://blog.csdn.net/qiufengwuqing123/article/details/53707008
上云就上阿里云,服务器低至89元/年