Sambungan terputus ke server MySQL saat 'membaca paket komunikasi awal', kesalahan sistem: 0


127

Saya mendapatkan kesalahan:

"Sambungan terputus ke server MySQL saat 'membaca paket komunikasi awal, kesalahan sistem: 0"

sementara saya akan menghubungkan db saya.

Jika saya menggunakan localhost semuanya berfungsi dengan baik. Tetapi ketika saya menggunakan alamat IP langsung saya seperti di bawah ini, ada kesalahan:

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

Jawaban:


104

Seseorang di sini menyarankan bahwa itu mungkin masalah firewall:

Saya baru saja mengalami masalah ini dan ternyata itu adalah firewall saya. Saya menggunakan PCTools Firewall Plus dan itu tidak memungkinkan akses penuh ke MySQL. Suatu kali saya berubah bahwa itu baik-baik saja. Semoga itu bisa membantu.

Mungkinkah itu?

Juga, seseorang di sini menyarankan bahwa itu mungkin karena server MySQL terikat ke IP loop-back (127.0.0.1 / localhost) yang secara efektif memotong Anda dari menghubungkan dari "luar".

Jika demikian, Anda perlu mengunggah skrip ke server web (yang mungkin juga menjalankan server MySQL) dan menjaga host server Anda sebagai 'localhost'


7
apa maksudmu localhost? Saya juga menghadapi masalah yang sama dan hanya menggunakan localhost. Aplikasi ada di mesin yang sama dengan database. Apa maksudmu localhost?
oneofakind

6
@oneofakind Maksudnya untuk terhubung ke 'localhost "alih-alih' 127.0.0.1 '
Alex Holsgrove

2
Saya memiliki masalah yang sama pada OSX dengan mamp pro. Saya memperbaikinya dengan menonaktifkan / mengaktifkan kembali kotak centang "izinkan akses jaringan ke mysql" pada tab mamp pro mysql.
Ousmane

43

Buka file konfigurasi mysql bernama my.cnf dan coba cari "bind-address", di sini ganti pengaturan (127.0.0.1 ATAU localhost) dengan ip server langsung Anda (ip yang Anda gunakan dalam fungsi mysql_connect)

Ini pasti akan menyelesaikan masalah.

Terima kasih


2
Pastikan Anda menggunakan bind-address = 127.0.0.1 atau localhost saat menggunakan ssh tunnel. Punya masalah ini dengan bitnami, di mana bind-address adalah mesin ip.
z2z

1
Masalah dan solusi yang sama untuk Debian 10 + dedicated server mandiri MySQL.
Vilq

Harus disebutkan bahwa biasanya lebih disukai untuk mengikat layanan mysql ke 127.0.0.1tempat yang berlaku sehingga akses langsung dari host lain tidak mungkin. Ini mencegah serangan brute force jarak jauh dan tidak memaparkan kemungkinan masalah keamanan ke jaringan. Jika aplikasi Anda terletak di mesin yang sama (yang merupakan pengaturan hosting yang sangat umum), gunakan 127.0.0.1resp. localhostsebagai host mysql dan itu akan bekerja dengan cara yang sama seperti mengikat layanan ke antarmuka eksternal Anda dan menggunakannya sebagai host mysql. Jika aplikasi Anda berada di tempat lain, gunakan jaringan internal jika memungkinkan.
David

36

1) Izinkan koneksi jarak jauh ke MySQL. Edit file:

>sudo nano /etc/mysql/my.cnf

Baris komentar:

#bind-address       = 127.0.0.1

Mulai ulang MySQL:

>sudo service mysql restart

2) Buat pengguna untuk koneksi jarak jauh.

>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) Dalam kasus saya, saya perlu menghubungkan dari Windows ke mesin VirtualBox dari jarak jauh dengan Ubuntu. Jadi saya perlu mengizinkan port 3306 di iptables:

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

1
Bagi saya, saya lupa memverifikasi bind-address di my.cnf. Terima kasih.
abkrim

1
Ini sangat membantu. Terima kasih!
osehgol

1
Bekerja dengan sempurna, tetapi saya menggunakan meja kerja pada windows jadi tidak melakukan langkah 3. tetapi berhasil. Terima kasih!
RohitAneja

Meskipun perintah terakhir tidak bekerja untuk saya, membuat pengguna baru dengan cara Anda menyelesaikan masalah saya. Saya dapat mengakses mysql di raspberry pi dari laptop saya. Terima kasih!
Eyyüp Alkış

