'İlk iletişim paketini okurken' MySQL sunucusuna bağlantı kesildi, sistem hatası: 0


128

Hata alıyorum:

"İlk iletişim paketini okurken 'MySQL sunucusuna bağlantı kesildi, sistem hatası: 0"

db'mi bağlayacağım.

Localhost kullanıyorsam, her şey yolunda gidiyor. Ancak canlı IP adresimi aşağıdaki gibi kullandığımda hata alıyor:

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

Yanıtlar:


104

Buradaki biri bunun bir güvenlik duvarı sorunu olabileceğini öne sürüyor:

Bu sorunu yeni yaşadım ve bunun benim güvenlik duvarım olduğunu öğrendim. PCTools Firewall Plus kullanıyorum ve MySQL'e tam erişime izin vermiyordu. Bir kez değiştirdim, iyiydi. Umarım yardımcı olur.

Bu olabilir mi?

Ayrıca, buradaki biri bunun nedeni MySQL sunucusunun geri döngü IP'sine (127.0.0.1 / localhost) bağlı olmasından kaynaklanıyor olabilir, bu da sizi "dışarıdan" bağlanmanızı etkin bir şekilde keser.

Bu durumda, komut dosyasını web sunucusuna yüklemeniz (ki bu muhtemelen MySQL sunucusunu da çalıştırmaktadır) ve sunucu ana makinenizi 'localhost' olarak tutmanız gerekir.


7
localhost ne demek istiyorsun? Ben de aynı problemle karşı karşıyayım ve sadece localhost kullanıyorum. Uygulama, veritabanıyla aynı makinede. Localhost ne demek istedin?
oneofakind

6
@oneofakind '127.0.0.1' yerine 'localhost'a bağlanmak anlamına geliyor
Alex Holsgrove

2
OSX'te mamp pro ile aynı sorunu yaşadım. Mamp pro mysql sekmesindeki "mysql'e ağ erişimine izin ver" onay kutusunu devre dışı bırakarak / yeniden etkinleştirerek sorunu çözdüm.
Ousmane

43

My.cnf adlı mysql yapılandırma dosyasını açın ve "bağlantı adresini" bulmaya çalışın, burada ayarı (127.0.0.1 VEYA localhost) canlı sunucu ip'inizle (mysql_connect işlevinde kullandığınız ip) değiştirin

Bu kesinlikle sorunu çözecektir.

Teşekkürler


2
Ssh tünelini kullanırken bağlama adresi = 127.0.0.1 veya localhost kullandığınızdan emin olun. Bitnami ile bu sorunu yaşadım, burada bağlama adresi makine ipiydi.
z2z

1
Debian 10 + MySQL bağımsız adanmış sunucu için aynı sorun ve çözüm.
Vilq

Mysql hizmetini uygun 127.0.0.1olduğu yerde bağlamanın genel olarak tercih edilebileceği, dolayısıyla diğer ana bilgisayarlardan doğrudan erişimin mümkün olmadığı belirtilmelidir. Bu, uzaktan kaba kuvvet saldırılarını önler ve olası güvenlik sorunlarını ağa maruz bırakmaz. Uygulamanız aynı makinede bulunuyorsa (bu çok yaygın bir barındırma kurulumudur), 127.0.0.1resp. localhostmysql host olarak çalışır ve servisi harici arayüzünüze bağlamak ve bunu mysql host olarak kullanmakla aynı şekilde çalışacaktır. Uygulamanız başka bir yerde bulunuyorsa, mümkünse dahili bir ağ kullanın.
David

36

1) MySQL'e uzaktan bağlanmaya izin verin. Dosyayı düzenle:

>sudo nano /etc/mysql/my.cnf

Yorum satırı:

#bind-address       = 127.0.0.1

MySQL'i yeniden başlatın:

>sudo service mysql restart

2) Uzak bağlantı için kullanıcı oluşturun.

>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) Benim durumumda, Windows'tan VirtualBox makinesine Ubuntu ile uzaktan bağlanmam gerekiyor. Bu yüzden iptables'da 3306 numaralı bağlantı noktasına izin vermem gerekiyor:

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

1
Benim için my.cnf dosyasında bağlantı adresini doğrulamayı unutuyorum. Teşekkürler.
abkrim

1
Bu tamamen yardımcı oldu. Teşekkür ederim!
osehgol

1
Mükemmel çalıştı, ancak pencerelerde tezgah kullanıyordum, bu yüzden 3. adımı yapmadım ama işe yaradı. Teşekkürler!
RohitAneja

Son komut benim için işe yaramasa da, sizin yolunuzla yeni kullanıcı oluşturmak sorunumu çözdü. Ahududu pi'de mysql'e dizüstü bilgisayarımdan erişebiliyorum. Teşekkürler!
Eyyüp Alkış

