web-dev-qa-db-ja.com

ubuntu、mysqlはどのようにホスト名を決定しますか?

これは特定のQです:Apacheをubuntuで並行して実行し、mysqlをこのVMおよびホストOSXで実行しています。本番環境をローカルでエミュレートしようとしているので、リモートに接続しますOS X上のmysqlサーバー。一部のクライアントではこれを正常に実行し、新しいクライアントを作成しました。

私のubuntuホストファイルにumhef.ca、osx、dom.bizがあります。 ubuntuからOSXにpingを実行すると、成功と正しいIPが報告されます。私のdrupal設定ファイルはホストを「osx」に設定し、ユーザーは「rootd」に設定されています。ユーザーはこのデータベースへの権限を持つOS xmysqlサーバーに設定されています。これを知るにはどうすればよいですか?mysqlで正常にセットアップされた他のユーザーを見ることができ、それらはこのユーザーと同じように見えます。

これが、このエラーが発生する理由のトラブルシューティングに役立つ背景です。PDOException:SQLSTATE [HY000] [1045]ユーザー 'rootd' @ 'umhef.ca'のアクセスが拒否されました(パスワード:YESを使用)

WTFはこのホストの出身ですか?それと他の人がOsx VMを指しているので、それは正当なホストです。だからこれをトラブルシューティングするために私はubuntuからこれを試みます:

mysql --Host=osx --user=rootd --password=mypassword
Access denied for user 'rootd'@'umhef.ca' (using password: YES)

Ubuntuのhostsファイルをコメントアウトしようとしましたが、ubuntuがHostパラメーターを無視するのはなぜですか?これをトラブルシューティングするには、他に何を使用する必要がありますか? thx、sam

1
sam452

Root @ localhostとしてMySQLにログインできる場合は、以下を実行します。

_SELECT USER(),CURRENT_USER();
_

これはあなたに何を伝えますか:

  • SER() MySQLで認証を試みた方法を報告します
  • CURRENT_USER() MySQLでの認証がどのように許可されたかを報告します

エラーが発生したとき

ユーザー 'rootd' @ 'umhef.ca'のアクセスが拒否されました(パスワードを使用:YES)

ホスト部分はテーブル_mysql.user_によって決定されました。 MySQLには、ユーザー認証を行うための風変わりですが系統だった方法があります。暇なときに、私のDBA StackExchangeの投稿を読むことができます MySQLエラー:ユーザー 'a' @ 'localhost'のアクセスが拒否されました(パスワードを使用:YES) それがどのように機能するかについて。

とにかく、追いかけようとするために、これをしなさい

_SELECT user,Host FROM mysql.user;
_

これにより、可能なすべてのCURRENT_USER()値が得られます(MySQLへの接続が許可されている方法)。私の推測では、あなたは_rootd@osx_としてログインしようとしてログに記録していて、おそらく_mysql.user_にエントリがありません。言い換えれば、あなたが実行した場合

_SELECT CONCAT(user,'@',Host) userhost FROM mysql.user
WHERE user='rootd' AND Host='osx';
_

何も得られません。あなたが実行する場合

_SELECT CONCAT(user,'@',Host) userhost FROM mysql.user WHERE user='rootd';
_

_[email protected]_が表示される場合があります。そうでない場合、mysqldはあなたがそのように来ており、_mysql.user_に一致する認証が存在しないと想定します。

OSでホストに変更を加えた場合は、必ずmysqldを再起動して、それらの変更を認識できるようにしてください。

1
RolandoMySQLDBA