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 뷰: 성능 문제를 진단하거나 최적화할 때 사용