mysql에 원격 연결을 허용하는 방법


362

로컬 컴퓨터에 MySQL Community Edition 5.5를 설치했으며 외부 소스에서 연결할 수 있도록 원격 연결을 허용하려고합니다.

어떻게해야합니까?



1
DigitalOcean을 사용하는 경우을 사용해보십시오 sudo mysql_secure_installation. 참고로
Alan Dong

코드가 아닌 텍스트에는 코드 형식을 사용하지 마십시오. 주제를 벗어.
Lorne의 후작

@EJP 왜? 호기심에서 정직한 질문
르네 로스

답변:


776

MySQL에서는 기본적으로 허용됩니다.

기본적으로 비활성화되어있는 것은 원격 root액세스입니다. 이를 사용 가능하게하려면이 SQL 명령을 로컬로 실행하십시오.

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

그리고 다음 줄을 찾아 파일 에서 주석 처리하십시오.my.cnf 일반적 /etc/mysql/my.cnf으로 Unix / OSX 시스템에 있습니다. 경우에 따라 파일 위치는 /etc/mysql/mysql.conf.d/mysqld.cnf)입니다.

Windows 시스템 인 경우 MySQL 설치 디렉토리에서 찾을 수 C:\Program Files\MySQL\MySQL Server 5.5\ 있습니다 my.ini. 일반적으로 파일 이름은 다음과 같습니다 .

라인 변경

 bind-address = 127.0.0.1

 #bind-address = 127.0.0.1

변경 사항을 적용 하려면 MySQL 서버 ( Unix / OSXWindows )를 다시 시작하십시오 .


4
좋아, 그래서 파일 끝에 binnd-address = 127.0.0.1을 추가하고 외부 호스트에서 navicat을 사용하여 연결을 시도했는데 10060 오류가 발생합니다
Leo Leo

7
흠, 당신은 그것을 추가 할 필요가 없습니다. 내 대답이 말했듯이 추가하지 말고 주석 처리해야합니다. 당신이 찾을 필요가 있고, #를 앞에하여 주석 것 때문에, 기본적으로 거기에 하나가있다
mjuarez

7
흠, \ MYsql Server 5.5 \에는 my-default.ini라는 1 개의 ini 파일 만 있고 #이없는 유일한 행은 다음과 같습니다. sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo

2
이 답변은 완벽하게 작동합니다. thnx @mjuarez-모든 권한을 부여하십시오 . GRANT OPTION으로 'password'로 식별되는 'root'@ '%';
yadavr

66
그에 대한보고 my.cnf찾는 파일이 아닌 bind-address내 경우 (우분투 16.04.2에 MySQL 버전 14.14)에있는 파일의 위치 이었다는 것을, 거기에 메모를 지시를/etc/mysql/mysql.conf.d/mysqld.cnf
재 메논을

49

위의 모든 작업을 수행 한 후에도 여전히 root원격으로 로그인 할 수 없었지만 Telnetting to port 는 연결을 수락하고 3306있음을 확인했습니다 MySQL.

MySQL에서 사용자를 살펴보기 시작했고 암호가 다른 여러 루트 사용자 가 있음을 알았습니다 .

select user, host, password from mysql.user;

그래서에서 MySQL나는 루트에 대한 모든 암호를 설정 다시 나는 마지막으로 원격으로 로그인 할 수 있습니다 root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
맞습니다. 다른 답변의 단계를 따르는 동안 빈 암호를 가진 사용자 계정이 생성 된 것 같습니다. 따라서 비밀번호를 추가해야합니다.
chhantyal

1
나는 받아 들인 대답을 이것과 결합해야했고 모든 것이 제대로 작동했습니다.
제임스

8
5.7 이상의 SQLupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft

수락 된 답변은 비밀번호를 설정하고 나를 위해 일했습니다.
MikeKulls

1
@ James와 마찬가지로 고맙습니다.이 문제를 해결하기 위해 허용 된 답변과 결합해야했습니다.
벤 에버 라드

39

내 경험에 대한 참고 사항 인이 경로 아래에서 구성 파일을 찾을 수 있습니다 /etc/mysql/mysql.conf.d/mysqld.cnf.

(나는이 길을 찾기 위해 한동안 고투했다)


1
사용중인 배포판에 따라 크게 달라집니다. 가장 좋은 방법은 그냥 검색 할 수 있습니다 :sudo find /etc -iname 'mysql*.cnf'
마틴 코네 크니

'찾기'명령에 감사드립니다. 커맨드 라인을 처음 사용하므로 매우 유용합니다. 감사!
Heres2u

