MySQL - 외부에서 로컬 DB 서버 접속하기 (DB 서버 구축)

Preview

  • 집에서 구축해놓은 개인 DB 서버를 다른 외부 환경(포스팅에서의 환경은 회사ㅎㅎ...)에서 접속하여 테스트하기
  • 집에 구축한 개인 DB 서버를 연결 테스트 한 화면

MySQL 외부 접속 예시 화면
MySQL 외부 접속 예시 화면


준비물

  • 안쓰는 컴퓨터 혹은 SBC(라즈베리파이 등)
    • 개인 서버이고 개발용이기 때문에 서버 컴퓨터까지는 고려 하지 않음!

 

 

 

 

포스팅에서의 환경

  • 구축할 DB 서버의 사양 (안쓰는 노트북)
    • Bit : 32비트 운영 체제
    • OS : 윈도우 10
    • Memory : 3GB
    • CPU : i5 M 430 (2010년식 듀얼코어 2.25GHz)
  • 요약 : 사양 안좋음

구축할 MySQL DB 서버 설정

* 이 포스팅은 MySQL이 설치되어있다는 전제하에 진행합니다.

* 구축할 컴퓨터는 32비트이며 MySQL Server를 설치하여 진행하였습니다.


MySQL 포트 확인&설정하기

구축할 DB 서버가 어떤 포트를 사용하는지 알아야 해당 포트로 DB 서버를 이용할 수 있습니다.

MySQL의 경우 보통은 3306의 포트를 사용하지만 특수한 경우가 존재할 수 있어 포트를 확인해보는 것이 좋습니다.

 

  • 시작 - 'MySQL Installer' 검색 - 프로그램 실행

윈도우에서 MySQL Installer 프로그램을 찾는 예시 화면
윈도우에서 MySQL Installer 프로그램을 찾는 예시 화면

 

  • MySQL Server 우측의 Reconfigure 클릭

MySQL Installer 실행 화면
MySQL Installer 실행 화면

 

  • 아래의 그림처럼 포트를 확인하거나 또한 다른 포트 번호로 변경할 수 있습니다.
    • 포스팅에서는 포트 번호를 '3306'이 아닌 의도적으로 '413'으로 바꿔서 포스팅을 진행하였습니다.

MySQL Installer Type and Networking 설정 예시 화면
MySQL Installer Type and Networking 설정 예시 화면

 

 

 

 


MySQL 사용자 권한 설정

외부 접속을 허용할 사용자와 권한을 설정합니다.

 

  • 시작 - 'command line' 검색 - 프로그램 실행
    • 버전은 각 환경마다 다를 수 있으니 신경 쓰지 않으셔도 됩니다.

윈도우에서 MySQL Command Line Client 프로그램을 찾는 예시 화면
윈도우에서 MySQL Command Line Client 프로그램을 찾는 예시 화면

 

  • 비밀번호를 입력하면 MySQL 콘솔 창이 나옵니다.

MySQL Command Line Client 실행 화면
MySQL Command Line Client 실행 화면

 

  • 외부 접속을 허용할 유저를 만듭니다.
    • 사용자명 : MySQL 서버에 로그인할 사용자의 이름을 정의
    • 호스트 : 접속을 허용할 호스트 정의
    • 비밀번호 : MySQL 서버에 로그인할 사용자의 비밀번호 정의
<!-- 유저 생성 기본 구문 -->
CREATE USER '사용자명'@'호스트' IDENTIFIED BY '비밀번호';

 

  • 각각 'tester' / '1234' 라는 이름과 비밀번호를 가진 유저 생성
    • 호스트의 '*' 표시는 모든 곳에서 접속을 허용한다는 의미입니다.
    • 특정 아이피만 접속을 허용 하고 싶을 경우, 호스트 부분에 특정 아이피를 적어주시면 됩니다.
CREATE USER 'tester'@'*' IDENTIFIED BY '1234';

MySQL Command Line Client 에서 유저를 생성한 예시 화면
MySQL Command Line Client 에서 유저를 생성한 예시 화면

 

  • 외부 접속한 사용자의 권한을 설정합니다.
    • GRANT ALL PRIVILEGES : 데이터베이스의 모든 권한 부여
    • 데이터베이스명 : 권한을 부여할 데이터베이스명
    • 사용자명 : 권한을 부여받을 사용자명
