MySQL odmawia akceptowania połączeń zdalnych

13

Właśnie zainstalowałem nowy serwer Ubuntu z mysql (Percona 5.5), ale odmawia przyjmowania połączeń ze zdalnych hostów

Oto, co się stanie, jeśli spróbuję połączyć się z tym serwerem zdalnie:

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

Kiedy sprawdziłem, czy mysql nasłuchuje połączeń zdalnych, zobaczyłem to:

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

Jak widać, jest napisane, 127.0.0.1:3306co oznacza „Akceptuję tylko połączenia lokalne”.

Sprawdziłem moje skip_networkingi bind-addresszmienne - wszystko jest wyłączone:

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)

Mam inny serwer z absolutnie taką samą konfiguracją i działa świetnie:

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

Co może być tego przyczyną? Jak zmusić mysql do reagowania na połączenia zdalne?

Temnovit
źródło
Zauważ, że zmienna bind_addressjest dostępna tylko od wersji 5.6 ( bugs.mysql.com/bug.php?id=44355 ), więc zwróci pusty zestaw w wersji 5.5, nawet jeśli jest ustawiony.
faker
Pokaż nam swoje ustawienia my.cnf.
user9517
Czy sprawdziłeś, czy nie występują problemy poza mySQL, takie jak zapora ogniowa lub problem z routingiem?
Stese,

Odpowiedzi:

20

Spróbuj dodać bind-address = 0.0.0.0do swojej [mysqld]sekcji my.cnfi zrestartuj mysqld .

Guido Vaccarella
źródło
2
Plik znajduje się w/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo
Mój był w /etc/my.cnf.d/bind-addr.cnf
Joseph
0

Może to być spowodowane tabelą użytkowników bazy danych mysql (użyj mysql; pokaż tabele;). Jeśli powiązanie z 0.0.0.0 nie działa dla Ciebie, spróbuj podać użytkownikowi host „%” zamiast „localhost” w tej tabeli.

Na przykład spróbuj utworzyć użytkownika takiego jak:

UTWÓRZ UŻYTKOWNIKA twoja nazwa użytkownika @ '%' ZIDENTYFIKOWANA PRZEZ 'twoje hasło'

mrówka próbuje połączyć się z tym użytkownikiem.

periket2000
źródło
3
Odmowa połączenia oznacza ogólnie, że nic nie nasłuchuje na odpowiednim porcie IP:.
user9517
To prawda, że ​​błysnął mi komunikat „Nie mogę połączyć się z serwerem MySQL”, nie pamiętam w telnecie. Przepraszam.
periket2000
„Nie można połączyć się z MySQL” nie pochodzi z przywileju niedostępnego dla użytkownika. Jest to para {IP: port}, która nie jest dopasowana przez próbę połączenia.
Fabien Haddadi
0

Gdy wszystko inne zawiedzie i masz pewność, że serwer nasłuchuje na domyślnym porcie i próbujesz desperacko połączyć się z klientem mysql z innego hosta, spróbuj podać port w adresie URL polecenia mysql.

Dziwne, ponieważ jest, musiałem użyć następującej składni:

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

Znalazłem to (błąd?) Całkowicie przez przypadek (po utracie włosów :)).

Moja konfiguracja: debian jessie, świeży mysql 5.7.18, utworzono users / db, skomentowano adres wiązania, zrestartowano mysqld

Ondrej
źródło
Racjonalnym wyjaśnieniem jest to, że serwer someHost MySQL nasłuchuje na 3306, jak pokazuje dyrektywa --port. Ale twój plik binarny klienta mysql pochodzi z wersji MariaDB ... dlatego domyślnie używa portu 3307, chyba że podano inaczej. Sprawdź pochodzenie używanego pliku binarnego klienta mysql. Wskazówka: sprawdź też zmienną środowiskową PATH ...
Fabien Haddadi
0

Właśnie miałem ten problem i mój problem wydawał się być związany z zaporą ogniową. BTW - Dzięki @Temnovit za komendy rozwiązywania problemów Mysql.

Użyłem netstat, aby powiedzieć, że serwer działa i jest na właściwym porcie. Mogłem też powiedzieć, że mój serwer nie akceptuje połączeń na tym porcie za pomocą prostej komendy telnet.

# 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
➜  ~ 

Po kolejnej pomocnej odpowiedzi na polecenia zapory Fedory mogłem otworzyć właściwe porty.

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

Moje polecenie telnet zakończyło się powodzeniem.

# 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.
➜  ~

Jeśli nadal masz problemy, prawdopodobnie jest to problem z uprawnieniami użytkownika.

Eric Fossum
źródło
0

Mam mariadbzainstalowany. Soulution miał zmodyfikować bind-addresszlokalizowany przy/etc/mysql/mariadb.conf.d/50-server.cnf

Alex Balcome
źródło
-1

Rozwiązanie opisane w poniższym linku powinno rozwiązać twój problem http://www.debianhelp.co.uk/remotemysql.htm

bml13
źródło
2
bml13, cytowanie linku na poparcie twojej odpowiedzi to doskonała praktyka, ale zdecydowanie wolimy, aby ludzie pisali tutaj odpowiedź i dodawali link, a nie tylko umieszczali link i pozostawili to.
MadHatter
1
... tym bardziej, że teraz jest to martwy link.
haz