「初期通信パケットの読み取り」でMySQLサーバーへの接続が失われました。システムエラー:0


127

エラーが発生します:

「初期通信パケットの読み取り時にMySQLサーバーへの接続が失われました。システムエラー:0」

私は私のデータベースを接続するつもりです。

localhostを使用している場合、すべてが正常に機能しています。しかし、以下のようなライブIPアドレスを使用していると、エラーが発生します。

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());

回答:


104

ここの誰かがそれがファイアウォールの問題であるかもしれないと示唆しています:

この問題が発生し、ファイアウォールであることがわかりました。PCTools Firewall Plusを使用していますが、MySQLへのフルアクセスが許可されていませんでした。一度変えたら大丈夫だった。お役に立てば幸いです。

それでいいですか?

また、誰かここでは、 MySQLサーバを効果的に「外」から接続でき遮断ループバックIP(127.0.0.1 / localhostの)にバインドされているので、それはあるかもしれないことを示唆しています。

この場合は、スクリプトをWebサーバー(おそらくMySQLサーバーも実行している)にアップロードし、サーバーホストを「localhost」として保持する必要があります。


7
localhostはどういう意味ですか?私も同じ問題に直面しており、localhostのみを使用しています。アプリケーションはデータベースと同じマシン上にあります。localhostはどういう意味ですか?
oneofakind 2015

6
@oneofakind彼は「127.0.0.1」の代わりに「localhost」に接続することを意味します
Alex Holsgrove

2
OS Xでmamp proと同じ問題が発生しました。mamp proの[mysql]タブの[mysqlへのネットワークアクセスを許可する]チェックボックスを無効または再度有効にすることで修正しました。
Ousmane 2017

43

my.cnfという名前のmysql設定ファイルを開き、「bind-address」を見つけます。ここで、設定(127.0.0.1またはlocalhost)を実際のサーバーIP(mysql_connect関数で使用しているIP)に置き換えます。

これは間違いなく問題を解決します。

ありがとう


2
sshトンネルを使用する場合は、必ずbind-address = 127.0.0.1またはlocalhostを使用してください。bind-addressがマシンIPであったbitnamiでこの問題が発生しました。
z2z

1
Debian 10 + MySQLスタンドアロン専用サーバーの同じ問題と解決策。
Vilq

mysqlサービスを127.0.0.1適切な場所にバインドして、他のホストから直接アクセスできないようにすることが一般的に望ましい場合があることに注意してください。これにより、リモートのブルートフォース攻撃が防止され、セキュリティの問題がネットワークに公開されることはありません。アプリケーションが同じマシンにある場合(これは非常に一般的なホスティング設定です)、127.0.0.1respを使用します。localhostmysqlホストとして使用すると、サービスを外部インターフェースにバインドしてmysqlホストとして使用するのと同じように機能します。アプリケーションが他の場所にある場合は、可能であれば内部ネットワークを使用してください。
デビッド

36

1)MySQLへのリモート接続を許可します。ファイルを編集:

>sudo nano /etc/mysql/my.cnf

コメント行:

#bind-address       = 127.0.0.1

MySQLを再起動します。

>sudo service mysql restart

2)リモート接続用のユーザーを作成します。

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3)私の場合、Ubuntuを使用してWindowsからVirtualBoxマシンにリモートで接続する必要があります。そのため、iptablesでポート3306を許可する必要があります。

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

1
私にとっては、my.cnfのbind-addressを確認するのを忘れています。ありがとう。
abkrim 2016

1
これは完全に役立ちました。ありがとうございました!
osehgol

1
完全に動作しましたが、Windowsでワークベンチを使用していたため、ステップ3を実行しませんでしたが、動作しました。ありがとう!
RohitAneja

最後のコマンドは私にとってはうまくいきませんでしたが、あなたの方法で新しいユーザーを作成すると私の問題は解決しました。私のラップトップからラズベリーpi上のmysqlにアクセスできます。ありがとう!
EyyüpAlkış

FLUSH PRIVILEGES新しいユーザーを作成した後を忘れないでください。
Yew Hong Tat

15

新しいスレーブサーバーを設定するときにこの問題がありました。スレーブサーバーのIPアドレスがマスターサーバーにないことがわかりました/etc/hosts.allowファイル。IPアドレスを追加すると、マスターサーバーに接続できます。

とを使用hosts.allowhosts.denyてアクセスを制御していることに注意してください。


connector / c ++に関する私の問題。今、私が持っているallowときに必要な設定を見つけることができた場合...denyALL: ALL

これは本当に私がワークベンチからMySQLへの接続の問題を抱えていた、私のライブを保存し、私は「ALL:127.0.0.1」を追加するために必要なファイルを/etc/hosts.allowのために、それが仕事に開始
トマーシュTibenskýを

私の場合、/ etc / hostsにホストIPの不良(古い)エントリがありました。新しいIPを発行すると、古いIPに分類され、無視されたようです。古いIPを削除するとエラーが修復されました。
David Ramirez

7

