4

MySQL を実行する新しい Ubuntu サーバーを立ち上げています。開発サーバーに Capistrano をセットアップしており、deploy:setup の実行後に deploy:cold を実行しようとしています。デプロイ スクリプトの実行が試行された後

executing "cd /home/adm1n/www/knowit/releases/20121112152400 && bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile"

私はこのメッセージを受け取り続けます:

Rake Aborted!
Access denied for user 'specialusername'@'localhost' (using password: YES)
Tasks: TOP => environment

localhost と %. ユーザー データベースの空のユーザー ' ' @ localhost 行を削除しました。サーバーの IP アドレスを my.cnf ファイルに追加し、127.0.0.1 行をコメントアウトしました。

本番用の deploy.rb ファイルは次のとおりです。

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: mydatabasename
username: specialusername
password: crazypassword
socket: /tmp/mysql.sock
pool: 5
timeout: 5000

これがどのように機能するかを理解していない可能性があると思います。私の Site5 サーバーでは、mysql にアクセスしているホストを指定する必要はありませんでした。しかし、私のすべての読書では、特定の user@hostname を指定する必要があるようです。これにより、旅行中に全国のさまざまな場所から展開する場合、少し難しくなります。または、現在の IP アドレスに関係なく、ラップトップのホスト名を使用する必要があるだけですか? あなたが提供できる洞察と解決策に感謝します。この問題を解決するために必要なものを正確に提供する記事は見つかりませんでした。

4

1 に答える 1

3

MySQL サーバーに接続するには 2 つの方法があります。

まず、 などの UNIX ソケットを使用します。/tmp/mysql.sockこの場合、「ホスト」がないため、認証には が使用されusername@localhostます。これは、同じマシンからの接続でのみ機能します。

次に、TCP/IP 接続を使用します。この場合、サーバーはデータベースを実行しているボックスの特定のポートをリッスンし、それに接続する方法はホスト + ポート番号を提供することです。ポート番号はオプションで (デフォルトが使用されます)、ホストはホスト名または IP アドレスで指定できます。これにより、ローカルまたはリモートで接続できます。

注:これを実際に確認する方法がない(サーバーにアクセスできない)ため、以下は考えられる説明です...

ではmysql -u knowitdbadmin -p -h192.168.0.50、ホスト (-h) が指定されているため、TCP/IP が使用され、認証にusername@hostnameまたはusername@%ルールが使用されますが、これは を使用しませんusername@localhost

ではmysql -u knowitdbadmin -p、ホスト (-h) が指定されていないため、デフォルトの UNIX ソケットが使用され、認証が使用されますusername@localhost(したがって失敗します)。

UNIX ソケット (/tmp/mysql.sock) と username@localhost を使用してアクセスを無効にし、常に TCP/IP 接続を使用する場合は、次のようにします。 * username@localhost への許可を削除 (完了) * 常にアプリケーションの構成ファイルでホスト/IP (+ ポート) を指定します。

問題は次のとおりだと思います。

socket: /tmp/mysql.sock

代わりにホスト名 + ポート番号を使用してみてください。

補足として、5.5 以降、何らかの方法でデータベース自体に SQL アクセスできる場合performance_schema.host_cache、接続が失敗するすべての理由が新しいテーブルに表示されるため、このようなトラブルシューティングにかかる​​時間を大幅に節約できます。

于 2012-11-12T21:44:21.197 に答える