FLUSH PRIVILEGESyeni bir kullanıcı oluşturduktan sonra unutmayın .
Yew Hong Tat

15

Yeni bir bağımlı sunucu kurarken bu sorunu yaşadım. Ana sunucu /etc/hosts.allowdosyasında ikincil sunucu IP adresinin eksik olduğu bulundu . IP adresi eklendi ve ana sunucuya bağlanmama izin verdi.

Erişimi kontrol etmek için hosts.allowve kullandığımı unutmayın hosts.deny.


bağlayıcı / c ++ ile ilgili sorunum. Şimdi, ben sadece içinde olmak ne ayar ihtiyacı bulabilirse allowzaman denyvardır ALL: ALL...

bu gerçekten hayatımı kurtardı, çalışma tezgahından
mysql'e bağlanma sorunları yaşıyordum

Benim durumumda, / etc / hosts, ana bilgisayar IP'si için kötü (eski) bir girişe sahipti. Yeni bir IP yayınlandığında, eskisinin altına girdi ve görünüşte görmezden geliniyordu. Eski IP'yi silmek hatayı iyileştirdi.
David Ramirez

7

Bu sorunu yaşadım ve önceki sistem yöneticisi MySQL'in çalıştığı bağlantı noktasını değiştirdi. MySQL Workbench varsayılan 3306'ya bağlanmaya çalışıyordu ancak sunucu 20300'de çalışıyordu.


1
Bu cevap için iyi bir şey. Bunu kendime yaptım.
dikkatbug

5

Benim durumumdaki sorun, MySQL'in sadece linux üzerindeki lo'ya bağlanmasıydı. Sorunu çözmek için my.cnf'yi (/etc/mysql/my.cnf adresinde bulunan) düzenleyerek satır bağlama adresi = 127.0.0.1'i kaldırdım.

bu, mysql'in herhangi bir ağ arayüzüne bağlanmasına izin verir


5

MySQL Workbench 6.3 kullanarak Google Cloud SQL'e bağlanmaya çalışırken bu hata oluştu.

Küçük bir araştırmadan sonra IP adresimin internet sağlayıcısı tarafından değiştirildiğini ve Cloud SQL'e girmesine izin verilmediğini gördüm.

İzin verdim ve işe geri döndüm.


4

MySQL çalışma tezgahından bağlanırken aynı hatayla karşılaştım. İşte bunu nasıl düzelttim. /Etc/my.cnf yapılandırma dosyamın bağlantı adresi değeri sunucunun IP adresine ayarlanmış. Bu, çoğaltmayı ayarlamak için yapılmalıydı. Neyse, iki şey yaparak çözdüm:

  1. my.cnf dosyasındaki bağlantı adresinden bağlanmak için kullanılabilecek bir kullanıcı oluşturun

Örneğin

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. Bağlantı adresiyle eşleşecek şekilde MySQL çalışma tezgahındaki bağlantı ayrıntılarındaki MySQL ana bilgisayar adı değerini değiştirin

Çok teşekkür ederim, ayrıca MySQL replikasyonumuz da vardı ve bağlantı adresi yerel bir adresdi: 10.0.0.x. Bu çözüm için günlerce mücadele ediyordum.
iFadi

3

Benim için sorun, DNS sorgularının alt ağ içindeki FW tarafından engellenmesiydi. Çözüm, MySQL içindeki DNS aramalarını devre dışı bırakmaktı.


Benim durumumda da DNS'nin suçlu olduğundan şüpheleniyorum.
Zenexer

3

Sadece bir Windows kutusuna mysql kurdum. Aynı kutudaki Navicat MySql istemcisine bağlanmaya çalışırken OP'nin hatasını aldım. Ana bilgisayar olarak 127.0.0.1 belirtmek zorunda kaldım ve bunu anladım.

localhost veya sunucuların gerçek ip adreslerinin ikisi de çalışmadı.


3

Hata, sunucuyu bulmayı beklediği bağlantı noktasından yanıt almadığı anlamına gelir. Sebepler, yanlış makineyle bağlantı kurmaktan (birkaç nedenden dolayı) sunucunun beklenen bağlantı noktasında olmamasına kadar değişir.

/Etc/mysql/my.cnf içinde sunucunuzun hangi bağlantı noktasına bağlı olduğunu kontrol edin. Bu, bağlantı ifadenizdekine karşılık geliyor mu? Eşleşirlerse, sunucunun kendisinden ve istemciyi çalıştırdığınız makinenin komut satırından mysql ile bağlanmayı deneyin. Bir yerden çalışırsa başka bir yerde çalışmazsa, bir güvenlik duvarı / yönlendirici yapılandırma sorununuz olabilir.


