MySQL의 객체 종류

기본 데이터베이스들

MySQL의 객체 종류

데이터베이스 (Databases)

  • 테이블, 뷰, 인덱스 등 여러 데이터베이스 객체들을 담는 논리적인 컨테이너

유저 (Users)

  • MySQL 서버에 접근할 수 있는 사용자 계정
  • 각 유저는 특정 권한을 가지고 데이터베이스에 접근할 수 있음
  • 권한에 따라 수행할 수 있는 작업이 제한됨

권한 (Privileges)

  • MySQL에서는 각 유저에게 특정 데이터베이스나 테이블에 대한 권한을 부여할 수 있음
  • SELECT, INSERT, UPDATE, DELETE, ALTER, REFERENCES` 등의 권한이 있음

테이블 (Tables)

  • 데이터를 행과 열로 구성하여 저장하는 기본적인 데이터 구조
  • 테이블 간 키를 통해 관계를 맺을 수 있음

뷰 (Views)

  • 하나 이상의 테이블에서 데이터를 가져와 가상 테이블을 만드는 객체
  • 뷰는 테이블처럼 실제 데이터를 저장하지 않고, 쿼리를 통해 데이터를 제공함
  • 단순히 데이터를 조회할 뿐만 아니라, 복잡한 SQL 쿼리를 숨기고 사용자가 쉽게 접근할 수 있도록 하는데 유용함

인덱스 (Indexes)

  • 테이블의 특정 컬럼에 대해 빠른 검색을 가능하게 하는 자료구조
  • 프라이머리 키 인덱스(클러스터링 인덱스), 유니크 인덱스, 세컨더리 인덱스 등이 있음
  • 검색 성능을 높이는 데 유용하지만, 삽입 및 갱신 작업에서 오버헤드를 발생시킴

스토어드 프로시저 (Stored Procedures)

  • 반복적으로 사용되는 쿼리와 논리를 저장하여, 필요할 때 호출할 수 있는 프로시저임
  • 입력 매개변수를 받아 로직 실행 가능

스토어드 함수 (Stored Functions)

  • 특정 작업을 수행하고 하나의 값을 반환하는 함수 (스토어드 프로시저의 경우 값을 반환하지 않음)
  • SQL 내에서 호출될 수 있음

시퀀스 (Sequence)

  • MySQL에서 자동으로 증가하는 값을 생성하는 객체
  • MySQL에서는 시퀀스를 별도로 지원하지 않으며, AUTO_INCREMENT 컬럼을 통해 유사한 기능을 구현함

이벤트 (Events)

  • 지정된 시간에 자동으로 수행하도록 예약된 작업
  • MySQL의 이벤트 스케줄러에 의해 관리됨
  • 주기적으로 반복되거나 예약된 작업에 유용함

트리거 (Triggers)

  • 특정 테이블에 삽입, 업데이트, 삭제 시 자동으로 실행되는 SQL 코드
  • 데이터 무결성 및 작업 자동화에 사용됨
  • 이벤트는 시간 기반으로 작업을 트리거하는 반면, 트리거는 데이터 변경 작업을 기반으로 실행됨

사용자 정의 함수 (UDF - User Defined Functions)

  • C/C++ 등으로 사용자가 정의한 함수
  • 내장 함수와 같은 방식으로 사용 가능

트랜잭션 (Transactions)

  • 한 개 이상의 SQL문을 묶어서 하나의 논리적인 작업 단위로 처리하는 객체
  • COMMIT 또는 ROLLBACK 명령으로 완료되거나 취소됨

트랜잭션 로그 (Transaction Logs)

  • 트랜잭션이 수행된 후의 변경사항을 기록하여 데이터베이스 복구에 사용되는 로그
  • 데이터 무결성과 복구 기능을 제공함
  • 시스템 장애 시 데이터 복구에 필수적임

로그 파일 (Log Files)

  • MySQL에서 수행된 모든 트랜잭션 오류, 상태 변경 등을 기록하는 파일
  • Binary Log, Redo Log, Undo Log, Error Log, Slow Query Log 등이 있음

파티션 (Partitions)

  • 테이블 데이터를 분할하여 관리하는 방법
  • 데이터베이스 성능 최적화를 위해 사용됨
  • 파티션된 테이블은 쿼리 성능을 위해 높이기 위해 특정 파티션만을 탐색하도록 최적화할 수 있음

레플리케이션 (Replications)

  • 데이터베이스 복제를 설정하여 여러 서버 간 데이터를 동기화하는 기능을 제공하는 구성 요소
  • 마스터-슬레이브, 마스터-마스터 레플레케이션 설정 가능

기본 데이터베이스들

MySQL 서버를 운영/관리하는데 기본적으로 제공되는 데이터베이스로, 사용자가 별도로 생성한 데이터베이스와 구별됨

mysql

MySQL 서버의 핵심 데이터베이스로, 사용자 계정, 권한, 서버 설정 등의 중요한 시스템 정보를 관리함

주요 테이블

  • user
    • MySQL 사용자 계정과 관련된 정보가 저장됨
    • 각 사용자의 인증 정보와 전역 권한이 이 테이블에 기록됨
  • db
    • 데이터베이스 별로 권한을 설정할 때 사용됨
  • tables_priv, columns_priv
    • 특정 테이블이나 컬럼에 대한 권한 정보를 저장함
  • procs_priv
    • 스토어드 프로시저 및 함수에 대한 권한을 관리함
  • servers
    • 원격 서버와의 연결 정보를 관리함
  • help_category, help_topic, help_relation
    • MySQL의 내장 도움말 시스템 관련 정보가 저장됨
  • time_zome 관련 테이블
    • MySQL에서 시간대를 지원하기 위해 필요한 정보가 저장됨

information_schema

MySQL 서버에 대한 메타데이터를 저장하는 MySQL 인스턴스 내의 읽기 전용 데이터베이스임

MySQL 서버가 관리하는 다른 모든 데이터베이스에 대한 정보(테이블과 컬럼, 인덱스, 뷰, 트리거 등)를 저장하는 곳임

주요 테이블

이 테이블은 실제로는 뷰이므로 연결된 데이터 파일이 없음

  • TABLES
    • 모든 데이터베이스의 테이블 정보가 저장됨
  • COLUMNS
    • 각 테이블의 컬럼 정보가 저장됨
  • STATISTICS
    • 테이블의 인덱스 정보가 포함됨
  • VIEWS
    • 정의된 모든 뷰의 정보가 저장됨
  • TRIGGERS
    • 모든 트리거의 정보가 포함됨

performance_schema

MySQL 서버의 성능 관련 데이터를 수집하고 모니터링하는 데 데이터베이스로

SQL 쿼리 성능, 스레드 활동, 메모리 사용량 등 다양한 성능 지표를 추적함

서버 성능 튜닝 및 문제 해결을 위해 사용되는데, 필요한 경우 비활성화할 수도 있음

주요 테이블

  • events_waits_current, events_waits_history
    • 서버에서 발생한 대기 이벤트를 추적함
  • file_summary_by_event_name
    • 파일 I/O 활동에 대한 요약 정보를 제공함
  • threads
    • 현재 실행 중인 스레드에 대한 정보를 포함함

sys

MySQL performance_schema와 관련된 정보 및 서버 운영에 유용한 뷰를 제공하는 데이터베이스임

performance_schema에서 수집된 데이터를 쉽게 활용할 수 있도록 다양한 뷰 제공

sys 뷰: 성능 문제를 진단하거나 최적화할 때 사용