记一次在LAMP中遇到的问题

记一次在LAMP中遇到的问题

本文主要是为了记录在工作中遇到的常用软件的安装过程,方便以后遇到相同情形时可以快速的查阅。主要讲述了zookeeper, kafka的安装。

本文的操作系统采用的是CentOS,可以采用shell命令查阅:lsb_release -a.


平常都是用Java的,工作需要翻看一下php的代码,所以临时拿起LAMP(Linux+Apache+MySQL+PHP)来。在使用LAMP中遇到一些异常情况,首先从一个demo说起:

[11.php代码如下]

<?php 
date_default_timezone_set('Asia/Shanghai');
phpinfo();
$conn = mysql_connect("10.101.139.5", "root", "root") or die (mysql_error());
mysql_select_db("vdpcenter");
mysql_query('SET NAMES UTF8');

?>

这里面主要是在mysql_connect()方法运行时发生了如下异常:

[Wed Aug 24 09:09:57 2016] [error][client 10.101.48.252] PHP Fatal error: Call to undefined function mysql_connect() in /var/www/vdp/vdp-web/11.php on line 4.
...
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysql.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/mysqli.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/pdo_mysql.so' - libmysqlclient.so 16: Cannot open shared object file: No such file or directory in Unkown on line 0

看得出是应该是少库了,cd到/usr/lib64/目录下也没有找到php相关的文件夹,所以可以确定着一点。安装php时附带安装了很多的依赖包,至于少了哪个就省得查了,直接重装,无脑又高效。

这里需要查看一下已有安装的php相关的依赖包:

[root@hidden ~]#rpm -qa|grep php

可以看到:

这里需要一个一个的删除,比如:

[root@hidden ~]# rpm -e php-mysql-5.5.5-48.el6_8.x86_64

在删除的过程中会遇到删除失败,因为有依赖包的关系,需要先删除其所依赖的包,根据错误提示删除即可,最后删除全部之后,可以通过下面两个命令查看是否删除干净:

[root@hidden ~]#rpm -qa|grep php

[root@hidden ~]#php -v

之后开始安装,这里采用的是yum安装的方式(这里采用的是CentOS6的操作系统),如果是RedHat的Linux系统一般是不能采用yum安装的,需要另谋出路啦~

#yum  -y install php

#yum search php
#yum -y install php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc

这里一般是安装完成了,那么下面要测试一下是否安装成功,同样采用文章开头了那个11.php作为测试页面,将其放到/var/www/html下,之后启动apache服务(httpd): service httpd start。

在浏览器中输入:http://localhost/11.php。

是否有以下的画面出现:

有则说明php安装成功,革命尚未成功,同志仍需努力。这里还要继续测试其与mysql之间的连通性。

这里通过查看httpd的error日志(在/var/log/httpd/目录下的error_log,可以通过tail -f /var/log/httpd/error_log 实时打印error日志)来查看结果。

发现文章开头的问题没有了,但是又有了新的问题:

[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning:  mysql_connect(): Can't connect to MySQL server on '10.101.139.6' (13) in /var/www/vdp/vdp-web/11.php on line 6
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_select_db(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /var/www/vdp/vdp-web/11.php on line 7
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_select_db(): A link to the server could not be established in /var/www/vdp/vdp-web/11.php on line 7
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_query(): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /var/www/vdp/vdp-web/11.php on line 8
[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning: mysql_query(): A link to the server could not be established in /var/www/vdp/vdp-web/11.php on line 8

一步一步来,检查:在/etc/my.cnf中有/tmp/mysql.sock的配置,而且在/etc/php.ini中也配置了mysq.default_socket=/tmp/tmp.sock

解决1: 修改/etc/selinux/config文件

#vim /etc/selinux/config

将其中的SELINUX=enforcing修改为SELINUX=disabled,重启httpd服务

#service httpd restart

然后浏览11.php,查看到error_log只有一行错误了,如下:

[Wed Aug 24 09:55:42 2016] [error] [client 10.101.48.252] PHP Warning:  mysql_connect(): Can't connect to MySQL server on '10.101.139.6' (13) in /var/www/vdp/vdp-web/11.php on line 6

解决2:输入如下命令:

# setsebool httpd_can_network_connect_db 1
# setsebool -P httpd_can_network_connect 1(这个命令运行需要等待一小段时间)

之后再重启httpd服务,然后浏览测试网页11.php就不报任何错误了,这里就解决了问题了。

应用到真实环境中,可以正常运行。问题解决,over~


欢迎支持笔者的作品《深入理解Kafka: 核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客(ID: hiddenkafka)。
本文作者: 朱小厮

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×