ホームページ  >  記事  >  バックエンド開発  >  mysqlndを使用したphpによって引き起こされるいくつかの問題の処理

mysqlndを使用したphpによって引き起こされるいくつかの問題の処理

WBOY
WBOYオリジナル
2016-06-20 12:54:29823ブラウズ

現在、CentOS 5.11 は依然として古い mysql 5.0.59 サーバー バージョンを使用しており、PHP も最新バージョン 5.3.3 を使用しています (インストールするには yum -y install php53 を使用します)。公式には、5.3 の最後のバージョンである 5.3.29 は 2014 年 8 月にサポートを終了しました。発生したいくつかのバグとセキュリティ問題は修正されないため、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 が使用されていることを確認します。テストプロセス中にいくつかの問題が発生した可能性があります。


  • コードをテスト サーバーにデプロイするときに、nginx ログを確認すると、PHP メッセージが表示されます: PHP 警告: mysql_connect() : そのようなファイル、又はディレクトリはありません。検査の結果、mysqlnd がデータベースに接続できないことが判明しました。php 設定ファイル mysql.default_socket = /var/lib/mysql/mysql.sock を変更します。これは yum によってインストールされた mysql サーバーであることに注意してください。 Apache を使用する場合は、Apache サービスを開始するだけです。



  • mysql_connect('localhost','root','123') を使用すると、サーバーがレポートしたことがわかりました。別のエラー

    mysqlnd は古い安全でない認証を使用して MySQL 4.1 以降に接続できません。管理ツールを使用してコマンド SET PASSWORD = PASSWORD('your_existing_password') を使用してパスワードをリセットしてください。これにより、新しいパスワードが保存されます。より安全な、mysql.user のハッシュ値。このユーザーが PHP 5.2 以前で実行される他のスクリプトで使用されている場合は、my.cnf ファイルから old-passwords フラグを削除する必要がある場合があります


    use 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 | +--------------+------------------+  这个更改密码看你有使用几个用户了。

    Web ページを再度更新すると正常です。



    声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。