오라클 클라우드 가입 후
목표: 인스턴스를 생성 후 MariaDB 설치 및 DB 서버 운영
인스턴스 생성
인스턴스 정보
- 이름: db-server
- 이미지: Ubuntu 22.04 LTS
- 구성: Ampere, OCPU 1, RAM 6GB
보안
- 실드된 인스턴스 체크 해제
네트워킹
- 만들어둔 VCN 사용 (VCN = 방화벽 규칙이라고 생각하면 됨, 생성은 VCN 생성 마법사로 간단하게 생성, 생성 후 규칙에 원하는 포트를 열어주자 [예시. 3306])
- 자동 생성 SSH 키 쌍 생성 , 퍼블릭 키 붙여넣기를 통해 진행 (키 파일은 접속할 때 필요하며 꼭 가지고 있어야 함)
스토리지
- 변경사항 없이 기본 설정 값으로 진행
SSH 접속
보통 Putty를 많이 사용하는데, 나는 MobaXterm 기준으로 설명
Session 버튼 누른 후 SSH 클릭
Remote host: 생성한 인스턴스의 퍼블릭 IP 주소
Specify username: 생성한 인스턴스의 사용자 이름 (해당 란을 비워둘 경우 접속 후 아이디 입력)
Advanced SSH settings 탭을 클릭
Use private key 체크 후 인스턴스 생성 시 받았던 .key 파일을 등록 후 OK 버튼을 누른다.
그 후에 이 접속에 대해 신뢰하겠냐는 팝업창이 뜨는데 Accept 눌러주면 된다.
SSH 접속 후 기본 설정
패키지 업그레이드
sudo apt update && sudo apt upgrade -y
설치 중 배경이 바뀌며 무엇을 재시작 할거냐는 선택지가 뜨는데 스페이스바로 전체 선택 후 엔터를 눌러 재시작 할 수 있다.
또는 그냥 엔터를 누르고 reboot 명령어로 서버를 재시작해도 된다.
타임존 설정
sudo timedatectl set-timezone Asia/Seoul
MariaDB 설치 및 설정
MariaDB 설치 (현재 리눅스 버전에서 안정화 된 버전 중 최신으로 설치)
sudo apt install mariadb-server -y
서비스 상태 확인
sudo systemctl status mariadb
MariaDB 보안 초기화 (필수)
sudo mysql_secure_installation
권장 선택 값
- root 비밀번호 설정: Y
- 익명 사용자 제거: Y
- 원격 root 로그인 차단: Y
- test DB 삭제: Y
- 권한 테이블 다시 로드: Y
외부 접속 설정 (bind-address 수정)
sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0 로 변경
MariaDB 재시작
sudo systemctl restart mariadb
(선택) 대소문자 구분 설정
DB 생성 후에는 변경을 하기에는 복잡하니, 필요하다면 꼭 생성 전 설정해 주도록 하자
MariaDB 중지
sudo systemctl stop mariadb
설정 파일 수정sudo vi /etc/mysql/mariadb.conf.d/50-server.cnf
[mysqld] 섹션에 추가[mysqld] lower_case_table_names=10: 대소문자 구분함 / 1: 대소문자 구분 안 함
MariaDB 시작sudo systemctl start mariadb적용 확인
mysql -u root -p -e "SHOW VARIABLES LIKE 'lower_case_table_names';" # 정상 출력 +------------------------+-------+ | lower_case_table_names | 1 | +------------------------+-------+
DB 계정 및 데이터베이스 생성
MariaDB 접속
sudo mariadb
데이터베이스 생성
CREATE DATABASE DB이름 CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
사용자 생성 (외부 접속 허용 및 권한 부여)
CREATE USER '사용자 아이디'@'%' IDENTIFIED BY '비밀번호';
GRANT ALL PRIVILEGES ON DB이름.* TO '사용자 아이디'@'%';
FLUSH PRIVILEGES;
방화벽 확인 (Ubuntu)
ufw 사용 시
sudo ufw status
사용 중이라면 포트 허용
sudo ufw allow 3306/tcp
sudo ufw reload
iptables 사용 시
# 전체 확인
sudo iptables -L -n -v --line-numbers
# INPUT 체인만 확인
sudo iptables -L INPUT -n -v --line-numbers
사용 중이라면 포트 허용
sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
나는 이렇게 넣었다
sudo iptables -I INPUT 5 -p tcp -m state --state NEW --dport 3306 -j ACCEPT
5번째 라인에 3306 satate NEW 상태로 삽입
정책 기본 값 변경
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT ACCEPT
나가는 건 자유롭게 (OUTPUT ACCEPT): 서버 내부에서 업데이트를 받거나 외부 API를 호출하는 것은 허용합니다.
들어오는 건 일단 다 막기 (INPUT DROP): 일단 대문을 다 잠가버립니다. 그 후에 필요한 서비스(DB 3306 등)만 개별 규칙을 추가해서 대문을 조금씩 열어주는 방식을 취합니다.
해당 정책 기본 값을 설정 없이 (예. 22번 포트) 바로 실행 할 원격 터미널 접속이 끊길 수 있으니 규칙을 모두 추가 후 실행
iptables 규칙 영구 저장 (Ubuntu)
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
그 외
mariaDB 자동 시작 확인
sudo systemctl enable mariadb
DB 백업 방법
mysqldump -u 사용자_아이디 -p DB이름 > backup.sql