<!-- DB 권한 설정 기본 구문 -->
GRANT ALL PRIVILEGES ON 데이터베이스명 TO 사용자명;

 

 

 

 

  • 'tester' 사용자에게 'flutter_memo_app'이라는 데이터베이스에 모든 권한주기
GRANT ALL PRIVILEGES ON flutter_memo_app.* TO 'tester'@'%' IDENTIFIED BY '1234';

 

  • 'tester' 사용자에게 모든 데이터베이스에 대한 권한 주기
GRANT ALL PRIVILEGES ON *.* TO 'tester'@'%' IDENTIFIED BY '1234';

MySQL Command Line Client 에서 유저의 권한을 주는 예시 화면
MySQL Command Line Client 에서 유저의 권한을 주는 예시 화면

 

  • 변경된 권한 설정을 적용하기 위해 다음 명령어를 실행합니다.
FLUSH PRIVILEGES;

권한 설정 적용을 위한 예시 화면
권한 설정 적용을 위한 예시 화면

 

 

 

 


내부 포트 열기 (방화벽 해제)

  • 시작 - 설정 - 제어판

윈도우에서 제어판을 찾는 예시 화면
윈도우에서 제어판을 찾는 예시 화면

 

  • 시스템 및 보안

제어판에서 시스템 및 보안 경로 예시 화면
제어판에서 시스템 및 보안 경로 예시 화면

 

  • Windows Defender 방화벽

제어판 - 시스템 및 보안에서 Windows Defender 방화벽을 찾는 예시 화면
제어판 - 시스템 및 보안에서 Windows Defender 방화벽을 찾는 예시 화면

 

  • 좌측의 '고급 설정'

Windows Defender 방화벽의 고급 설정을 찾는 예시 화면
Windows Defender 방화벽의 고급 설정을 찾는 예시 화면

 

  • 좌측의 '인바운드 규칙' 클릭
  • 우측의 인바운드 규칙에서 '새 규칙'

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면

 

  • 프로그램

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 규칙 종류
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 규칙 종류

 

  • 모든 프로그램

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 프로그램
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 프로그램

 

  • 연결 허용

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 작업
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 작업

 

  • 규칙 적용 시기 모두 체크

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 프로필
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 프로필

 

  • 식별 가능한 이름과 설명 입력
  • 마침

고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 이름
고급 보안이 포함된 Windows Defender 방화벽 인바운드 규칙 설정 화면 - 이름

 

  • 추가한 인바운드 규칙 더블 클릭 (특정 포트만 열어주기 위해서 진행)
  • 이 작업은 모든 포트가 열려있는 상태이기 때문에 모든 포트를 열어도 상관 없으면 따로 진행하지 않으셔도 됩니다.

MySQL 외부 접속을 위한 인바운드 규칙 추가 예시 화면
MySQL 외부 접속을 위한 인바운드 규칙 추가 예시 화면

 

  • 프로토콜 및 포트 탭 이동
    • 프로토콜 종류 : TCP
    • 로컬 포트 : 특정 포트 / MySQL 포트 번호 입력

추가한 인바운드 규칙의 프로토콜 및 포트 설정 예시 화면
추가한 인바운드 규칙의 프로토콜 및 포트 설정 예시 화면

 

 

 

 


외부 포트 허용하기 (포트 포워딩)

참고

* 이 포스팅에서는 공유기가 설치되어 있는 네트워크를 기준으로 작성되었습니다.

* iptime 공유기를 기준으로 설명합니다.

+ 꼭 iptime이 아니여도 웬만하면 192.168.0.1 주소로 접속하면 설정 페이지가 나옵니다. 저 또한 iptime 공유기가 아니며 sk 공유기 입니다. 설정 페이지가 나오지 않을 경우, 인터넷에 사용중인 공유기 이름과 함께 포트 포워딩 키워드를 검색하시면 쉽게 확인할 수 있습니다.


내부 아이피 주소 확인하는 방법

  • 시작 - '실행' 검색 - 프로그램 실행 - 'cmd' 입력 후 확인

