Mar 01, 2007

PHP4.3xとMySQL4.1xのパスワード互換性を解決しよう

Panther tiger



 PHP4.3xは、MySQL4.1xやMySQL5.0xとパスワードの互換性から、うまく接続ができません。このためphpMyAdminなどからMySQLを利用しようとしても「"#1251 - Client does not support authentication protocol requested by server;consider upgrading MySQL client"」というエラーが発生してしまい、使いたいソフトウェア導入のハードルになってしまうばかりじゃなく、抜け毛まで増えてしまうことになります。

 ここでは、Mac OS X(PantherやTiger)にインストールしたPHP4.3xがMySQL4.1やMySQL5.0と仲良くやりとりをしてくれるように、パスワードを変更するための方法を考えていきます。


こんなエラーが出てphpMyAdminが使えない



 Mac OS X10.4(Tiger)ユーザーなら、あっさりとEntropyPHP5.2xをインストールして、この問題を回避することができるのですが、大変なのはMac OS X10.3(Panther)ユーザーです。PHP5.2を手軽にインストールすることができるEntropyPHPパッケージは、Mac OS X 10.3.x(Panther)には用意されていないため(2007.3.1現在)、Panther環境では、以下のどれかの対応が求められることになります。

  • MySQL4.0とPHP4.3の組み合わせ。
    ただし現在MySQL4.0は配布されていないので事実上無理
  • MySQL4.1またはMySQL5.0とPHP4.3の組み合わせでMySQLにold_password設定
  • ソースからインストールしたPHP5.xとMySQL4.1またはMySQL5.0
  • Mac OS X PantherからTigerにアップグレード

 混沌としてきます。どれを選択するにも高いハードルが立ちはだかるような、そんなストレスを感じてしまいます。このままでは、ブログもオンラインアルバムも、MoodleもSNSも構築できません。

 そこで、ここではもっとも一般的で、簡単な対応の「MySQL4.1またはMySQL5.0とPHP4.3の組み合わせでMySQLにオールドパスワード設定」を行う方法をまとめていきます。


 この作業では、事前に以下のステップがすんでいることを前提に進めていきます。取りかかる前に、最低限、次のステップをすませておかないといけません。




必要なもの

  • Mac(Mac OS Xを搭載しているもの。ここは10.4.x(Tiger)で進みます)
  • Safari
  • ターミナル
  • テキストエディット
  • やる気
  • オープンソースコミュニティへの応援
  • セキュリティーとプライバシーへの配慮
  • インターネットを構築してくれた方々への畏敬の念



OLD_PASSWORDの設定

 パスワードの変更はターミナルから、コマンドを入力して行います。もちろんターミナルを実行する前に、Mac OS X上でMySQLが動作していることが大前提です。

  1. アプリケーションフォルダからユーティリティフォルダを開いて、ターミナルを
    起動させます。





  2. ターミナルに以下のコマンドを入力し、リターンで実行します。

    cd /usr/local/mysql/


    cdはchange directoryの略だと思います。このコマンドで、チェンジディレクトリ、つまり、/usr/local/mysqlフォルダまで移動します、という意味になります。namahageの部分は自分のユーザー名になります。


    この表示が出ればOK


  3. つぎに、以下のコマンドで、MySQLにroot(つまり管理者)として接続をします。

    ./bin/mysql -u root -p


    rootとしてMySQLに接続します



  4. パスワードを求められますので、入力します。このパスワードはMacOSXの管理者パスワードではなくて、MySQLをインストールした時に、MySQLを管理するパスワードとして設定したもののことです。(./bin/mysqladmin -u root password '設定したいパスワード'というコマンドを使って設定したもの)

    パスワードは入力してもセキュリティのため表示されないだけで、ちゃんと届いています。


  5. 入力したパスワードが正しければ、以下のように「Welcome to MySQL~」と表示が出ます。




  6. mysql>の後ろに以下のコマンドを入力し、実行します。

    set password for root@localhost=old_password('MySQLの管理者パスワード');


    「MySQLの管理者パスワード」のところには、自分のパスワードを入力します。ここでは例としてtsukaitaipasswordと入力してあります。入力したパスワードは間違ったり、忘れたりしないように気をつけます。


  7. 「Query OK~」と表示が出れば、パスワードは無事、古いパスワード形式として登録されました。



  8. 以下のコマンドを入力してMySQLとの接続を切ります。

    quit




  9. これでパスワード変更の作業は終了です。ターミナルは閉じてしまってかまいません。