ingat untuk FLUSH PRIVILEGESsetelah membuat pengguna baru.
Yew Hong Tat

15

Mengalami masalah ini saat menyiapkan server slave baru. Ditemukan itu adalah alamat IP server slave tidak ada dari server master/etc/hosts.allow file . Menambahkan alamat IP dan membiarkan saya terhubung ke server master.

Perhatikan bahwa saya menggunakan hosts.allowdan hosts.denyuntuk mengontrol akses.


masalah saya dengan konektor / c ++. sekarang, jika saya hanya bisa menemukan apa kebutuhan pengaturan berada di allowsaat denymemiliki ALL: ALL...

ini benar-benar menyelamatkan hidup saya, saya mengalami masalah saat menyambung ke mysql dari workbench, saya perlu menambahkan "ALL: 127.0.0.1" ke file /etc/hosts.allow dan mulai bekerja
Tomáš Tibenský

Dalam kasus saya, / etc / hosts memiliki entri (lama) yang buruk untuk IP host. Ketika mengeluarkan IP baru, itu datang di bawah yang lama dan tampaknya diabaikan. Menghapus IP lama menyembuhkan kesalahan.
David Ramirez

7

Saya punya masalah ini dan akhirnya menjadi admin sys sebelum mengubah port MySQL sedang berjalan. MySQL Workbench berusaha menyambung ke standar 3306 tetapi server berjalan pada 20300.


1
Bagus untuk jawaban ini. Ternyata, saya melakukan ini untuk diri saya sendiri.
hati

5

Masalah pada kasus saya adalah MySQL hanya mengikat ke lo di linux. untuk menyelesaikan masalah saya telah mengedit my.cnf (ditemukan di /etc/mysql/my.cnf) menghapus baris bind-address = 127.0.0.1

ini memungkinkan mysql untuk mengikat ke antarmuka jaringan apa pun


5

Kesalahan ini terjadi pada saya ketika mencoba terhubung ke Google Cloud SQL menggunakan MySQL Workbench 6.3.

Setelah sedikit penelitian saya menemukan bahwa alamat IP saya telah diubah oleh penyedia internet dan dia tidak diizinkan di Cloud SQL.

Saya mengizinkannya dan kembali bekerja.


4

Saya mengalami kesalahan yang sama persis ketika menghubungkan dari meja kerja MySQL. Begini cara saya memperbaikinya. File konfigurasi /etc/my.cnf saya telah menetapkan nilai bind-address ke alamat IP server. Ini harus dilakukan untuk mengatur replikasi. Bagaimanapun, saya menyelesaikannya dengan melakukan dua hal:

  1. buat pengguna yang dapat digunakan untuk terhubung dari alamat bind di file my.cnf

misalnya

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. ubah nilai hostname MySQL di detail koneksi di meja kerja MySQL agar sesuai dengan alamat-bind

Terima kasih banyak, kami juga memiliki replikasi MySQL dan bind-address adalah lokal: 10.0.0.x. Saya berjuang selama berhari-hari untuk solusi ini.
iFadi

3

Masalahnya bagi saya adalah bahwa permintaan DNS diblokir oleh FW dalam subnet. Solusinya adalah menonaktifkan pencarian DNS di dalam MySQL.


Saya menduga bahwa DNS yang harus disalahkan dalam kasus saya juga.
Zenexer

3

Saya baru mengatur mysql pada kotak windows. Saya mendapat kesalahan OP ketika mencoba terhubung dengan klien Navicat MySql di kotak yang sama. Saya harus menentukan 127.0.0.1 sebagai tuan rumah, dan yang mendapatkannya.

localhost, atau alamat ip aktual server keduanya tidak berfungsi.


3

Kesalahan berarti bahwa itu tidak menerima respons dari port yang diharapkannya menemukan server aktif. Penyebabnya berkisar dari menghubungi mesin yang salah (Untuk salah satu dari sejumlah alasan) hingga server tidak berada di port yang diharapkan.

Periksa port mana yang terikat pada server Anda di /etc/mysql/my.cnf. Apakah itu sesuai dengan apa yang ada dalam pernyataan koneksi Anda. Jika cocok, coba sambungkan dengan mysql dari server itu sendiri dan dari baris perintah mesin tempat Anda menjalankan klien. Jika berfungsi membentuk satu tempat dan bukan tempat lain maka Anda mungkin memiliki masalah konfigurasi firewall / router.


