MySQL은 원격 연결을 거부합니다


13

방금 mysql (percona 5.5)으로 새로운 우분투 서버를 설치했지만 원격 호스트의 연결을 수락하지 않습니다.

이 서버에 원격으로 연결하려고하면 어떻게됩니까?

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이 원격 연결을 수신하는지 확인하면 다음을 보았습니다.

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

보시다시피 127.0.0.1:3306"로컬 연결 만 수락합니다"라는 의미입니다.

내 확인 skip_networkingbind-address변수를 - 모두가 꺼져 :

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)

완전히 동일한 구성을 가진 다른 서버가 있으며 훌륭하게 작동합니다.

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

그 이유는 무엇입니까? mysql이 원격 연결에 응답하도록하려면 어떻게해야합니까?


변수 bind_address는 버전 5.6 이후에만 사용 가능하므로 ( bugs.mysql.com/bug.php?id=44355 ) v5.5에서 설정되어 있어도 빈 세트를 리턴합니다.
faker

my.cnf 설정을 알려주십시오.
user9517

방화벽 또는 라우팅 문제와 같은 mySQL 외부의 문제를 확인 했습니까?
Stese

답변:


20

bind-address = 0.0.0.0귀하의 [mysqld]섹션에 추가 하고 mysqld를my.cnf 다시 시작 하십시오 .


2
파일은/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo

내 /etc/my.cnf.d/bind-addr.cnf에 있었다
joseph

0

mysql 데이터베이스 사용자 테이블 때문일 수 있습니다 (mysql; show tables; 사용). 0.0.0.0에 대한 바인드가 작동하지 않으면 해당 테이블에서 'localhost'대신 '%'호스트를 사용자에게 제공하십시오.

예를 들어 다음과 같은 사용자를 만들어보십시오.

'yourpassword'로 식별 된 사용자 yourusername @ '%'을 (를) 작성하십시오.

개미는 그 사용자와 연결을 시도합니다.


3
연결 거부는 일반적으로 관련 IP : 포트에서 수신 대기하는 것이 없음을 의미합니다.
user9517

사실, 나는 'MySQL 서버에 연결할 수 없습니다'에 의해 번쩍 들었고 텔넷을 기억하지 않습니다. 죄송합니다.
periket2000

"MySQL에 연결할 수 없습니다"는 사용자가 사용할 수없는 권한에서 비롯된 것이 아닙니다. 연결 시도와 일치하지 않는 {IP : port} 쌍입니다.
Fabien Haddadi

0

다른 모든 것이 실패하고 서버가 기본 포트에서 수신 대기 중이고 다른 호스트에서 필사적으로 mysql 클라이언트와 연결하려고하는 경우 mysql 명령의 URL에 포트를 지정하십시오.

이상하게도 다음 구문을 사용해야했습니다.

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

나는 우연히 (나의 머리카락을 잃어버린 후)이 (버그?)를 발견했다.

내 설정 : debian jessie, fresh mysql 5.7.18, users / db created, bind-address comment-out, mysqld restarted


합리적 설명은 --port 지시문에서 알 수 있듯이 someHost MySQL 서버가 실제로 3306에서 수신 대기 중이라는 것입니다. 그러나 mysql 클라이언트 바이너리는 MariaDB 버전에서 제공됩니다. 따라서 지정하지 않는 한 포트 3307을 기본값으로 사용합니다. 사용중인 mysql 클라이언트 바이너리의 출처를 확인하십시오. 힌트 : PATH 환경 변수도 확인하십시오.
Fabien Haddadi

0

방금이 문제가 있었고 내 문제는 방화벽과 관련된 것으로 보입니다. BTW-Mysql 문제 해결 명령에 감사합니다. @Temnovit

netstat를 사용하여 서버가 실행 중이고 올바른 포트에 있음을 알 렸습니다. 또한 간단한 텔넷 명령으로 서버가 해당 포트에서 연결을 수락하지 않았다고 말할 수 있습니다.

# 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 방화벽 명령에 대한 다른 유용한 답변에 따라 올바른 포트를 열 수 있습니다.

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

텔넷 명령이 성공했습니다.

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

여전히 문제가있는 경우 사용자 권한 문제 일 수 있습니다.


0

나는 한 mariadb설치. soulution은 bind-address위치 를 수정 했습니다./etc/mysql/mariadb.conf.d/50-server.cnf


-1

링크 아래에 설명 된 솔루션은 문제를 해결해야합니다. http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, 귀하의 답변을 뒷받침하는 링크를 인용하는 것은 훌륭한 관행이지만, 우리는 사람들이 여기에 답변을 작성하고 링크를 추가하는 것만 선호합니다.
MadHatter

1
... 특히 죽은 링크이기 때문입니다.
haz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.