私はこの問題を抱えていて、MySQLが実行されていたポートを前のシステム管理者が変更したことが原因でした。MySQL Workbenchはデフォルトの3306に接続しようとしましたが、サーバーは20300で実行されていました。


1
この答えには良いことです。結局、私はこれを自分でやった。
cautionbug 2014

5

私の場合の問題は、MySQLがLinuxのloにのみバインドされていることでした。問題を解決するために、my.cnf(/etc/mysql/my.cnfにあります)を編集して、bind-address = 127.0.0.1という行を削除しました

これにより、mysqlを任意のネットワークインターフェイスにバインドできます


5

このエラーは、MySQL Workbench 6.3を使用してGoogle Cloud SQLに接続しようとしたときに発生しました。

少し調べたところ、インターネットプロバイダーによってIPアドレスが変更されており、Cloud SQLでは許可されていなかったことがわかりました。

私はそれを承認し、仕事に戻りました。


4

MySQLワークベンチから接続すると、まったく同じエラーが発生しました。修正方法は次のとおりです。/etc/my.cnf構成ファイルで、bind-address値がサーバーのIPアドレスに設定されています。これは、レプリケーションをセットアップするために実行する必要がありました。とにかく、私は2つのことをすることでそれを解決しました:

  1. my.cnfファイルのバインドアドレスから接続するために使用できるユーザーを作成する

例えば

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. MySQLワークベンチの接続詳細にあるMySQLホスト名の値をバインドアドレスと一致するように変更します

MySQLレプリケーションもあり、バインドアドレスはローカルの10.0.0.xでした。私はこの解決策のために何日も苦労していました。
iFadi

3

私にとっての問題は、DNSクエリがサブネット内のFWによってブロックされたことでした。解決策は、MySQL内のDNSルックアップを無効にすることでした。


私の場合もDNSのせいだと思います。
Zenexer 2015

3

mysqlをWindowsボックスにセットアップしました。同じボックスでNavicat MySqlクライアントに接続しようとすると、OPのエラーが発生しました。ホストとして127.0.0.1を指定する必要がありました。

localhost、またはサーバーの実際のIPアドレスはどちらも機能しませんでした。


3

このエラーは、サーバーが見つかると予想していたポートから応答を受信しなかったことを意味します。原因は、(多くの理由の1つが原因で)間違ったマシンに接続することから、サーバーが予期されたポート上にないことまでさまざまです。

/etc/mysql/my.cnfでサーバーがバインドされているポートを確認します。それはあなたの接続ステートメントにあるものに対応していますか?それらが一致する場合は、サーバー自体から、およびクライアントを実行しているマシンのコマンドラインからmysqlに接続してみてください。ある場所で機能し、別の場所で機能しない場合は、ファイアウォール/ルーターの構成に問題がある可能性があります。


これは正しいとは思いません。そのポートで何もリッスンしていない場合ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)は、Lost connection to MySQL serverメッセージではなく応答が返されます。
ケンウィリアムズ

2

私の場合、hosts.denyにALL:ALLがありました。これをALLに変更:PARANOIDはssh経由で接続するときの問題を解決しました


2

その問題は私にはかなり愚かだった。

以前はAWS EC2 Ubuntuマシン(MariaDBは当面ローカルにインストールされています)でも同じ問題が発生したため、SSHトンネリングを作成しようとしたところ、同じ問題が発生しました。だから私はターミナル上でトンネルをsshしようとしました:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

そしてそれは私にこれを伝えました:

「root」ではなく「ubuntu」でログインしてください。

私のssh構成と同じように、sshユーザーをrootからubuntuに変更しましたが、うまく接続しました。

SSH接続ユーザーを確認してください。

私はこれを監督したので、これは私の時間の30分も過ぎているので、これがあなたにとって役立つことを願っています。


2

私にとって、設定ファイルは「/etc/mysql/mysql.conf.d/mysqld.cnf」で見つかり、バインドアドレスをコメントアウトすることで解決しました。

ここでわかるように: スキップネットワーキングの代わりに、デフォルトではlocalhostのみをリッスンするようになりました。これは、互換性が高く、安全性が低くありません。


私が一番驚いたのは、これがDebian 10で動作したことです。mysqlの設定sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfを編集し、代わりにbind-address = 111.112.113.114を使用しましたbind-address = 127.0.0.1。SSHトンネルの設定は、hostpresto.com / community / tutorials /…で説明されているように設定されます。ありがとう!
klor、

1

この同じ問題に遭遇しBind Addressをやり取りして無駄にした。私にとっての解決策は、特権フラッシュすることでした。

mysql> FLUSH PRIVILEGES;

1

私にとってbind-address = 0.0.0.0mysql/my.cnfうまくいきました。基本的にすべてのアドレス(ただし、1つのポート)をリッスンします。

そして、サーバーを再起動することを忘れないでください: systemctl restart mysql


6
すべてのアドレス/インターフェース。ただし、1つのポートのみ。
Zenexer 2015

1

私は同じ問題を抱えていましたが、私の場合はそれで解決しました

mysqldサービスの開始


1

もう1つの理由...

