MySQL uzak bağlantıları kabul etmeyi reddediyor


13

Az önce mysql (percona 5.5) ile yeni bir ubuntu sunucusu kurdum, ancak uzak ana bilgisayarlardan bağlantıları kabul etmeyi reddediyor

Bu sunucuya uzaktan bağlanmaya çalışırsam ne olur:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

MySQL uzak bağlantıları dinleyip dinlemediğini kontrol ettiğimde şunu gördüm:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Gördüğünüz gibi 127.0.0.1:3306"Sadece yerel bağlantıları kabul ediyorum" anlamına geliyor.

Ben skip_networkingve bind-addressdeğişkenleri kontrol ettim - her şey kapalı:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Kesinlikle aynı yapılandırmaya sahip başka bir sunucum var ve harika çalışıyor:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Bunun nedeni ne olabilir? MySQL'in uzak bağlantılara nasıl yanıt vermesini sağlayabilirim?


Değişkenin bind_addressyalnızca 5.6 sürümünden beri kullanılabildiğini unutmayın ( bugs.mysql.com/bug.php?id=44355 ), bu nedenle ayarlanmış olsa bile v5.5'te boş bir küme döndürür.
faker

Bize my.cnf ayarlarınızı gösterin.
user9517

Güvenlik duvarı veya yönlendirme sorunu gibi mySQL dışındaki sorunları kontrol ettiniz mi?
Stese

Yanıtlar:


20

bind-address = 0.0.0.0Kendi [mysqld]bölümünüze eklemek my.cnfve mysqld yeniden başlatın .


2
Dosya şu /etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo

Benimki /etc/my.cnf.d/bind-addr.cnf
joseph

0

Bunun nedeni mysql veritabanı kullanıcı tablosu olabilir (mysql kullanın; tabloları göster;). 0.0.0.0'a bağlama sizin için işe yaramıyorsa, bu tablodaki 'localhost' yerine kullanıcınıza '%' ana bilgisayarını vermeye çalışın.

Örneğin, aşağıdaki gibi bir kullanıcı oluşturmayı deneyin:

Kullanıcı adınızı @ '%' OLUŞTURUN 'şifreniz' ile KİMLİ

ant o kullanıcı ile bağlanmaya çalışın.


3
Bağlantı reddedildiğinde, genellikle ilgili IP: bağlantı noktasını dinlemiyor demektir.
user9517

Doğru, 'MySQL sunucusuna bağlanılamıyorum' tarafından yanıp söndüm, telnet üzerinde hatırlamıyorum. Afedersiniz.
periket2000

"MySQL'e bağlanılamıyor", kullanıcı tarafından kullanılamayan bir ayrıcalıktan kaynaklanmaz. Bir bağlantı girişimi ile eşleşmeyen bir {IP: port} çiftidir.
Fabien Haddadi

0

Her şey başarısız olduğunda ve sunucunun varsayılan bağlantı noktasını dinlediğinden eminseniz ve diğer ana bilgisayardan umutsuzca mysql istemcisiyle bağlanmaya çalışıyorsanız, mysql komutunun URL'sinde bağlantı noktasını belirtmeyi deneyin.

Garip olduğu gibi aşağıdaki sözdizimini kullanmak zorunda kaldım:

mysql -h someHost --port=3306 -u someUser -p someDb

Bu (böcek?) Tamamen kazara buldum (tüylerimi kaybettikten sonra :)).

Kurulumum: debian jessie, fresh mysql 5.7.18, users / db oluşturuldu, bind-address commented-out, mysqld yeniden başlatıldı


Rasyonel bir açıklama, someHost MySQL sunucusunun --port yönergesinde gösterildiği gibi aslında 3306'yı dinlemesidir. Ancak mysql istemci ikili dosyanız MariaDB sürümünden gelir ... bu nedenle aksi belirtilmedikçe varsayılan olarak 3307 numaralı bağlantı noktasını kullanır. Kullandığınız mysql istemci ikili dosyasının kökenini kontrol edin. İpucu: PATH ortam değişkeninizi de kontrol edin ...
Fabien Haddadi

0

Ben sadece bu sorunu vardı ve benim sorun güvenlik duvarı ile ilgili gibi görünüyordu. BTW - Mysql sorun giderme komutları için Teşekkürler @Temnovit.

Netstat'ı sunucunun çalıştığını ve doğru bağlantı noktasında olduğunu söylemek için kullandım. Sunucumun basit bir telnet komutuyla bu bağlantı noktasındaki bağlantıları kabul etmediğini de söyleyebilirim.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Fedora güvenlik duvarı komutlarına başka bir yardımcı yanıtın ardından doğru bağlantı noktalarını açabilirim.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Telnet komutum başarılı oldu.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Hala sorun yaşıyorsanız, bu bir kullanıcı izinleri sorunudur.


0

Ben var mariadbyüklü. Soulution modifiye etmek bind-addressbulunan/etc/mysql/mariadb.conf.d/50-server.cnf


-1

Aşağıdaki bağlantıda açıklanan çözüm sorununuzu çözmelidir http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, cevabınızı desteklemek için bir bağlantıyı alıntılamak mükemmel bir uygulamadır, ancak insanların sadece cevabı buraya yazmasını ve bağlantıyı bırakmasını değil, yanıtı buraya yazmasını ve bir bağlantı eklemesini tercih ediyoruz.
MadHatter

1
... özellikle bu artık ölü bir bağlantı olduğu için.
haz
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.