원격 연결 Mysql Ubuntu


96

어떤 이유로 MySQL 서버에 원격으로 연결할 수 없습니다. 나는 모든 것을 시도했지만 여전히 오류가 발생합니다.

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

자, 나는 달리기를 시도했다

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

여전히 아무것도! 내가 뭘 잘못하고 있니?

편집 : my.cnfbind ip를 주석 처리했습니다.


어떤 버전의 MySQL을 사용하고 있습니까?
Steve

서버 버전 : 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lyon

이 명령은 무엇을 반환합니까? 우분투 ~ $ sudo lsof -i -P | grep : 3306
apesa 2013 년

답변:


346

MySQL을 localhost가 아닌 다른 곳에 노출하려면 다음 줄이 있어야합니다.

mysql 버전 5.6 이하

주석을 제거하고 /etc/mysql/my.cnf루프백이 아닌 컴퓨터 IP 주소에 할당

mysql 버전 5.7 이상

주석을 제거하고 /etc/mysql/mysql.conf.d/mysqld.cnf루프백이 아닌 컴퓨터 IP 주소에 할당

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

또는 bind-address = 0.0.0.0IP를 지정하지 않으려면 추가하십시오.

그런 다음 새 my.cnf 항목으로 MySQL을 중지하고 다시 시작합니다. 실행되면 터미널로 이동하여 다음 명령을 입력하십시오.

lsof -i -P | grep :3306

xxx의 실제 IP로 이와 같은 결과가 나타납니다.

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

위의 문이 올바르게 반환되면 원격 사용자를 수락 할 수 있습니다. 그러나 원격 사용자가 올바른 권한으로 연결하려면 해당 사용자가 localhost와 '%'모두에서 생성되어야합니다.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

그때,

GRANT ALL ON *.* TO 'myuser'@'localhost';
GRANT ALL ON *.* TO 'myuser'@'%';

그리고 마지막으로,

FLUSH PRIVILEGES; 
EXIT;

위와 동일한 사용자가 생성되지 않은 경우 로컬로 로그온 할 때 기본 localhost 권한을 상속하고 액세스 문제가 발생할 수 있습니다. myuser의 액세스를 제한하려면 여기 에서 GRANT 문 구문을 읽어야합니다. 이 모든 과정을 거치고 여전히 문제가있는 경우 몇 가지 추가 오류 출력과 my.cnf 해당 줄을 게시합니다.

참고 : lsof가 반환되지 않거나 찾을 수없는 경우 Linux 배포를 기반으로 여기에 설치할 수 있습니다 . 일을 작동시키기 위해 lsof가 필요하지는 않지만 일이 예상대로 작동하지 않을 때 매우 편리합니다.


1
감사합니다. 처음에이 단계를 제대로 밟았 는데도 글을 올렸을 때 다시 한 번 해보고 매력처럼 작업 했어요!
Cristian Eduardo Lehuede Lyon

14
으로 어려움을 겪는 다른 사람 lsof -i -P | grep :3306에게는 작동하지 않았지만 원격 연결은 해당 확인 없이도 여전히 잘 작동하며 적절한 출력이 표시되지 않으면 무시하십시오.
Mike S

@Mike Slutsky 메모 주셔서 감사합니다. 제 답변을 수정했습니다. lsof가 아직 설치되지 않은 경우 설치할 수 있습니다.
유인원

2
많은 시스템에서 FWIW sudo lsof -i -Plsof -i -P(권한없는 사용자로 로그인했다고 가정 할 때) 보다 훨씬 더 유용합니다 .
단 파사로

2
lsof -i -P | grep :3306아무것도 반환하지 않습니다!
Green

39

apesa의 우수한 게시물 위에 몇 가지 포인트를 추가하십시오.

1) 아래 명령을 사용하여 mysql 서버가 수신하는 IP 주소를 확인할 수 있습니다.

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) 사용 FLUSH PRIVILEGES 어떤 이유로 변경 사항이 즉시 적용되지 않는 경우 부여 테이블을 강제로로드하는 데 사용합니다.

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == mysql에 연결하는 데 사용하는 사용자 ex.root
passwd == mysql에 연결하는 데 사용하는 암호

3) 넷 필터 방화벽이 활성화 된 경우 (sudo ufw enable mysql 서버 컴퓨터에서 ) 다음을 수행하여 원격 액세스를 위해 포트 3306을 엽니 다.

sudo ufw allow 3306

다음을 사용하여 상태 확인

sudo ufw status

4) 원격 연결이 설정되면 명령을 사용하여 클라이언트 또는 서버 시스템에서 확인할 수 있습니다.

netstat -an | grep 3306
netstat -an | grep -i established

3
이것은 내 하루 종일을 구했습니다! 감사합니다 sudo ufw status!!
Riddhiman Adib

netstat -nlt | grep 3306반환 비우
주앙 멘텔 페레이라

주앙 멘텔 페레이라가 있는지 mysql을 먼저 실행하게 @ 사용 명령 "이것을 /etc/init.d/mysql 상태가"확인합니다
조나단 L에게

8

MySQL은 localhost 만 수신합니다. 원격 액세스를 활성화하려면 my.cnf 파일을 약간 변경해야합니다.

sudo nano /etc/mysql/my.cnf

bind-address 및 skip-external-locking 줄을 주석 처리해야합니다.

#bind-address = 127.0.0.1
# skip-external-locking

이러한 변경을 수행 한 후 mysql 서비스를 다시 시작해야합니다.

sudo service mysql restart

1
코멘트를 확인하십시오skip-external-locking
calebeaires apr

1
나는 skip-external-locking을 주석 처리하지 않았고 여전히 작동합니다.
Marcia Ong

/etc/mysql/mysql.conf.d에서 변경해야했습니다
Bartando

내 위치는 다음과 같습니다.sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester

1

Windows에서 테스트하는 경우 포트 3306을 여는 것을 잊지 마십시오.


아, 당신은 천재입니다. Linux 용 Windows 하위 시스템을 사용하는 경우 이것은 매우 중요합니다. Windows 방화벽을 통한 인바운드 트래픽을 위해 포트 3306을 열어야하며, MySQL이 작동하는지 확인하기 위해 위의 모든 사항이 없습니다. 하위 시스템
Brian Leishman

1

우분투 12 (아주 오래된 것)를 사용하고 있습니다.

먼저 /etc/mysql/mysql.conf.d/mysqld.cnf 파일 ( Ubuntu 14.04 및 이전 버전 의 /etc/mysql/my.cnf)을 엽니 다.

[mysqld] 아래에서 bind-address = 127.0.0.1 줄을 찾아 bind-address = 0.0.0.0으로 변경하거나 주석을 추가하십시오.

그런 다음 Ubuntu MysQL 서버를 다시 시작하십시오. systemctl restart mysql.service

이제 Ubuntu Server는 MySQL 서버에 대한 원격 액세스를 허용하지만 모든 호스트에서 액세스 할 수 있도록 MySQL 사용자를 구성해야합니다.

사용자는 'username'@'%'필요한 모든 권한을 가지고 있어야합니다.

MySQL 서버가 모든 인터페이스에서 수신하는지 확인하려면 다음과 같이 netstat 명령을 실행합니다.

netstat -tulnp | grep mysql

이것이 효과가 있기를 바랍니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.