phpMyAdminで動作確認

 phpMyAdminでMySQLに接続できるか動作確認を行ってみます。パスワードの変更を行う前までは、php4.3環境でのphpMyAdminからアクセスできなかったものが、うまくいくようになると思います。

  1. phpMyAdminの「config.php」または「config.default.php(phpMyAdmin2.7以降はこの名前)」をテキストエディットなどでひらいて、パスワードの項目が、先ほど設定したパスワードと同じであることを確認します。




    $cfg['Servers'][$i]['password'] = 'tsukaitaipassowrd'

    のところに、先ほど設定したパスワードと同じものが入力されているかを確認します。ここででは先のステップでtsukaitaipasswordと入力しましたので、そう入れてあります。

    脱線ですが、勇み足的に、

    $cfg['Servers'][$i]['tsukaitaipassowrd'] = ''

    こう設定している人がいました。気持ちはわかりますがこれは間違いです。


  2. 間違いがなければconfig.phpは閉じて、SafariからphpMyAdminのURLを開いて、正しくアクセスできるか試してみます。私のサイトを参考にphpMyAdminをインストールした人は、以下のURLでアクセスできると思います。






  3. 無事ページが開かれれば、感動ひとしおです。



  4. 以上ですべての作業は終了です。お疲れ様でした。



そのほかのユーザーのパスワード変換

ここまでの作業で、管理者のパスワードを古い形式に変更してきましたが、管理者以外にMySQLにユーザーがいる場合は、そのユーザーそれぞれについてすべて同じ作業をしないといけません。ちょっと面倒ではありますが、既存のMySQLユーザーがある場合は、そのユーザーさんのパスワードも変更してあげないと、「突然ブログが見られなくなったぞ」などと怒られますので注意します。実行するのは以下のようなコマンドになります。


set password for 既存のユーザー名@localhost=old_password('追加したユーザーのパスワード');




うまくいかないとき

 old_passwordの設定を行ったにもかかわらず、phpMyAdminのページが開けないときは、次を一度確認してみたいところです。

  • mysqlでold_password設定に入力したパスワードと、phpMyAdminのconfig.phpに書き込まれたパスワードが同じかどうか。
  • Safariに入力したURLがあっているかどうか。
  • MySQLは起動しているかどうか。
  • どうしてもだめなときは一度、Safariを終了、パーソナルウェブ共有を停止、MySQLも停止したあと、もう一度すべてを起動させてから、アクセスしてみてください。面倒くさいときはMacを再起動すればよいと思います。



新しいユーザーを作ったとき

phpMyAdminで新しいユーザーを追加すると、やっぱりまた新しいユーザーはパスワードがうまくやりとりできず、データベースにはアクセスできません。なので、上記で管理者パスワードを古い形式に変更したのと同様に、新しいユーザーも古い形式に変更しないといけません。


set password for 追加したユーザー名@localhost=old_password('追加したユーザーのパスワード');


サーバーを使っているユーザーさんが一人か二人なら、このぐらいは朝飯前なわけですが、人数が増えていきますと、毎回こんな面倒なことをやっているわけにもいかなくなります。このばあいは、MySQLにあらかじめ新しく作成されるユーザーはすべてOLD_PASSWORDを利用するように設定しておくほうが楽ちんです。/etcフォルダ内に、my.iniファイルを設置し、デフォルトで使用するパスワードはOLD_PASSWORDを利用するように指定してしまいます。 my.cnfファイルを設置するため、この作業が済んだら次のログに進んで作業を完了させてください。




1 Trackback

[OSX]

とうとうG5オーナーになってしまった。サーバ環境再構築が微妙にめんどい。しかも、PostgreSQL好きのチームリーダーの趣味でPHP4じゃないとダメ。MySQLは4.0の配布が終了してしまってphpMyAdminからして動かせない。 テラ困りす。 そんなときこそマカー頼みですよ。 mysql&am

From : 備忘録。らしい。 @ 2007-03-23 21:16:10

Track from Your Website

http://earlybirds.ddo.jp/namahage/inegalog/trackback/tb.php?id=44
(言及リンクのないトラックバックは無視されます)

Comments in Forum

Discuss