文档章节

php使用mysqlnd引发的一些问题处理

mickelfeng
 mickelfeng
发布于 2015/10/15 13:27
字数 565
阅读 25
收藏 1

现在CentOS 5.11使用的仍是比较老旧的mysql 5.0.59 服务器版本,PHP也是使用的最高的也是5.3.3(使用yum -y install php53安装)。从官方看5.3的最后一个版本为5.3.29已经于2014年8月份停止支持,出现的一些bug及安全性问题将会得不到修复,因此我们决定将PHP的版本升级到5.5。在安装的时候我们使用

./configure --prefix=/data/php.5.5.26 --with-bz2 
--with-curl --enable-ftp --enable-sockets --disable-ipv6 
--with-gd  --with-iconv-dir=/data/libiconv --enable-mbstring 
--enable-calendar --with-gettext --with-zlib --with-mcrypt 
--with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd 
--with-mysql=mysqlnd --enable-dom --enable-xml --enable-fpm 
--user=www --group=www

可以看到我们使用了mysqlnd作为连接数据库的驱动。可以在测试的过程中出现了一些问题。

  • 将代码部署到测试服务器的时间出现No such file or directory,检查nginx日志出现PHP message: PHP Warning:  mysql_connect(): No such file or directory。经过检查发现原来是mysqlnd连接不到数据库,修改php的配置文件mysql.default_socket = /var/lib/mysql/mysql.sock  注意我这边是yum安装的mysql server,重新启动php-fpm.如果你使用的是apache的话则启动apache的服务即可。

     
  • 使用mysql_connect('localhost','root','123')发现服务器又报错
    mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD(‘your_existing_password’). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file


    使用mysqlnd的时候,有个地方需要注意。就是服务端的密码格式不能使用旧的16位的存储格式,而要使用新的41位的存储格式
mysql> select user,length(password) from mysql.user;
+----------+------------------+
| user     | length(password) |
+----------+------------------+
| root     |               16 |
| test     |               16 |
+----------+------------------+
2 rows in set (0.00 sec)

第一、更改数据库的配置文件/etc/my.conf
在[mysqld]下检查是否有
[mysqld]
old_passwords=1 

将其更改为
old_passwords=0
如果没有新增之,然后重新启动数据库服务

第二、更改数据库的密码

update mysql.user set password=password('123456') where user='root';
update mysql.user set password=password('123456') where user='test';
flush privileges;   


mysql> select user,length(password) from mysql.user;
+--------------+------------------+
| user         | length(password) |
+--------------+------------------+
| root         |               41 | 
| test         |               41 | 
+--------------+------------------+  

这个更改密码看你有使用几个用户了。

再次刷新网页,正常了了。

本文转载自:http://www.iyunv.com/thread-77788-1-1.html

共有 人打赏支持
mickelfeng

mickelfeng

粉丝 226
博文 2606
码字总数 566507
作品 0
成都
高级程序员
一个函数引发的MySQL驱动问题

前两天在一个php脚本中使用mysqlifetchall()来获取全部结果集,但却提示该方法undefined,只好退回,使用mysqlfetchrow()这个方法,一行一行的获取记录,效率很慢。后来查询得到: 1, mysqli...

vinci321
03/08
0
0
PHP 5.3.0以上推荐使用mysqlnd驱动

1.什么是mysqlnd驱动? PHP手册上的描述: MySQL Native Driver is a replacement for the MySQL Client Library (libmysql). MySQL Native Driver is part of the official PHP sources as of......

月影又无痕
2013/06/27
0
1
mysqlnd 以及 libmysqlclient

PHP拓展 1.1 PHP核心 PHP的核心是由两个独立的部分组成的。 在最底层是Zend Engine (ZE)。ZE 负责把人类可以理解的脚本解析成机器可以理解的符号(token),然后在一个进程空间内执行这些符号...

knightuniverse
2014/02/27
0
0
centos7-php安装

135956557-小三IT自学群,任何IT问题都可以一起讨论,各种服务网络等等 --------------------------------------------------------------------------- 了解PHP的工作模式,一共是三种 CGI模式...

动力在于作
2017/03/31
0
0
PHP编程中10个最常见的错误

错误1:foreach循环后留下悬挂指针 在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法: $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value...

荔枝壳
2014/08/01
283
1

没有更多内容

加载失败,请刷新页面

加载更多

一次由HandlerInterceptor进行的深入思考

HandlerInterceptor 是SpringFramework为我们提供的拦截器,一般我们可以用来鉴权或者日志记录等。 它是一个interface,主要方法有: /** * Intercept the execution of a handler. Called...

kipeng300
32分钟前
1
0
cmd中查询mysql表出现中文乱码

问题:在pycharm中正常的fetchall拉取数据,能够正常显示,而在cmd中直接select却出现中文乱码。 解决思路:右键查看cmd命令窗口属性得到,cmd窗口默认编码是gbk(如下图所示),而设置的mys...

fang_faye
58分钟前
2
0
centOS 安装Python3与python2并存

centOS 安装Python3与python2并存 如果本机安装了python2,尽量不要管他,使用python3运行python脚本就好,因为可能有程序依赖目前的python2环境, 比如yum!!!!! 不要动现有的python2环...

MedivhXu
今天
2
0
Spring JdbcTemplate模板模式与回调结合分析

在看Spring的JdbcTemplate的时候,看到其将模板模式和回调模式结合使用的实现,可以精妙的解决很多的问题。详见Spring中涉及的设计模式总结中的关于模板模式和回调模式结合的具分析,本文利用...

宸明
今天
1
0
docker update:更新一个或多个容器的配置

更新容器的配置 docker update:更新一个或多个容器的配置。 具体内容请访问:https://docs.docker.com/engine/reference/commandline/update/#options 语法:docker update [OPTIONS] CONTA...

lwenhao
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部