私はすべてがカスタマイズされていて、同じエラーのために接続できなかったUbuntuサーバーに遭遇しました。

この設定は中にありました /etc/ssh/sshd_config

PermitTunnel no

になってから

PermitTunnel yes

MySQL DBにリモートで接続できました


1

Ubuntu 18.04でdb dockerコンテナーに接続しようとしていますが、同じ問題があります。

まず、デバイスを実行nmcli devしてデバイスをチェックし、デバイスdocker0が接続されているかどうかを確認します。

接続されていない場合は、Dockerサービスを再起動してください。

sudo service docker restart


1

私の場合、大学のwifiブロッキングポート3306でした。モバイルホットスポットを使用して接続できました。

モバイルホットスポットまたは別のネットワークに変更し、そこで機能する場合は、元のネットワークがポート3306をブロックしていることがわかります。複数のネットワークで同じエラーが発生する場合は、それがマシンに固有であることがわかります。


1

FirewalldIPアドレスをブロックします。アクセスを許可するには、次のコマンドを使用します。

firewall-cmd --permanent --zone = trusted --add-source = YOUR_IP / 32

firewall-cmd --permanent --zone = trusted --add-port = 3306 / tcp

firewall-cmd --reload


0

Mysqlにリモートで接続すると、エラーが発生しました。私はこの警告を受けました/var/log/mysqld.log

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

私はこの行を/etc/hostsファイルに追加しました:

X.X.X.X some_name

問題が解決しました!skip-name-resolveMySQLに接続するときに、ローカルアプリで使用しないとエラーが発生しました。


0

私は同じ問題を抱えていました。これを修正するには、ホストをlocalhost:3306からlocalhostに変更しました。そのため、接続に不適切なポートを指定すると、エラーが発生する可能性があります。デフォルトのままにしておくことをお勧めします。


1
これは、mysqlがポートをホスト名の一部として受け入れないためである可能性が高く、代わりに引数を使用する必要があります-P 3306
Clay H

0

データベースディレクトリの読み取り/書き込み権限も問題が見つかりました。アプリケーションがdbの場所にあるファイルをrwできることを確認してください。テストのためにchmod 777を試してください。


0

私も同じ問題に直面しました。AllowTcpForwarding Yesを確認して設定しようとしましたが、sshd_configに見つからなかったため、何の助けもありませんでした。sshd_configまたはmy.cnfを変更しませんでした。sshホスト名がNOTであることを確認してください mysqlホスト名と同じで(localhostを使用)。

ワークベンチで+を選択して新しい接続を追加し、以下を設定します。

  • 接続方法:標準のTCP / IP over SSH
  • SSHホスト名:192.168.0.50 : 22(リモートSSHサーバーのIPとポートを置き換えます(オプション))
  • SSHユーザー名:sshuser
  • パスワードを設定するか、プロンプトで追加できます
  • MYSQLホスト名:localhostまたは127.0.0.1
  • MYSQLサーバーポート:3306
  • パスワードを設定するか、プロンプトで追加できます

接続をテストします。成功したらOK.Violaを押してください!


0

bind-addressが構成ファイルに存在せず、mysqlがAWSインスタンスでホストされている場合は、セキュリティグループを確認してください。理想的な条件では、受信ルールはポート3306からのすべての接続を受け入れ、送信ルールはすべての有効なIPに応答する必要があります。


0

私は以下の3つのステップを実行してから、私のために働いています。

  1. bind-address = "YOUR MACHINE IP"my.cnfでのファイルな/etc/my.cnf

  2. コマンドでサービスを再起動します。 service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;


0

同様のエラーが発生しました(awsでMYSql Workbenchを介してMYSQLに接続する)。以前はうまく接続していたのですが、突然機能しなくなり、再び機能しなくなりました)。私の接続は、キーファイルで保護されたSSH経由でした。

私がタイムアウトしていたことがわかりました。そのため、SQL接続のタイムアウトを(デフォルトの10から)30秒に増やして、もう一度やり直しました。試すこと(同様の設定をしている場合)

  1. 端末からサーバーに直接sshできますか(キーファイルのアクセス許可などの問題を検出します)?
  2. 次に、ターミナルを介して同じユーザー/パスワードでMySQLに接続できますか? mysql -u [username] -p [database]か?これにより、ユーザー権利の問題などがチェックされます。
  3. これらの両方が機能する場合、パラメータは問題ではなく、おそらく私と同じタイムアウトの問題です(ただし、タイムアウトエラーは表示されませんが、アクセス許可を確認するように求められます)

0

ディスク容量が限られていると、このエラーが発生する可能性があります。

ディスク容量を確認する

$ df -h

100%使用済みディスクがある場合は、スペースを増やしてみてください。

私の場合:私はVagrant(8.0.1)ボックスを持っています(Ubuntu 16.04)mysqlディスク容量は10GBでしたが、20GBに増やしました

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

次に、mysqlを再起動します

$ sudo service mysql restart

0

リモートからの接続でこのエラーが発生する場合は、cpanelのリモートmysqlオプションに移動し、ホストに%を追加します(%ワイルドカードを使用できます)。

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