Last Updated on 9월 13, 2021 by Jade(정현호)
안녕하세요
이번 포스팅은 이전 포스팅에서 생성 완료한 오라클 클라우드의 MDS(MySQL Database Service) 의 인스턴스에 접속을 하는 내용에 대해서 확인 해보도록 하겠습니다.
이전 포스팅
1. 수신 규칙 추가
오라클 클라우드 의 MySQL Database Service 는 외부에서 바로 접속 할 수 있는 Public IP 가 제공되지 않고 Private 에서만 접속이 가능합니다 그래서 기본적으로 3306 이나 33060 포트가 수신규칙에 없기 때문에 규칙 부터 추가 해야 합니다.
1-1 네트워킹 -> 가상 클라우드 네트워크(VCN)
1-2 하단의 구획(compartment) 를 선택 후 사용 중인 VNC 네트워크를 선택 합니다.
1-3 공용 서브넷-vnc의 CIDR 대역대를 확인 후(포스팅 환경에서는 10.0.0.0/24) 메뉴의 보안 목록 을 선택 합니다.
1-4 보안 목록 중 전용(private) 서브넷의 보안 목록 을 선택 합니다.
1-5 수신 규칙 추가 를 선택 합니다.
1-6 아래 화면에 보이는 1번 항목에서는 공용 서브넷 CIDR 아이피를 입력 하고, 2번 항목에서는 3306 과 33060 을 입력 합니다 3번 항목은 간략하게 설명을 입력 하면 되며 입력이 완료 되었다면 아래 "수신 규칙 추가" 버튼을 눌러서 저장을 합니다.
1-7 완료가 되면 아래와 같이 규칙이 추가가 된것을 확인 할 수 있습니다.
2. Bastion Host
Bastion Host (배스천 호스트) 는 Public 네트워크에서 Private 네트워크에 있는 클라우드 서비스에 대한 액세스를 제공하기 위한 목적을 가진 서버로 중간의 역할 또는 게이트 역할을 수행하는 호스트를 의미 합니다.
Private IP 로 내부 접속만 허용되는 완전 관리형 데이터 베이스인 MDS 인스턴스에 DBA 나 개발자가 접속 하기 위한 방법은 여러가지가 있을 수 있으며 그 중에서 대표적으로 사용되는 배스천 호스트를 이용한 접속을 알아 보려고 합니다.
배스천 호스트는 컴퓨트 서비스를 통해서 가상 서버 머신을 생성하여 사용하시면 되며 프리티어로도 배스턴 호스트 용도는 사용가능함으로 포스팅에서는 상시무료 컴퓨트 인스턴스를 통해 진행 하도록 하겠습니다.
2-1 컴퓨트 -> 인스턴스 로 이동 합니다.
2-2 하단에 구획을 선택 후 인스턴스 생성을 클릭 합니다.
2-3 컴퓨트 이름 , 구획을 확인 합니다. 기본 구성의 OS 는 Oracle Linux 7.9 로 되어있습니다. 그리소 항상 무료 적격 이라는 상시 무료 컴퓨트 인스턴스가 선택된 것을 확인 할 수 있습니다. OS 이미지를 변경 하기 위해서는 편집 을 클릭 합니다.
2-4 그 다음 이미지 변경 을 틀릭 합니다.
2-5 변경 가능한 OS는 아래와 같이 확인 할 수 있습니다.
2-6 포스팅에서는 Ubuntu 20.04 로 선택 하였으며, 아래 SSH 키 추가 항목에는 생성 된 키를 입력(업로드) 하거나 공개키 문자열을 붙여 넣으면 되며 자세한 내용은 링크 글 에서 확인 하시면 됩니다.
공개키를 추가 하였다면 아래 생성을 클릭 합니다.
2-7 완료 되면 아래와 같이 확인 할 수 있으며 접속을 위해 공용 IP 주소를 확인 합니다.
[참고] 배스천 호스트에 대한 보안은 아래 포스팅을 참조하시면 됩니다.
3. MDS 인스턴스에 접속
먼저 배스천 서버 SSH 로 접속 후 MDS 에 접속 을 하는 방법을 확인 해보도록 하겠습니다.
3-1 배스천 서버에 SSH 로 접속 합니다.
3-2 배스천 서버에 접속 후 mysql client 나 mysql-shell 를 설치 합니다. 포스팅에서는 mysql-shell 과 mysql client 를 설치 하도록 하겠습니다 각 배포판 별로 설치는 아래와 같습니다.
# 우분투 user# wget https://dev.mysql.com/get/mysql-apt-config_0.8.16-1_all.deb user# sudo dpkg -i mysql-apt-config_0.8.16-1_all.deb user# sudo apt update user# sudo apt -y install mysql-shell mysql-community-client rsync iputils-ping vim net-tools # RHEL/CentOS7 기준 user# sudo yum install -y https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm user# sudo yum install -y mysql-community-client mysql-shell
3-3 접속 정보는 아래 이미지와 같이 확인 할 수 있으며 확인 되는 IP 또는 Endpoint 정보를 이용하면 됩니다.
3-4 mysql-shell 은 아래와 같은 명령어로 접속 할 수 있습니다.
mysqlsh 아이디@(PRIVATE_IP_ADDRESS 또는 EndPoint)
또는
mysqlsh -u 아이디 -p -h (PRIVATE_IP_ADDRESS 또는 EndPoint)
ubuntu@mds-bastion:~$ mysqlsh -u master -p -h 10.0.1.3 Cannot set LC_ALL to locale en_US.UTF-8: No such file or directory Please provide the password for 'master@10.0.1.3': ************ MySQL Shell 8.0.23 Copyright (c) 2016, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type '\help' or '\?' for help; '\quit' to exit. Creating a session to 'master@10.0.1.3' Fetching schema names for autocompletion... Press ^C to stop. Your MySQL connection id is 20 (X protocol) Server version: 8.0.23-u2-cloud MySQL Enterprise - Cloud No default schema selected; type \use <schema> to set one. MySQL 10.0.1.3:33060+ ssl JS > # SQL 모드로 전환 : \sql MySQL 10.0.1.3:33060+ ssl JS >\sql Switching to SQL mode... Commands end with ; # 접속 종료 MySQL 10.0.1.3:33060+ ssl SQL > \exit Bye!
4. MySQL Workbench 접속
이번에는 MySQL Workbench 를 통해 접속 하는 방법을 확인 해보도록 하겠습니다.
4-1 Connection Name 에는 접속 이름을 간략하게 기재합니다.
Connection Method 는 "Standard TCP/IP over SSH" 를 선택 합니다
SSH Hostname 에는 배스천서버의 IP를 입력 합니다. 그 다음 이미지의 1번을 클릭하여 SSH 접속에 사용하는 Private key 를 선택 하면 됩니다.
자세한 내용은 링크 포스팅을 참조하시면 됩니다.
4-2 Store in Keychain 버튼을 클릭 합니다.
4-3 생성한 MDS 계정의 비밀번호를 입력 합니다.
4-4 입력 완료후 하단의 "Test Connection" 을 클릭 하였을때 모든 정보가 맞게 입력 되었다면 아래의 이미지와 같이 접속 성공의 메세지를 확인 할 수 있습니다.
4-5 접속 후 아래와 같이 쿼리해보면 클라우드 MDS 인스턴스에 접속이 된 것을 확인 할 수 있습니다.
5. 외부(IDC,다른 클라우드) 와 연결
사용하는 클라우드 와 IDC의 서버와 연결하거나 다른 클라우드 서비스와 연결하는 이제는 보편적으로 사용되는 구성 합니다. IDC 와 클라우드 간에 전용망을 구성하여 연결하거나 VPN 등을 사용하여 연결 할 수 있겠으며, 클라우드 간의 연결도 보통 VPN 이나 클라우드 사업자 간의 특정 서비스는 전용망이 구성되기도 합니다.
위에서 구성한 MDS 인스턴스를 다른 클라우드의 AP 서버나 IDC에 위치한 AP 서버에서 접속은 위와 같이 보편적인 방법이외 간단하게 사용할 수 있는 방법으로 SSH Tunnel(SSH Forwarding) 를 사용할 수 있습니다. 사실 암호화 측면에서는 차이가 없기 때문 입니다.
그림으로 표현하면 아래와 같이 설명 할 수 있겠으며 위에서 생성한 Bastion Host 를 이용하여 배스천 호스트를 통해 SSH Tunneling 을 구성하여 사용하는 방식 입니다.
관련된 자세한 내용은 아래 포스팅을 참조하시면 됩니다.
5-1 다른 클라우드인 AWS 의 EC2 를 활용하여 접속을 하는 방식을 진행하려고 하고 배스천 서버와의 SSH 접속을 위한 Key 설정은 완료된 상태 입니다. 그래서 아래 이미지를 참조하시면 배스천 호스트에 접속이 되는 것을 확인 할 수 있습니다.
5-2 SSH 터널링을 사용하는 이유는 제일 먼저 VPN 구성에 비해 간편하기 때문 입니다.
터널링을 만드는 명령어는 아래와 같습니다.
root# ssh -f -N -L 3306:10.0.1.3:3306 ubuntu@배스천호스트IP
위의 명령어를 통해서 접속을 하게 되면 아래와 같이 수행이 되게 됩니다.
• 설명
- 0 번에서 SSH 터널링을 생성 합니다 그 다음 1번과 2번 을 통해서 3306 포트가 활성화가 된 것을 확인 할 수 있으며 포트의 Open 한 주체는 SSH 라는 것을 확인 할 수 있습니다.
- 4번 항목은 보통의 mysql 의 접속 하는 방법과 동일하게 접속을 하게 되는 됩니다.
- 그 다음 접속 한 위 쿼리를 수행 해보면 위에서 Workbench 와 동일하게 MDS 인스턴스에 접속 하였음을 알수 있습니다.
테스트 예제에서는 AWS EC2 에서 MySQL Client -> MDS Instance 였지만 IDC 내 Tomcat 이나 PHP-FPM FastCGI 또는 node.js 와 같은 백엔드에서 Connection String 정보로 127.0.0.1 / 3306 을 입력 하면 동일하게 접속이 되게 됩니다.
개인적으로는 Server to Server 간 SSH 터널링을 자주 이용하는 편입니다. 이유는 보안적인 측면은 기본이며 가장 손쉽게 설정을 할 수 있기 때문 이죠
위에서 생성한 터널링의 종료는 kill 명령어로 수행 할 수 있습니다.
root@instance-9:~# ps -ef| grep 3306 root 17835 1 0 21:31 ? 00:00:00 ssh -f -N -L 3306:10.0.1.3:3306 ubuntu@배스천호스트IP root@instance-9:~# kill -9 17835
다음 포스팅에서는 replication 과 구성(config) 변경 관련 되어 확인 해보도록 하겠습니다.
관련된 다른 글
Principal DBA(MySQL, AWS Aurora, Oracle)
핀테크 서비스인 핀다에서 데이터베이스를 운영하고 있어요(at finda.co.kr)
Previous - 당근마켓, 위메프, Oracle Korea ACS / Fedora Kor UserGroup 운영중
Database 외에도 NoSQL , Linux , Python, Cloud, Http/PHP CGI 등에도 관심이 있습니다
purityboy83@gmail.com / admin@hoing.io
안녕하세요. 궁금한게 있어 질문 남깁니다. 혹시 oracle cloud를 통해 생성한 mysql db를 python에서 pymysql 등으로 연결하는 방법이 있는지 아시나요?
안녕하세요
베스천호스트에서 pymysql 을 설치하셔서 MDS에 접속 하시면 될것 같습니다
감사합니다 행복한 하루 되세요