나는이 unswer를 찾을 때까지 /etc/mysq/conf.d/mysql.cnf를 편집하는 데 어려움을 겪었습니다.
Gayan Kavirathne

26

제 경우에는 cent OS에서 원격 mysql 서버에 연결하려고했습니다. 많은 솔루션 (모든 권한 부여, IP 바인딩 제거, 네트워킹 사용)을 거친 후에도 여전히 문제가 해결되지 않았습니다.

다양한 솔루션을 살펴보면서 iptables를 발견했는데 mysql 포트 3306이 연결을 수락하지 않는다는 것을 알게되었습니다.

다음은이 문제를 확인하고 해결 한 방법에 대한 작은 메모입니다.

  • 포트가 연결을 수락하는지 확인 :
텔넷 (mysql 서버 ip) [portNo]
  • 포트에서 연결을 허용하기 위해 ip 테이블 규칙 추가 :
iptables -A 입력 -i eth0 -p tcp -m tcp --dport 3306 -j 수락
  • 프로덕션 환경에서는 권장하지 않지만 iptables가 올바르게 구성되지 않은 경우 규칙을 추가해도 문제가 해결되지 않을 수 있습니다. 이 경우 다음을 수행해야합니다.
서비스 iptables 중지

도움이 되었기를 바랍니다.


17

MySQL 사용자에 대한 와일드 카드 원격 액세스를 설정하려면 아래 언급 된 단계를 따르십시오.

(1) cmd를 엽니 다.

(2) C : \ Program Files \ MySQL \ MySQL Server 5.X \ bin 경로로 이동하여이 명령을 실행하십시오.

mysql -u 루트 -p

(3) 루트 비밀번호를 입력하십시오.

(4) 다음 명령을 실행하여 권한을 제공하십시오.

모든 비밀번호를 *. *에 부여하여 '비밀번호'로 식별 된 'USERNAME'@ 'IP'에 부여하십시오.

USERNAME : MySQL 서버에 연결하려는 사용자 이름입니다.

IP : MySQL 서버에 대한 액세스를 허용하려는 공용 IP 주소.

비밀번호 : 사용 된 사용자 이름의 비밀번호입니다.

IP를 %로 대체하여 사용자가 모든 IP 주소에서 연결할 수 있습니다.

(5) 다음 명령에 따라 권한을 플러시하고 종료하십시오.

홍당무;

출구; 또는 \ q

여기에 이미지 설명을 입력하십시오


3
그렇게 한 후에도 루트는 여전히 액세스가 거부되었습니다. 내가 무엇을 놓쳤습니까?
teapeng

4 단계에서 % 대신 로컬 시스템 IP 주소로 시도 할 수 있습니다. 작동해야합니다. %는 모든 IP 주소를 의미합니다.
Hiren Parghi

6

MySQL 서버 프로세스가 127.0.0.1 또는 :: 1에서만 수신 대기중인 경우 원격으로 연결할 수 없습니다. 이 bind-address설정 /etc/my.cnf이 있으면 문제의 원인 일 수 있습니다.

또한 비 localhost사용자에게도 권한을 추가해야합니다 .


이상하게도, 서버가 어떻게 다른 IP를 "듣기"할 수 127.0.0.1있을까요?
Pacerier

2
@Pacerier 127.0.0.1은 루프백 인터페이스에만 바인딩됩니다. 외부 연결이 작동하지 않습니다. 시스템에는 종종 여러 개의 네트워크 인터페이스가 있으며 각 인터페이스는 구체적으로 바인딩해야하거나 bind-all 0.0.0.0 주소를 사용할 수 있습니다.
tadman

6

MySQL을 설치했다면 brew실제로는 기본적으로 로컬 인터페이스에서만 수신합니다. 편집 필요 해결하려면 /usr/local/etc/my.cnf및 변경 bind-address에서 127.0.0.1*.

그런 다음를 실행하십시오 brew services restart mysql.


1
내 우분투 16.04.4 서버의 경우 bind-address 설정은 /etc/mysql/mysql.conf.d/mysqld.cnf
Frank

이것은 단지 brew를 사용하는 것이 아니며, 모든 MySQL은 로컬 연결 만 허용하도록이 기본 설정을 갖습니다.
nivs1978

6

원격 로그인을위한 모든 프로세스. 원격 로그인은 기본적으로 해제되어 있습니다. 모든 ip에 대해 수동으로 열어야합니다.

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

특정 Ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

그때

