SERIES

Real MySQL 8.0

9 Posts·Last updated on March 05, 2024

MySQL에서의 사용자 식별에 대해

December 04, 2023

들어가며 MySQL에서의 계정 식별 방식, 권한, 역할에 대한 기본적인 내용을 알아보자 왜 알아야 할까? 데이터베이스 서버의 보안을 위해 ! 괜히 보안떄문에 퇴근이 늦어지면 안되니까 1. 사용자 식별 방법 사용자 아이디 뿐만 아니라 접속 지점(호스트명이나 도메인 또는 IP주소)도 함께 확인한다. 예시) 따라서 계정의 HOST와 다른 지점에서 접속하면 …


MySQL 엔진 아키텍처

December 14, 2023

MySQL 엔진 아키텍처 MySQL 서버는 크게 MySQL 엔진과 스토리지 엔진으로 나뉜다. MySQL 엔진 클라이언트와의 연결, 요청된 쿼리문을 파악하고 분석 및 최적화하는 작업을 수행한다. 그 후, 실제 동작은 스토리지 엔진에 요청한다. 이를 핸들러 요청이라고 하고, 여기에 사용되는 API를 핸들러 API라고 한다. 명령어로 핸들러 API를 확인할 …


InnoDB 엔진 이해하기

December 17, 2023

InnoDB 스토리지 엔진 MySQL에서 사용할 수 있는 스토리지 엔진 중 거의 유일하게 레코드 기반 Lock을 지원한다. 덕분에 높은 동시성 처리와 뛰어난 성능을 가진다. 아키텍처 InnoDB의 전반적인 아키텍처는 다음과 같다. InnoDB의 주요 특징 프라이머리 키에 의한 클러스터링 모든 InnoDB 테이블은 PK에 의해 클러스터링 인덱스가 생성된다…


MySQL 로그 파일

January 03, 2024

MySQL 로그 파일 MySQL 서버에 문제가 생겼을 때, 로그 파일을 이용하면 문제의 원인을 쉽게 찾고 해결할 수 있다. 따라서 가급적 아래에 나올 로그 파일들을 통해 문제를 파악하려는 태도를 가지는 것이 중요하다. 로그 파일의 종류는 아래와 같다. 에러 로그 서버가 시작되는 과정과 관련된 정보성 로그 및 에러 메시지 서버가 비정상적으로 종료될 때 기록…


MySQL에서의 트랜잭션과 Lock

January 03, 2024

트랜잭션 트랜잭션은 최소한의 논리적인 작업 단위이다. 하나의 작업 단위에 포함되는 모든 작업들이 100% 성공해야 트랜잭션이 commit 되며, 중간에 작업 하나라도 문제가 생겼을 땐 작업 전체를 무효화한다. (All or Nothing) 이를 통해 데이터의 정합성을 보장한다. ACID 모델 데이터베이스 설계 원칙으로 ACID 모델이 있다. InnoDB…


MySQL의 격리 수준

January 11, 2024

들어가며 MySQL에는 4가지의 격리 수준이 존재한다. 격리 수준에 따라 같은 상황, 그리고 같은 쿼리라 하더라도 결과가 매번 달라질 수 있다. 이로 인해 정합성 문제가 발생할 수 있다. 우리가 실행하는 쿼리문이 적어도 격리 수준에 따라 어떤 결과를 가져올 지 정확하게 예측할 수 있어야 하기에, MySQL의 격리 수준에 대해 이해해보자. 트랜잭션 격리 수…


InnoDB 스토리지 엔진의 락

January 11, 2024

Lock에는 MySQL 엔진이 관리하는 Lock과 InnoDB 스토리지 엔진이 관리하는 락이 있다. 이번에는 InnoDB 스토리지 엔진이 관리하는 Lock에 대해 알아보자. 레코드 락 InnoDB 엔진이 관리하는 락 중에서 핵심이다. 다른 DBMS의 레코드 락과 동일하지만 한 가지 중요한 차이는 레코드 자체가 아니라 인덱스의 레코드를 잠근다는 것이다. 따…


B-Tree 인덱스에 대해 알아보자

February 01, 2024

B-Tree 인덱스 B-Tree 인덱스는 데이터베이스의 인덱싱 알고리즘에서 가장 일반적으로 사용되는 알고리즘이다. 가장 큰 특징은 칼럼의 원래 값을 변형하지 않고 인덱스 자료구조 내에서는 항상 정렬된 상태로 값들을 저장한다. 흔히 B-Tree를 Binary-Tree (이진 트리)로 생각한다. 하지만 Balanced-Tree의 약자로, Binary-Tree…


MySQL의 실행 계획에 대해 알아보자

March 05, 2024

들어가며 MySQL에서 쿼리가 실행되는 과정 중에, 주어진 쿼리를 효율적으로 실행하기 위해 어떻게 실행할 지 계획을 짜는 과정이 포함된다. 이 과정을 옵티마이저가 수행한다. 하지만 옵티마이저는 만능이 아니다. 개발자가 의도하는 대로 옵티마이저가 계획을 잘 수립했는지 확인하기 위해서는 명령어를 통해 현재의 실행 계획을 확인할 수 있어야 한다. 또한 옵티마…