Saya tidak berpikir ini benar, jika tidak ada yang mendengarkan pada port itu maka Anda akan mendapatkan jawabannya ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), bukan Lost connection to MySQL serverpesannya.
Ken Williams

2

dalam kasus saya, saya memiliki SEMUA: SEMUA di hosts.deny. Mengubah ini ke ALL: PARANOID memecahkan masalah saya saat menghubungkan melalui ssh


2

Masalahnya sangat bodoh bagi saya.

Saya biasa mendapatkan masalah yang sama pada mesin AWS EC2 Ubuntu (MariaDB diinstal secara lokal untuk saat ini), jadi saya mencoba membuat SSH tunneling, dan memiliki masalah yang sama. Jadi saya mencoba ssh tunnel over terminal:

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

Dan itu memberitahuku ini:

Silakan masuk sebagai pengguna "ubuntu" daripada "root" pengguna.

Saya mengubah pengguna ssh dari root ke ubuntu, sama seperti konfigurasi ssh saya, dan itu terhubung dengan baik.

Jadi, periksa pengguna yang menghubungkan SSH Anda.

Saya mengawasi ini, jadi ini juga setengah jam dari waktu saya, jadi saya harap ini akan bermanfaat bagi Anda.


2

Bagi saya file konfigurasi ditemukan "/etc/mysql/mysql.conf.d/mysqld.cnf" mengomentari alamat bind melakukan trik.

Seperti yang dapat kita lihat di sini: Alih-alih melewatkan jejaring, defaultnya adalah mendengarkan hanya di localhost yang lebih kompatibel dan tidak kalah aman.


Untuk kejutan terbesar saya, ini bekerja di bawah Debian 10. Saya memberi kesempatan untuk itu dan BEKERJA! Konfigurasi mysql yang diedit sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfdan bukannya bind-address = 111.112.113.114saya gunakan bind-address = 127.0.0.1. Pengaturan terowongan SSH diatur seperti yang dijelaskan pada hostpresto.com/community/tutorials/... Kerja bagus! Terima kasih!
klor

1

Berlari ke masalah yang sama ini, Bind Address bolak-balik tanpa hasil. Solusi bagi saya adalah pembilasan hak istimewa .

mysql> FLUSH PRIVILEGES;

1

Bagi saya pengaturan bind-address = 0.0.0.0dimysql/my.cnf bekerja. Itu pada dasarnya mendengarkan semua alamat (tetapi masih satu port) lalu.

Dan jangan lupa restart server Anda: systemctl restart mysql


6
Semua alamat / antarmuka, tetapi hanya satu port tunggal.
Zenexer

1

Saya hanya memiliki masalah yang sama, tetapi dalam kasus saya, saya menyelesaikannya dengan

layanan mysqld mulai


1

Satu lagi alasan ...

Saya berlari ke server Ubuntu di mana semuanya dikustomisasi dan tidak dapat terhubung karena kesalahan yang sama.

Pengaturan ini ada di dalam /etc/ssh/sshd_config

PermitTunnel no

Setelah berubah menjadi

PermitTunnel yes

Saya dapat terhubung dari jarak jauh ke DB MySQL saya


1

Saya mencoba menghubungkan wadah docker db saya di Ubuntu 18.04, masalah yang sama.

Pertama periksa perangkat Anda dengan menjalankan nmcli devuntuk memeriksa apakah perangkat docker0terhubung.

Jika tidak terhubung, cobalah untuk me-restart layanan buruh pelabuhan:

sudo service docker restart


1

Dalam kasus saya itu adalah port wifi universitas memblokir 3306. Saya dapat terhubung dengan menggunakan hotspot seluler.

Ubah ke hotspot seluler atau jaringan lain, dan jika berfungsi di sana, maka Anda tahu bahwa jaringan asli memblokir port 3306. Jika Anda mendapatkan kesalahan yang sama pada lebih dari 1 jaringan, maka Anda tahu itu khusus untuk mesin Anda.


1

Firewalldmemblokir alamat IP. jadi untuk memberikan akses, gunakan perintah ini:

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

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

firewall-cmd --muat ulang


0

Saat menghubungkan ke Mysql dari jarak jauh, saya mendapatkan kesalahan. Saya memiliki peringatan ini di /var/log/mysqld.log:

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

