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

WBOY
풀어 주다: 2016-06-20 12:54:29
원래의
823명이 탐색했습니다.

现在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 --with-fpm-user=www --with-fpm-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 | +--------------+------------------+  这个更改密码看你有使用几个用户了。
    로그인 후 복사

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



    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿
    회사 소개 부인 성명 Sitemap
    PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!