「localhost」を使用してMySQLに接続できませんが、「127.0.0.1」を使用しても問題ありませんか?


12

/ etc / hostsファイルは次のようになります。

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

サーバーの構築中に、ローカルホストに正常にpingできましたが、Postfix、Apache、Dovecotなどのサービスの特定の構成ファイルで、それらを機能させるために127.0.0.1代わりに指定する必要があることがわかりましたlocalhost

またlocalhost、MySQLへの接続に使用されていた特定のデータベース駆動型Webサイトの構成ファイルを変更する必要がありました。

私はhostsファイルにさまざまな変更を試みましたが、今まで試したことのあるものは何も役に立ちませんでした。

サーバーはUbuntu 12.04.02 LTSを実行しています。selinuxがインストールされておらず、IPtablesのデフォルトポリシーを受け入れてフラッシュするように設定した後でも上記の状況は残ります。

回答:


15

確認できるものの1つは(MySQLコンソールにログインする必要があります)- root経由でログインする権限があることを確認してくださいlocalhost

mysql -h 127.0.0.1 -u root -p

-正常にログインできたら-

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

これが問題である場合に備えて、そこに放り投げてください。


あなたは正しい軌道に乗っていると感じています。私はそれをやったことがあり、rootと他のいくつかのユーザーはlocalhost用に作成されましたが、ユーザー用のホスティングコントロールパネルで作成されたものはすべてです127.0.0.1(1つを除く%)。これはおそらく私が修正するのに十分であると思うので、すぐにあなたの答えを受け入れるでしょう。
ピータースノー

助けてくれてありがとう!変更を有効にするには、mysql.userテーブルを更新した後、mysqlサーバーの再起動が必要であることを追加したいと思います。
lackovic10

受け入れられていますが、mysqlの場合、これは通常(決して?)問題ではありません。代わりにEEAAの回答を参照してください(mysqlはの代わりに解釈localhostsocketますTCP)。
ToolmakerSteve

8

ほとんどのMySQLクライアントは、ホストをとして指定した場合localhost、TCP接続ではなくソケット接続にエイリアスするという事実に奇妙です。あなたのオプションは、固執する127.0.0.1か、クライアントがそれをサポートしている場合(mysql CLIバイナリが--protocolフラグでサポートしているように)、Unixソケットの代わりにTCPを使用するように強制することです。


EEAAに感謝します。問題は、Joomlaインストーラーなどが失敗することです。インストール中にホスト名フィールドの127.0.0.1代わりに指定するとlocalhost、インストールパスが混乱して他のエラーが発生しますが、localhostを指定するとデータベースに接続できません!この状況の原因は何ですか?なぜ私はそれを持っているのですか?
ピータースノー

3
@PeterSnow MySQL構成でUnixドメインソケットをセットアップします。
マイケルハンプトン

@MichaelHamptonに感謝します。最後の30分を検索しましたが、これを設定する方法が見つかりません。記事を教えてもらえますか、またはアイデアを教えてください。私は持っsocket = /var/run/mysqld/mysqld.sockていmy.cnfて、ファイルは存在し、パーミッション777でmysqlによって所有されています。ありがとう。
ピータースノー

@PeterSnowその変更を行った後、mysqldを再起動しましたか?
EEAA

現在、私はJoomlaのインストールスクリプトを介してそれを使用しようとしています。httpページはホスト名を尋ねます。私が選択127.0.0.1した場合は動作しますが(スクリプトは後でエントリlocalhostを使用しlocalhost、のような解決可能な名前を期待しているため失敗します)、データベースを作成するために、接続を使用すると失敗します。
ピータースノー


1

このような許可を確認できます:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

これが0 0.0.0.0:*でリッスンしている場合、すべての人がそのmysqlにアクセスできることを意味します。

my.confファイルでこのバインディングを編集できます。Linuxの場合、これのデフォルトパスは次のとおりです。

[learner@localhost ~]$ sudo vi /etc/my.cnf

必要なIPを許可するために、これらの行をmy.confファイルに追加します。

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

情報についてはa_learnerに感謝しますが、すでに回答を受け入れています。
ピータースノー

0

PHPはまだデフォルトのソケットの場所を使用しようとしています。この問題は、MariaDB / MySQLフォルダーを/ var / lib / mysqlから別の場所に移動した場合に発生する可能性があります。問題を解決するには、/ etc / php.iniファイルで新しいソケットの場所を定義する必要があります。

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

シンボリックリンクを作成して、この問題を解決しましたsudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock。ただし、最初/var/run/mysqld/はフォルダーが存在しなかったため、最初にフォルダーを作成する必要があります。


-1

/ tmpにmysql.sockが必要です

ln -s /var/lib/mysql/mysql.sock mysql.sock

その後は正常に動作するはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.