[MySQL] 로컬DB 외부접속 설정하기

김나윤·2025년 1월 12일
0

MySQL

목록 보기
1/1

Skyscanner 콜론코딩 플젝을 하기로 결정하고 데이터베이스로 MySQL을 사용하기로 결정했다.
그래서 서로 데이터를 공유할 수 있게 MySQL에서 연동하는 과정이 필요했는데 생각보다 잘 되지 않았다.
무려 5시간이나 걸려서 겨우 해결했다..
해결까지 시간이 오래 걸렸을 뿐만 아니라 여러 자료들을 보다보니 정리가 잘 안 되는 것 같아 포스트로 요약해봐야겠다는 생각이 들었다.


문제원인을 찾다가 아래 블로그들을 통해 포트 포워딩에 대해 알게 되었다.
포트 포워딩이 무엇인지에 대해 알게 쉽게 설명해주셔서 어려움 없이 이해할 수 있었다.

두번째 블로그에서 포트 포워딩을 진행하기 전, 사용자 추가와 사용자 권한부여를 먼저 했는데
해당 과정을 먼저 진행하긴 했지만 잘 안 됐던 것인지 포트 포워딩 후 따로 설정을 한번 더 해줬다.

1. my.ini 파일 수정하기

C:\ProgramData\MySQL\MySQL Server 8.0 으로 들어가 my.ini 파일을 열어 mysql 관련 설정을 수정한다.

[mysql] no-beep 이라고만 되어있던 부분에 bind-address=0.0.0.0 을 추가해주었다.
블로그 필자분과는 다르게 나는 애초에 bind-address 부분이 없어 따로 작성해주었다.


2. 방화벽 설정하기(Window)

제어판>시스템 및 보안>Windows Defender 방화벽에 들어가면,

좌측에 있는 고급설정 메뉴를 인바운드 규칙 > 새 규칙 에서
규칙 종류: 포트
프로토콜: TCP
특정 로컬 포트: 3306 (처음 MySQL 설정을 할 때 기본값이었던 3306으로 설정해두었다.) 를 순서대로 선택해준다.

이 부분도 블로그 필자분과 다르게 마지막 단계에서 이름을 설정하라고 하길래 임의로 짓고 완료했다.

모든 단계를 완료하면 새로운 인바운드 규칙이 등록된 것을 확인할 수 있다.


3. 포트 포워딩

공유기를 사용하게 되면 외부에서 내 pc 주소를 특정할 수 없다고 한다. 따라서 내 ip를 사용하더라도 내 로컬DB에 접근할 수 없다. 이때 외부에서 내 로컬로 연결하기 위해 포트 포워딩을 사용하는데,

내 PC ip 확인하기

Window + R > cmd > ipconfig 를 통해 내 ip를 알아낸다.
알아낸 ip를 구글 주소창에 입력하면 해당 공유기 회사로 연결된다.

이때 아이디와 비밀번호를 입력해주어야 하는데 회사마다 차이가 있다고 하고 SK의 경우,

아이디: admin
비밀번호: (유선MAC 뒤 문자 6개) + _admin

처음에 공유기를 들어볼 생각을 하지 않고 옆쪽만 보았는데 아무리 봐도 무선랜 암호만 있고 유선이라는 글자가 안 보이길래 뭐지 싶었다.
알고 보니 공유기 바닥에 있던 것...

처음 들어가면 비밀번호 변경창이 뜨는데 그냥 무시하고 상단의 고급설정 > NAT/라우터 > 포트포워드 로 들어갔다.

프로토콜: TCP/UDP
외부 포트 시작: 3306
외부 포트 끝: 3306
내부 IP 주소: (ipconfig로 확인한 개인 ip)
내부 포트 시작: 3306
내부 포트 끝: 3306

4. 외부에서 MySQL DB Server 접근하기

드디어 MySQL에서 외부와 연결하기 위한 설정을 해주면 된다.
설정은 로컬 사용자와 외부 사용자 각각의 계정에서

1) 내 DB 설정하기

내 DB를 설정할 때는 내부 ip를 사용하면 된다. 포트 포워딩을 통해 외부에서 내부로 들어오는 경로는 마련해두었기 때문이다.

먼저 내가 사용할 계정을 새로 생성해준다.
local을 host로 하는 root 계정으로 들어가 Navigator > Management > Users and Privileges 를 선택한다.
여기서 Add Account 를 통해 새로운 계정을 추가할 수 있다.

Login Name: (각자 사용할 이름, 나는 newuser로 결정!)
Limit to Hosts Matching: 로컬 내부 ip

그러고 나서 WorkBench 홈으로 돌아가 새로운 Server Connections 를 생성해준다.

Connection Name: (각자 원하는 이름)
Hostname: 로컬 내부 ip
Port: 3306 (나는 포트 포워딩 할 때, 외부 포트를 3306으로 설정해둠)
Username: 위에서 새로 생성한 권한을 줄 user 이름 (나는 newuser 로 설정해둠)
Password: (계정 생성시 본인이 설정한 비밀번호)

이렇게 설정해두고 Test Connection 을 해보니 정상적으로 작동했다.

2) 외부에서 DB 접속하기

외부에서 접근하는 방법도 동일하지만 새로운 Server Connections 와 사용자 계정을 생성할 때, Hostname으로 접속하려는 PC의 외부 ip를 사용한다는 점이 다르다.

cmd > curl ipinfo.io 를 입력하면 ip 주소에 대한 정보가 나오는데, 이게 바로 외부 ip이다. 먼저 외부 ip를 먼저 확인하고 내부에서 DB에 접근하기 위해 했던 단계를 그대로 진행하면 된다.

사용자 계정을 새로 생성하고 Hostname을 연결하고자 하는 PC의 외부ip로 연결하니 마찬가지로 성공적으로 테스트가 완료 되었다.

이렇게 외부에서 newuser2라는 새로운 계정이 내 로컬에 접근할 수 있게 되었다.
감격ㅠㅠㅠㅠㅠㅠ
블로그 분들 너무 감사해요ㅠㅠㅠㅠ



+ (추가)

정말 외부에서 접근할 수 있는지 궁금해서 내 노트북(로컬)으로 테이블을 하나 만들어 보았다.
그리고 친구한테 데이터가 확인되냐고 물어봤는데 웬걸...

스키마에 아무것도 안 뜨고 Users and Privileges도 백지인 것..
뭔가 이상하다 싶었는데 제일 먼저 의심이 갔던 건 내가 권한부여를 안 했었나? 였다.
혼자 이것저것 설정 만져볼 때도 권한부여를 하지 않으니 이처럼 백지로 떴었기에 가장 먼저 확인해보았지만 권한부여를 한 듯 싶었다.
아닌가 싶었는데 친구도 마찬가지로 "나한테 권한을 안 준 거 아니야?"라고 하길래 다시 한번 훑어봤더니
newuser 계정으로 권한 주려고 했던 것...히힣...

그래서 다시 root 계정으로 들어가 내가 권한을 주고자 하는 newuser2를 선택하고 Schema Privileges > Add Entry... > Schema > All Schema (%) 를 선택 후 적용시켜주니 상대방 PC에서 정상적으로 내가 생성한 테이블을 확인할 수 있었다.

진짜 해결! 이제 정말 DB 기본 세팅 끝~!!

profile
Hello, world!

0개의 댓글