Bunun doğru olduğunu düşünmüyorum, eğer o portta dinleyen bir şey ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61)yoksa Lost connection to MySQL servermesajı değil yanıtı alırsınız.
Ken Williams

2

benim durumumda, hosts.deny'de ALL: ALL vardı. Bunu TÜM olarak değiştirmek: PARANOID, ssh üzerinden bağlanırken sorunumu çözdü


2

Sorun benim için oldukça aptalcaydı.

Aynı sorunu AWS EC2 Ubuntu makinesinde alıyordum (MariaDB şimdilik yerel olarak kuruldu), bu yüzden SSH tünellemesi yapmaya çalıştım ve aynı sorunu yaşadım. Bu yüzden terminal üzerinden ssh tüneli oluşturmaya çalıştım:

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

Ve bana şunu söyledi:

Lütfen "root" kullanıcısı yerine "ubuntu" kullanıcısı olarak oturum açın.

Ssh kullanıcısını kökten ubuntu'ya değiştirdim, tıpkı ssh yapılandırmam gibi ve iyi bağlandı.

Bu yüzden SSH bağlanan kullanıcınızı kontrol edin.

Bunu denetledim, bu yüzden bu benim yarım saatim, bu yüzden umarım bu sizin için yararlı olur.


2

Benim için yapılandırma dosyası "/etc/mysql/mysql.conf.d/mysqld.cnf" bulundu, bağlama adresini yorumlayarak hile yaptı.

Burada görebileceğimiz gibi: Ağ atlamak yerine artık varsayılan, daha uyumlu ve daha az güvenli olmayan localhost'ta dinlemektir.


En büyük sürprizim için, bu Debian 10 altında çalıştı. Bunun için bir şans verdim ve ÇALIŞIYOR! Mysql yapılandırması düzenlendi sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfve yerine bind-address = 111.112.113.114kullandım bind-address = 127.0.0.1. SSH tüneli ayarları, hostpresto.com/community/tutorials/… adresinde açıklandığı gibi ayarlanır. İyi iş! Teşekkürler!
klor

1

Aynı sorunla karşılaştım, Bind Address boşuna ileri geri. Benim için çözüm, ayrıcalıkları kızdırmaktı .

mysql> FLUSH PRIVILEGES;

1

Benim bind-address = 0.0.0.0için mysql/my.cnfişe yaradı. O zaman temelde tüm adresleri dinler (ancak yine de bir bağlantı noktası).

Ve sunucunuzu yeniden başlatmayı unutmayın: systemctl restart mysql


6
Tüm adresler / arabirimler, ancak yalnızca tek bir bağlantı noktası.
Zenexer

1

Aynı problemi yaşadım ama benim durumumda çözdüm

hizmet mysqld başlangıç


1

Bir neden daha ...

Her şeyin özelleştirildiği ve aynı hata nedeniyle bağlanamadığım bir Ubuntu sunucusuyla karşılaştım.

Bu ayar içerideydi /etc/ssh/sshd_config

PermitTunnel no

Dönüştükten sonra

PermitTunnel yes

MySQL veritabanıma uzaktan bağlanabildim


1

Db docker container'ımı Ubuntu 18.04'e bağlamaya çalışıyorum , aynı problem.

Öncelikle nmcli devcihazınızın docker0bağlı olup olmadığını kontrol etmek için cihazınızı çalıştırın .

Bağlı değilse docker hizmetini yeniden başlatmayı deneyin:

sudo service docker restart


1

Benim durumumda, üniversitenin wifi engelleme portu 3306 idi. Bir mobil bağlantı noktası kullanarak bağlanabildim.

Bir mobil erişim noktasına veya başka bir ağa geçin ve orada çalışıyorsa, orijinal ağın 3306 numaralı bağlantı noktasını engellediğini bilirsiniz. Aynı hatayı 1'den fazla ağda alırsanız, bunun makinenize özgü olduğunu anlarsınız.


1

FirewalldIP adresini engeller. bu yüzden erişim vermek için şu komutları kullanın:

firewall-cmd --permanent --zone = güvenilir --add-kaynak = YOUR_IP / 32

firewall-cmd --permanent --zone = güvenilir --add-port = 3306 / tcp

firewall-cmd - yeniden yükle


0

Mysql'e uzaktan bağlanırken hata aldım. Bu uyarıyı şurada aldım /var/log/mysqld.log:

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

Bu satırı /etc/hostsdosyaya ekledim :

X.X.X.X some_name

Sorun çözüldü! Kullanmamak skip-name-resolve, MySQL'e bağlanırken yerel uygulamamda bazı hatalara neden oldu.


