まず、mysql_ * 拡張機能とその機能を (絶対に) 使用しないでください。それらは時代遅れで非推奨であり、近いバージョンで php から削除されます。mysqli_またはPDOを使用します。詳細については、php ドキュメントの mysql_connect ページの上部にある大きな赤い警告を参照してください。
- 正しいサーバーに接続していることを確認してください
ssh で Web サーバーに接続し、ローカル mysql クライアントを使用して root としてデータベース サーバーに接続します (root ユーザーのパスワードを求められます)。
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 100530
Server version: 5.1.66-0+squeeze1 (Debian)
[...]
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
これが機能する場合、mysql プロンプトが表示されるはずです。これが機能しない場合、問題はネットワーク構成にあり、Web サーバーが mysql サーバーに接続できません (ポートの開口部を確認してください)。
問題のデータベースがサーバーに存在することを確認してください
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
リストにデータベース名が表示されない場合は、phpmyadmin で表示されるサーバーが正しいサーバーではないことを意味します。phpmyadmin の設定を確認してください。
cli mysql クライアントを使用して、このユーザーに接続できるかどうかを確認します。接続行でデータベースを指定していないことに注意してください。
// close the root connection
mysql> quit
Bye
// connect using your specific user, replace USERNAME with your db user (and type its password when asked)
$ mysql -uUSERNAME -p
Enter password:
[...]
mysql>
これが失敗してプロンプトが表示されない場合は、パーミッションが存在しないか、このユーザーが指定したホストから接続できないことが原因である可能性があります。mysql が表示するエラー メッセージを見てください。何かのようなもの!
ERROR 1045 (28000): Access denied for user 'USERNAME'@'HOST' (using password: NO)
HOST に含まれるものは重要であり、それが自分の特権で許可されていることを確認する必要があります。すべてに問題がなく、それでも機能しない場合は、そのユーザーの権限を編集して、HOST を「%」に設定してみてください (何でも許可されていることを意味します)。それで動作する場合は、HOST が mysql の権限で正しく構成されていないことを意味します。
ユーザーが問題のデータベースを表示できるかどうかを確認します。特定のユーザーと接続すると、「データベースの表示」は、このユーザーが表示する権限を持つデータベースのみを一覧表示します。
mysql > show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| [... db names ...] |
+--------------------+
X rows in set (0.00 sec)
mysql>
リストにデータベースが表示されない場合は、ユーザーの権限が間違っているか、このデータベースに設定されていないことを意味します。
ここでのすべての手順が正常に機能する場合は、おそらく、php コードにエラーがあることを意味します。ホスト、パスワード、ユーザー名などを再確認してください。
権限のどの部分が間違っているのか本当にわからない場合は、ダミーのユーザーを作成して、任意のホストからのすべての権限を取得してみてください。
$ mysql -uroot -p -hXXXXXXX.XXXXXXXXXX.eu-west-1.rds.amazonaws.com
Enter password:
mysql > GRANT ALL ON yourdbname.* to 'testuser'@'%' IDENTIFIED BY 'dummypassword';
mysql > quit
Bye
// note that I give the password in the prompt directly, to make sure this isn't an input error just in case
$ mysql -utestuser -pdummypassword
mysql >
このユーザーを作成して接続できるようになったら、php コードを使用して接続を試みます。これが機能したら、( を使用して) ユーザーを削除DROP USER 'testuser'
し、より制限された HOST 権限でユーザーを再度作成し、必要なアクセス許可が複製されるまで再試行します。
そのユーザーを忘れずに削除してください。