flush privileges;

사용자 호스트 및 비밀번호를 확인할 수 있습니다

SELECT host,user,authentication_string FROM mysql.user;

이제 당신의 임무는 이것을 바꾸는 것입니다

bind-address = 127.0.0.1

당신은 이것을 찾을 수 있습니다

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

거기에서 이것을 찾지 못하면 이것을 시도하십시오

sudo nano /etc/mysql/my.cnf

이 코멘트

#bind-address = 127.0.0.1

그런 다음 Mysql을 다시 시작하십시오.

sudo service mysql restart

이제 원격 로그인을 즐기십시오


3

참고로 몇 시간 동안이 문제로 머리카락을 뽑았습니다. 마침내 호스팅 업체에 전화를 걸어 1and1의 제어판에서 클라우드 서버를 사용하는 경우 방화벽을 추가하고 포트를 추가 해야하는 보조 방화벽이 있음을 발견했습니다 3306. 일단 추가되면 곧바로 ..


이것은 귀하의 상황에 따라 매우 다릅니다. 나는 네트워킹에 대한 끝없는 지식의 원천은 아니지만이 솔루션이이 문제에 잘 적용될 것이라고 확신합니까?
Sandy Gifford

2
나는이 문제도 가지고있다. 클라우드 호스팅 서버와 공통
Matthew Lock

2

방화벽 서비스가 실행중인 경우 방화벽 포트 3306이 열려 있는지 확인하십시오.



1

그리고 OS X 사용자의 경우 bind-address 매개 변수는 일반적으로 my.ini 파일이 아니라 시작된 plist에 설정됩니다. 그래서 내 경우에는에서 제거 <string>--bind-address=127.0.0.1</string>했습니다 /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


plist 파일의 대체 위치 :~/Library/LaunchAgents
Dylan Nissley

1

경우 mysqld가지고 바인딩 어드레스 루프백 / 로컬 어드레스 (예로 세트 127.0.0.1) 루프백 인터페이스가 원격 호스트에 도달 할 수 없기 때문에, 서버는 원격 호스트로부터 도달 할 수 없다.

한 인터페이스에서만 연결을 허용하려는 경우 모든 호스트 또는 다른 외부 도달 가능 주소로의 연결을 허용 하려면이 옵션을 0.0.0.0( ::IPv4 + 6의 경우)로 설정하십시오 .

출처


0

때로는 Windows에서 PC의 이름 을 사용해야 합니다

첫 번째 단계) mysql의 구성 파일에 넣으십시오.

mysqld.cnf SET 바인드 주소 = 0.0.0.0

(tcp / ip를 통한 연결을 허용하기 위해)

두 번째 단계) MySQL이 아닌 테이블 사용자 를 Windows 속성 의 PC 이름으로 IP가 아닌 사용자로 설정하십시오.

여기에 이미지 설명을 입력하십시오


0

원격 루트 액세스를 활성화하면 위험 할 수 있습니다. 더 제한적인 권한으로 사용자 계정을 설정하는 것이 좋습니다. 다음 세 단계를 수행해야합니다.

  1. bind-address ...my.ini 또는 my.cnf 파일에서 시작하는 줄 이 적어도 주석 처리되어 있는지 확인하십시오 . 존재하지 않는 경우 계속 진행하십시오. 이 파일은 C:\ProgramData\MySQL\MySQL Server 8.0Windows 에서 찾을 수 있습니다 .

  2. 그런 다음 연결을 설정하려는 사용자 계정이 localhost호스트 제한으로 제한 필드에 없는지 확인하십시오 . 권장되지는 않지만 대신 %테스트 목적으로 해당 필드에 넣을 수 있습니다 . MySQL Workbench로 서버에 대한 로컬 연결을 연 다음 메뉴 표시 줄에서 서버> 사용자 및 권한으로 이동하여 연결하려는 사용자 계정을 찾으면됩니다.

"호스트 일치 일치"필드는 로컬이 아닌 연결을 허용하지 않습니다. 즉, 허용 된 연결을 IP 주소 패턴으로 제한합니다. 이상적으로는 고정 IP 주소 또는 서브넷에서 MySQL 서버에 액세스하여 가능한 한 제한적이어야합니다.

  1. 방화벽은 MySQL 서버 애플리케이션이 원하는 포트를 통해 통신 할 수 있도록해야합니다. 사용자와 서버 사이의 물리적 네트워킹 장비는 연결하려는 포트에서 통신 할 수 있어야합니다. (일반적으로 포트 3306)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.