0

Benim de aynı problemim vardı. Bunu düzeltmek için localhost: 3306'dan sadece localhost'a ana bilgisayarı değiştirdim. Bu nedenle, bağlantı için uygun olmayan bağlantı noktası ayırdığınızda hata oluşabilir. Varsayılan olarak bırakmak daha iyidir.


1
Bunun nedeni muhtemelen mysql'in bağlantı noktasını ana bilgisayar adının bir parçası olarak kabul etmemesidir, bunun yerine argümanı kullanmanız gerekir-P 3306
Clay H

0

Veritabanı dizini okuma-yazma izni de bulduğum bir sorun. Sadece uygulamanızın dosyaları db konumunda rw yapabildiğinden emin olun. Test için chmod 777'yi deneyin.


0

Ben de aynı problemle karşılaştım. AllowTcpForwarding Yes'i kontrol ettim ve ayarlamayı denedim ama sshd_config'imde eksikti, bu yüzden yardım yok. Sshd_config veya my.cnf'yi değiştirmedim. Ssh ana bilgisayar adının mysql ana bilgisayar adıyla aynı OLMADIĞINDAN emin olun (localhost kullanın).

Çalışma tezgahında, yeni bağlantı eklemek için + öğesini seçin ve aşağıdakileri ayarlayın:

  • bağlantı yöntemi: SSH üzerinden standart TCP / IP
  • SSH Ana Bilgisayar Adı: 192.168.0.50:22 (uzak SSH sunucusu IP'sini ve bağlantı noktasını değiştirin (isteğe bağlı))
  • SSH Kullanıcı Adı: sshuser
  • Şifre belirleyebilir veya istemde ekleyebilirsiniz
  • MYSQL Ana Bilgisayar Adı: localhost veya 127.0.0.1
  • MYSQL Sunucu bağlantı noktası: 3306
  • Şifre belirleyebilir veya istemde ekleyebilirsiniz

Test bağlantısı. Başarılı olmalı ve ardından Tamam'a basılmalıdır. Viola!


0

Bağlantı adresi yapılandırma dosyanızda yoksa ve mysql AWS örneğinde barındırılıyorsa, lütfen güvenlik grubunuzu kontrol edin. İdeal koşullarda, gelen kuralların 3306 numaralı bağlantı noktasından tüm bağlantıları kabul etmesi ve giden kuralın tüm geçerli IP'lere yanıt vermesi gerekir.


0

3 adımı aşağıda yaptım ve sonra benim için çalıştım.

  1. bind-address = "YOUR MACHINE IP"içinde my.cnfde dosyaya /etc/my.cnf

  2. Hizmeti komutla yeniden başlatın: service httpd restart

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


0

Benzer bir hatayla karşılaştım (MYSql Workbench aracılığıyla aws'de MYSQL'e bağlanırken). Önceden iyi bağlanırdım ve aniden çalışmayı bıraktı ve tekrar çalışmazdı). Bağlantım SSH üzerinden anahtar dosyası tarafından korunuyordu.

Zaman aşımına uğradığım ortaya çıktı. Bu yüzden SQL bağlantı zaman aşımını 30 saniyeye çıkardım (varsayılan 10'dan) ve tekrar başlamak iyi oldu. denenecek şeyler (benzer bir kurulumdaysanız)

  1. Doğrudan terminalden sunucuya ssh yapabiliyor musunuz (anahtar dosya izinleriyle ilgili sorunları algılar vb.)?
  2. Daha sonra aynı kullanıcı / pwd ile terminal aracılığıyla MySQL'e benzer bir şey kullanarak bağlanabilir misiniz mysql -u [username] -p [database]? Bu, kullanıcı hakları sorunlarını vb. Kontrol edecektir.
  3. eğer her ikisi de çalışırsa, parametreleriniz sorun değildir ve belki benim gibi aynı zaman aşımı sorunu değildir (bunun dışında hiçbir zaman zaman aşımı hatası söylememiştir, bunun yerine izinleri kontrol etmesi istenmiştir vs.)

0

Sınırlı disk alanı bu hataya neden olabilir.

Disk alanınızı kontrol edin

$ df -h

% 100 kullanılmış diskler varsa alanı artırmaya çalışın.

Benim durumumda: Vagrant (8.0.1) kutum var (Ubuntu 16.04) mysql disk kapasitem 10GB idi, 20GB'a çıkardım

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

Ardından mysql'i yeniden başlatın

$ sudo service mysql restart

0

Uzaktan bağlanırken bu hatayla karşılaşırsanız, cpanel'de uzak mysql seçeneğine gidin ve ardından Host'a% ekleyin (% joker karakterine izin verilir).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.