php使用mysqlnd引起的一些問題處理

如今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。在安裝的時候咱們使用php

./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做爲鏈接數據庫的驅動。能夠在測試的過程當中出現了一些問題。mysql

  • 將代碼部署到測試服務器的時間出現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)

第1、更改數據庫的配置文件/etc/my.conf
在[mysqld]下檢查是否有
[mysqld]
old_passwords=1 

將其更改成
old_passwords=0
若是沒有新增之,而後從新啓動數據庫服務nginx

第2、更改數據庫的密碼sql

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 | 
+--------------+------------------+  

這個更改密碼看你有使用幾個用戶了。

再次刷新網頁,正常了了。數據庫

相關文章
相關標籤/搜索