MacOSXServer Tips#1 PHP+MySQL+phpMyAdmin

[考察]
MacOSX 10.4.1 ServerのPHP+MySQL環境下で、phpMyAdmin(ポスト時点のバージョンは、phpMyAdmin 2.6.2-pl1)インストールできない(MovableTypeのダイナミック機能を利用するとエラーになる)

[エラー]
#2002 – サーバーが反応しません。(または、ローカルの MySQL サーバーのソケットは正確に設定されません)」

#1251 – Client does not support authentication protocol requested by server; consider upgrading MySQL client

[環境]
MacOSX 10.4.1 ServerのPHPとMySQLのデフォルトでインストールされているバージョンは次のとおり

  • PHP Version 4.3.10
  • MySQL Server 4.1.10a
  • Client API version 3.23.49

[原因]
今回の原因は、3.と4.が該当する

  1. “MySQLサーバーが起動していない”
  2. “なんらかの理由でソケットファイルが削除されている”
  3. MySQLサーバーで使っているUNIXソケットとクライアントソフトで使っているUNIXソケットのパスが違う
  4. MySQL 4.1+Client API versionの場合、パスワードハッシュアルゴリズムに基づく認証プロトコルの互換性の問題が生じる

[解決手順]

  1. MySQLサーバーで使うソケットをクライアントに合わせる
  2. 4.1 より前のクライアントを必要とするユーザをリセットし、旧パスワードを使用するようにする

まず、1.から

Appleの公開文書によると、以下のとおりの説明があり、どちらかの方法でソケットファイルの参照パスを訂正しろとある。

When running MySQL and PHP on the same Mac OS X 10.4 server, you may find that PHP cannot connect to MySQL. When PHP is communicating with a MySQL server on the same host, it uses a socket file to communicate, and looks for it at /tmp/mysql.sock. On Mac OS X Server 10.4, MySQL creates this socket file at /var/mysql/mysql.sock.
To resolve this issue, you can either change the location where MySQL creates its socket file, or modify the location where PHP looks for the file. Please note that the first option is less secure than the second.

今回は、php.iniファイルを作成して、クライアント側のソケットファイルの参照パスを訂正するほうを選択

  • 1. In Terminal: sudo cp /etc/php.ini.default /etc/php.ini
  • 2. In Terminal: sudo pico /etc/php.ini
  • [MySQL]のセクションの mysql.default_socket をさがす
  • 3. mysql.default_socket = /var/mysql/mysql.sock >パスを追加
  • 次に、mysql.sockをwwwユーザーが読めるように、パーミッションを変更
  • 4.in Terminal: sudo chmod 775 /var/mysql

次に、2. は、

mysql> UPDATE user SET Password = OLD_PASSWORD('mypass')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;

[参照ページ]