명령 프롬프트를 실행하기 위한 실행 창에서 cmd 입력 화면
명령 프롬프트를 실행하기 위한 실행 창에서 cmd 입력 화면

 

  • 아래의 명령어를 입력하여 내부 아이피 확인
ipconfig


iptime 포트 포워딩 설정하기

  • 주소창에 '192.168.0.1' 입력
  • 사용자 로그인 - 관리도구

iptime 포트 포워딩 설정을 위한 메인 화면
iptime 포트 포워딩 설정을 위한 메인 화면 <출처 iptime>

 

  • (좌측 메뉴에서) 고급 설정 - NAT/라우터 관리 - 포트 포워드 설정

iptime 포트 포워딩 설정 화면
iptime 포트 포워딩 설정 화면 <출처 iptime>

 

  • 포트포워드 규칙 생성
    • 규칙이름 : 식별 가능한 이름, 사용자가 정의
    • 내부 IP 주소 : 포트 포워딩 할 내부 IP 주소 (위에서 확인한 내부 IP 주소)
    • 프로토콜 : TCP
    • 외부 포트 : 3306 (외부에서 접속할 포트 번호)
      • 3306은 MySQL 기본 설정 포트 번호이며, 사용자에 따라 다르게 설정할 수 있습니다.
    • 내부 포트 : 413 (내부에서 열어준 포트 번호)
      • 3306은 MySQL 기본 설정 포트 번호이며, 포스팅에서는 내부 포트를 413으로 설정하였음
      • 물론 외부 포트도 함께 동일하게 413으로 하셔도 됩니다.
  • 적용

iptime 포트 포워딩 설정 화면 - 규칙 추가
iptime 포트 포워딩 설정 화면 - 규칙 추가 <출처 iptime>

 

  • 포트 포워드 규칙이 생성되었는지 확인

iptime 포트 포워딩 설정 화면 - 추가된 규칙 확인 예시 화면
iptime 포트 포워딩 설정 화면 - 추가된 규칙 확인 예시 화면 <출처 iptime>

 

 

 

 


외부에서 MySQL DB 서버 접속하기

외부 아이피 주소 확인하는 방법

  • 시작 - '실행' 검색 - 프로그램 실행 - 'cmd' 입력 후 확인

명령 프롬프트를 실행하기 위한 실행 창에서 cmd 입력 화면
명령 프롬프트를 실행하기 위한 실행 창에서 cmd 입력 화면

 

  • 아래의 명령어를 입력하여 외부 아이피 확인
curl ipinfo.io

외부 아이피 확인 예시 화면
외부 아이피 확인 예시 화면


외부에서 구축한 MySQL DB 서버 접속하기

  • (다른 환경의 컴퓨터에서) MySQL Workbench 실행
  • 홈 화면에서 MySQL Connections 바로 오른쪽의 + 버튼 클릭

MySQL Workbench 실행 화면
MySQL Workbench 실행 화면

 

  1. New 버튼을 눌러 새로 접속할 커넥션 생성
  2. Connection Name : 접속할 커넥션을 식별할 이름 정의
  3. 파라미터 정보 입력
    • Hostname : 위에서 확인한 외부 아이피
    • Port : 설정한 포트포워딩의 외부 포트 번호, 내부 포트 번호 아님!
    • Username : 외부에서 접속할 사용자명, 권한 설정한 사용자가 아니면 접속 되지 않습니다.
  4. Test Connection 버튼을 눌러 접속 되는지 확인
  5. 접속할 사용자의 비밀번호 입력 - OK

MySQL Workbench에서 외부 데이터베이스를 접속하기 위한 설정 화면
MySQL Workbench에서 외부 데이터베이스를 접속하기 위한 설정 화면

  • 접속 성공

MySQL 데이터베이스의 외부 접속이 성공된 화면 예시
MySQL 데이터베이스의 외부 접속이 성공된 화면 예시


PS

  • 테스트로 생성한 유저는 지워줍시다.
DROP USER 사용자명@호스트;

테스트로 생성한 데이터베이스 유저 정보를 지우는 예시 화면
테스트로 생성한 데이터베이스 유저 정보를 지우는 예시 화면


참고