다른 PC MySQL에 원격 접속하기 - 삽질 일기

김지섭·2025년 6월 9일
0

집에서 개발용 데스크탑으로 MySQL 돌리고, 밖에서는 노트북으로 작업하고 싶었다. 그냥 IP만 바꾸면 될 줄 알았는데... 세상에 이렇게 빡셀 줄이야.

환경

  • 데스크탑: MySQL 8.0 설치됨 (Windows 10)
  • 노트북: DataGrip으로 접속하려고 함
  • 서로 다른 네트워크 (공인IP 사용)

첫 번째 시도: 그냥 연결해보자

DataGrip에서 데스크탑 IP 넣고 연결 시도.

Connection refused

당연히 안 되더라. 아 맞다 방화벽.

두 번째 시도: 방화벽만 열면 되겠지?

Windows 방화벽에서 3306 포트 열어줌.

Connection timed out

여전히 안 됨. 뭐지?

세 번째 시도: MySQL 설정 문제인가?

찾아보니 MySQL이 기본적으로 localhost에서만 접속 받는다고 함.

my.ini 파일 찾아서 수정:

[mysqld]
bind-address = 0.0.0.0
port = 3306

MySQL 재시작하고 다시 시도.

Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server

오 뭔가 진전이 있다! 이제 연결은 되는데 권한이 없다는 뜻.

네 번째 시도: 사용자 권한 설정

이 부분에서 좀 헤맸다. MySQL에 루트로 접속해서:

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';
FLUSH PRIVILEGES;

여기서 %가 모든 IP를 허용한다는 뜻이었다. 처음엔 몰랐음.

연결 테스트

한번 테스트해보자.

C:\Users\me>ping xxx.xxx.xxx.xxx

핑은 잘 됨.

C:\Users\me>telnet xxx.xxx.xxx.xxx 3306

여기서 이상한 게 나왔다:

8.0.37w,y-Qp
;*^S,]Sj7K
caching_sha2_password !#08S01Got packets out of order
연결이 끊어짐

뭐지 이게? 에러인가?

찾아보니 이게 정상이었다. MySQL 서버가 응답하는 거라고. telnet은 텍스트 기반인데 MySQL은 바이너리 프로토콜을 쓰니까 이상하게 보이는 것뿐.

중요한 건 연결이 된다는 것!

DataGrip 설정

이제 DataGrip에서 연결해보자.

Host: xxx.xxx.xxx.xxx
Port: 3306
Database: mydatabase
User: myuser
Password: mypassword

Test Connection 클릭... 또 에러.

MySQL 8.0부터 인증 방식이 바뀌었다고 함. Advanced 탭에서 몇 가지 더 설정:

  • allowPublicKeyRetrieval: true
  • useSSL: false
  • serverTimezone: Asia/Seoul

이제 됐다!

삽질하면서 배운 것

  1. MySQL 기본 설정은 보안을 위해 외부 접속을 막아놨다
  2. 사용자 권한에서 'user'@'localhost''user'@'%'는 다른 사용자다
  3. MySQL 8.0은 인증 방식이 달라져서 클라이언트 설정이 좀 까다롭다
  4. telnet으로 포트 확인하는 게 디버깅에 도움됨

주의사항

지금은 개발용이라 대충 했는데, 실제 서비스에서는:

  • 특정 IP만 허용하거나
  • VPN 써서 접속하거나
  • 더 복잡한 비밀번호 쓰거나

보안 신경써야 할 듯.

결론

생각보다 복잡했지만 한번 설정해두니까 편하다. 이제 집에서든 밖에서든 같은 DB 쓸 수 있어서 개발이 훨씬 수월해졌다.

근데 왜 이런 기본적인 것도 이렇게 복잡하게 만들어놨을까... MySQL 문서도 좀 더 친절했으면 좋겠다.

profile
백엔드 행 유도 미사일

0개의 댓글