Saya baru saja menambahkan baris ini ke /etc/hostsfile:

X.X.X.X some_name

Masalah terpecahkan! Tidak menggunakan skip-name-resolvemenyebabkan beberapa kesalahan pada aplikasi lokal saya saat menghubungkan ke MySQL.


0

Saya memiliki masalah yang sama. Untuk memperbaikinya saya baru saja mengubah host dari localhost: 3306 menjadi hanya localhost. Jadi kesalahan dapat terjadi ketika Anda memisahkan port yang tidak tepat untuk koneksi. Lebih baik membiarkannya sebagai default.


1
Ini mungkin karena mysql tidak menerima port sebagai bagian dari hostname, alih-alih Anda perlu menggunakan argumen-P 3306
Clay H

0

Izin baca-tulis direktori database juga masalah yang saya temukan. Pastikan aplikasi Anda dapat menemukan file di lokasi db. Coba chmod 777 untuk pengujian.


0

Saya menghadapi masalah yang sama. Saya memeriksa dan mencoba untuk mengatur AllowTcpForwarding Ya tetapi itu hilang di sshd_config saya jadi tidak ada bantuan. Saya tidak mengubah sshd_config atau my.cnf. Pastikan nama host ssh TIDAK sama dengan nama host mysql (gunakan localhost).

Di meja kerja, pilih + untuk menambahkan koneksi baru dan atur yang berikut:

  • metode koneksi: standar TCP / IP melalui SSH
  • Nama Host SSH: 192.168.0.50:22 (ganti IP dan port server SSH jarak jauh (opsional))
  • Nama Pengguna SSH: sshuser
  • Anda dapat mengatur kata sandi atau menambahkan saat diminta
  • Nama Host MYSQL: localhost atau 127.0.0.1
  • Port MYSQL Server: 3306
  • Anda dapat mengatur kata sandi atau menambahkan saat diminta

Tes koneksi. Itu harus berhasil kemudian tekan OK.Viola!


0

Jika bind-address tidak ada dalam file konfigurasi Anda dan mysql di-host pada AWS, silakan periksa grup keamanan Anda. Dalam kondisi ideal, aturan masuk harus menerima semua koneksi dari port 3306 dan aturan keluar harus merespons kembali ke semua IP yang valid.


0

Saya telah melakukan di bawah 3 langkah kemudian bekerja untuk saya.

  1. bind-address = "YOUR MACHINE IP"dalam my.cnffile di /etc/my.cnf

  2. Mulai ulang layanan dengan perintah: service httpd restart

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


0

Saya memiliki kesalahan yang sama (menghubungkan ke MYSQL pada aws melalui MYSql Workbench). Saya digunakan untuk menghubungkan baik-baik saja sebelumnya dan tiba-tiba berhenti berfungsi dan tidak akan berfungsi lagi). Koneksi saya melalui SSH dilindungi oleh keyfile.

Ternyata saya kehabisan waktu. Jadi saya meningkatkan batas waktu koneksi SQL menjadi 30 detik (dari standar 10) dan bagus untuk kembali. hal-hal untuk dicoba (jika Anda berada dalam pengaturan serupa)

  1. Bisakah Anda ssh langsung dari terminal ke server (mendeteksi masalah dengan izin file kunci, dll)?
  2. Bisakah Anda kemudian melalui terminal terhubung ke MySQL dengan pengguna / pwd yang sama menggunakan sesuatu seperti mysql -u [username] -p [database]? Ini akan memeriksa masalah hak pengguna dll.
  3. jika keduanya berfungsi maka parameter Anda bukan masalah dan mungkin masalah batas waktu yang sama seperti saya (kecuali tidak pernah mengatakan kesalahan batas waktu, tetapi diminta untuk memeriksa izin dll)

0

Ruang disk yang terbatas dapat menyebabkan kesalahan ini.

Periksa ruang disk Anda

$ df -h

Cobalah menambah ruang jika ada 100% disk yang digunakan.

Dalam kasus saya: Saya memiliki kotak Vagrant (8.0.1) (Ubuntu 16.04) Kapasitas disk mysql saya adalah 10GB, saya meningkatkannya menjadi 20GB

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

Kemudian restart mysql

$ sudo service mysql restart

0

Jika Anda menghadapi erorr yang terhubung dari jarak jauh, buka opsi mysql jarak jauh di cpanel dan kemudian tambahkan% di Host (% wildcard diizinkan).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.