30분정도 삽질을 한 끝에 성공한 안드로이드에서 MySQL 원격 접속하는 방법을 정리하고자 합니다.
저의 경우 Oracle Cloud 에 올린 인스턴스에 직접 MariaDB를 깔고 그 서버에 원격접속했습니다.
하지만 AWS나 GCP 같은 경우도 비슷하게 해결할 수 있을 겁니다.
과정은 다음과 같습니다.
- DB설치 (설명 생략, 구글과 함께라면 할 수 있습니다)
- MySQL 포트인 3306 포트 열기 (오라클 클라우드 네트워크 세팅)
- IPTABLE 포트 열기
- 마리아DB에서 모든 호스트로 접속가능하면서, 접속할 데이터베이스에 대해 모든 권한을 갖고 있는 유저 생성
(기본적으로 root 는 로컬호스트로만 접속이 가능하도록 되어 있기 때문) - 최종삽질의 원인인 마리아DB설정 파일 수정하고 디비 껐다 키기
- 접속할 안드로이드 앱에 서버 정보 넣기
우선 DB설치를 했다는 가정하에서 설명하겠습니다.
설치가 끝났으면 오라클 클라우드 네트워크 세팅에서 포트를 열어줍니다.
세팅 창에 들어가는 방법은 다양하지만 제가 사용하는 방법을 적겠습니다.
저는 이렇게 만들어둔 인스턴스 목록에서 포트를 열어줄 인스턴스를 선택합니다.
여기에서 ChordEverdu 인스턴스로 가겠습니다.
이 인스턴스에는 마리아DB가 깔려있습니다.
연결된 VNIC 를 선택합니다.
공용 서브넷을 클릭합니다.
보안 목록을 클릭합니다.
이제 포트를 열어줄 수 있는 설정 창이 나왔습니다.
수신 규칙 추가를 눌러줍니다.
다음과 같이 입력합니다.
'소스'는 접속하는 클라이언트와 관련된 정보입니다.
그래서 0.0.0.0/0 은 서버에 접속하는 모든 IP의 모든 포트에 대해 이 규칙을 적용한다는 뜻입니다.
우리는 3306 포트를 허용할 예정이므로 3306 포트를 대상 포트에 적어주고,
소스포트범위는 모두로 둡니다.
다음과 같이 수신규칙이 추가되었다면 완료입니다.
다음으로 서버 내 방화벽에서 포트를 열어줍니다.
'iptables 포트 열기' 로 검색하면 포트 여는 방법이 구글에 쭉 나옵니다.
아래 명령어를 입력하여 포트를 열어줍니다.
sudo iptables -I INPUT 1 -p tcp --dport 3306 -j ACCEPT
sudo iptables -I OUTPUT 1 -p tcp --sport 3306 -j ACCEPT
이제 DB에서 새 유저를 생성해줍니다.
관리자 계정인 루트로 DB에 접속합니다.
mysql 데이터베이스로 이동합니다. (use mysql; 실행)
USER 테이블에서 호스트와 유저를 조회해봅니다.
저는 호스트가 %로 어떤 호스트에서도 접속이 가능한 ubuntu 유저를 생성해주었습니다.
이 유저명과 호스트가 나중에 원격접속할 때 사용되므로 기억해둡니다.
이런 유저가 없다면 위처럼 로컬호스트 이외로 접속이 가능한 계정을 생성합니다.
다음으로 이 유저에게 원격접속할 데이터베이스에 대한 권한을 부여합니다.
저는 다른 오류가 생길 여지를 주지 않으려고, 데이터베이스 하나에 대해 모든 권한을 다 주었습니다.
(유저에게 권한을 부여하는 것 역시 검색으로 해결가능합니다.)
검색하라고 떠넘기는 것 같아보이지만 이 글은 해결 흐름을 설명하는데 중점을 두고 싶어서
자잘한 부분은 최대한 건너뛰고자 합니다..ㅎ
아직 끝나지 않았습니다..!
여기까지만 설정하고 원격접속을 시도한다면
Communication link failure The last packet sent successfully to the server
라는 오류와 마주하게 됩니다.
즉 서버한테 내가 보낸 패킷이 전송은 됐는데, 응답은 안온다는 오류가 뜹니다.
구글링을 통해 수많은 해결책을 볼 수 있었지만, 제가 해결한 방식은 데이터베이스 설정파일 수정입니다.
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
우분투 20.04 LTS 기준, 이 명령어를 입력하면 마리아DB 서버 설정파일로 들어갈 수 있습니다.
bind-address 부분을 다음과 같이 수정해줍니다.
(만약을 대비해, 원본 설정파일은 꼭 다른 이름으로 복사해둡니다!)
저장하고 나와서 마리아DB를 재시작합니다.
sudo service mysqld restart
명령어를 입력하여 재시작할 수 있습니다.
다 끝났습니다. 이제 원격접속을 해볼 차례입니다.
저는 2가지 앱에서 테스트를 해봤습니다.
첫번째 앱입니다.
이렇게 뜹니다.
우측하단 + 버튼을 눌러줍니다.
아까 설정했던 정보를 넣어줍니다.
아까 생성한 계정을 Database User에 넣어줍니다.
우분투 계정명과 헷갈리지 않도록 주의합니다.
비밀번호는 매번 입력하는게 귀찮다면 넣어줍니다.
이렇게만 하면 정말 징글징글한 이 오류가 뜹니다.
이 앱은 원격접속 설정도 같이 넣어줘야 합니다. (귀찮..)
Using SSH 에 체크하고
내가 원격접속하는데 필요한 정보를 모두 넣어줍니다.
SSH User 는 Db와 다른 계정이니 헷갈리지 않도록 주의합니다.
또 SSH local port 는 원격접속 후, 그 안 로컬에서 접속하는 포트입니다.
PassPhrase 가 있다면 그것도 입력해줍니다.
성공한 모습입니다.
저는 ym_music 이라는 데이터베이스를 루트에서 만들고
이 ubuntu 계정에 권한을 주어서 접속할 수 있도록 해주었습니다.
이제 두번째 앱을 소개하겠습니다.
광고가 많아서 정말 귀찮은게 단점입니다..
이 앱입니다.
아까 앱이랑 비슷하게 생겼습니다.
우측하단 + 버튼을 눌러줍니다.
이렇게 나옵니다.
Select a Vendor 에서 DB 종류를 고릅니다.
MySQL/MariaDB 를 선택하고
아래 정보들을 필요한 만큼 채워줍니다.
이때 이 앱에서는 SSH 정보를 넣지 않아야 접속이 되니 주의합니다.
(왜 앱마다 사용 방법이 이렇게 다른거야 ㅋㅋㅋ)
성공한 모습입니다.
이 앱은 테이블 데이터 관리를 GUI로 할 수 있어서 편리합니다.
이렇게 안드로이드에서 DB를 원격접속하는 방법을 알아보았습니다.
'Infra > 오라클 클라우드' 카테고리의 다른 글
[오라클 클라우드] curl 에서 'no route to host' 가 뜨는데 핑은 잘 가는 경우 (feat. ChatGPT) (0) | 2023.03.17 |
---|---|
[Powershell] ssh 인스턴스 원격 접속 방법 (0) | 2022.08.14 |
[오라클 클라우드(Oracle Cloud)] Toad for MySQL SSH 접속하기 (0) | 2021.04.10 |
[오라클 클라우드(Oracle Cloud)] Atom SFTP 연결하기 (2) | 2021.04.08 |
오라클 클라우드(Oracle Cloud)로 SVN 개인서버 만들기 (0) | 2021.03.10 |