[Database] MySQL 실습(1) - 설치/접속/스키마/기본 SQL

우유·2026년 1월 30일

[Cloud] Database

목록 보기
4/28

MySQL 실습

실습 환경

  • Ubuntu 22.04 LTS (서버 1대)
  • MySQL 8.x
  • MySQL Workbench (수강생 PC)
  • 네트워크: Workbench PC ↔ Ubuntu 서버 3306/TCP 통신 가능

실습 계정 표준

  • DB: bootcamp_shop
  • User: labuser
  • Password: 1234 (교육용 예시)

1. 설치/접속/스키마/기본 SQL

목표

  • MySQL 설치 및 서비스 운영 기본(systemctl)
  • 계정/권한/원격 접속 구성
  • 샘플 스키마/데이터 로딩
  • 기본 조회/정렬/필터/집계 기초

- Ubuntu에 MySQL 설치 및 서비스 확인

실습: 설치

sudo apt update
sudo apt install -y mysql-server

실습: 서비스 상태/부팅 자동 실행 확인

sudo systemctl status mysql --no-pager
sudo systemctl is-enabled mysql

운영 포인트

  • mysqld는 서비스 형태로 동작하며 장애/재시작 대응이 필요
  • 로그/디렉토리 위치 확인(운영의 기본)
    • 데이터: /var/lib/mysql
    • 설정: /etc/mysql/
    • 로그(환경에 따라): /var/log/mysql/

- 초기 보안 설정 및 root 접근 방식

실습: 보안 초기화(권장)

sudo mysql_secure_installation

운영 포인트

  • root 원격 로그인 금지 권장
  • 애플리케이션/운영용 계정 분리(최소 권한)
  • 비밀번호 정책(교육에서는 완화 가능하지만 실제 운영은 강화)

- 원격 접속 계정/권한 구성 + 바인딩/방화벽

실습: DB 생성 및 사용자 생성

sudo mysql
CREATE DATABASE IF NOT EXISTS bootcamp_shop
  CHARACTER SET utf8mb4
  COLLATE utf8mb4_0900_ai_ci;

CREATE USER IF NOT EXISTS 'labuser'@'%' IDENTIFIED BY '1234';
GRANT ALL PRIVILEGES ON bootcamp_shop.* TO 'labuser'@'%';
FLUSH PRIVILEGES;

SELECT user, host FROM mysql.user WHERE user='labuser';

실습: bind-address 수정(원격 접속 허용)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
# bind-address = 127.0.0.1  -> 0.0.0.0 로 변경(또는 주석)
sudo systemctl restart mysql

실습: UFW 사용 시 포트 허용

sudo ufw status
sudo ufw allow 3306/tcp
sudo ufw reload

운영 포인트(클라우드 관점)

  • 보안그룹/방화벽은 “최소 오픈”:
    • 가능하면 0.0.0.0/0 금지
    • 특정 IP(예: 관리자PC)만 허용
  • DB는 퍼블릭 서브넷 배치 지양(클라우드에서는 프라이빗 서브넷 권장)

- Workbench 연결 & 기본 사용법

Workbench 설정 가이드

  • Hostname: <Ubuntu IP>
  • Port: 3306
  • Username: labuser
  • Default Schema: bootcamp_shop

연결 실패 시 체크리스트

  • Ubuntu에서 mysql 서비스 실행 중인가?
  • bind-address가 127.0.0.1로 묶여 있지 않은가?
  • 계정 host가 % 또는 해당 IP로 되어 있는가?
  • 비밀번호 오타/권한 부여 누락은 없는가?

- 스키마/샘플 데이터 로딩(워크북 스크립트 실행)

customers/products/orders/order_items/payments 스키마 및 데이터 스크립트를 Workbench에서 실행합니다.

실행 후 검증 쿼리

USE bootcamp_shop;
SHOW TABLES;

SELECT COUNT(*) customers FROM customers;
SELECT COUNT(*) products FROM products;
SELECT COUNT(*) orders FROM orders;
SELECT COUNT(*) order_items FROM order_items;
SELECT COUNT(*) payments FROM payments;

운영 포인트

  • 외래키(FK)는 실수를 줄이고 데이터 무결성을 보장하지만,
    • 대량 적재/마이그레이션 시 성능/순서 고려 필요
  • utf8mb4는 운영 표준(이모지/다국어 고려)

- DDL, DML, DCL

DDL (Data Definition Language) : CREATE, DROP

DML (Data manipulation Language) : SELECT, INSERT, UPDATE, DELETE

DCL (Data Control Language) : GRANT, REVOKE

TCL (Transaction Control Language) : COMMIT, ROLLBACK

profile
Front-end Developer, Cloud Engineer

0개의 댓글