MySQL

MySQL binlog 기반 데이터 복구

수동으로 데이터를 보정하거나 배치 작업을 하는 과정 중에서 테이블의 데이터를 오염시키는 일이 발생할 수 있다. 상황마다 복구하는 시나리오는 다르겠지만, 이번 글에서는 MySQL binlog를 통해 오염된 데이터를 되돌리는 기본적인 방법에 대해 정리해보려고 한다. 실제 운영 환경에서는 매우 많은 트랜잭션과 실시간으로 계속 들어오는 트래픽으로 인해 binlog만 가지고 100% 데이터를 복구하는 것은 어렵다. 오히려 수동으로 복구하려는 시도가 데이터를 더 꼬이게 할 수도 있다는 것을 주의해야 하고 필요하다면 반드시 복구 정책(ex. 데이터 오염 이후 발생한 변경은 그대로 둔다, 특정 시간 기준 스냅샷으로 복구한다 등)을 먼저 정해두고 복구 이후 영향도에 대한 고려를 한 뒤 해야 한다. 실습실습 환경은 M..

2025.12.23 게시됨

MySQL

MySQL의 트랜잭션 격리 수준 실습해보기

트랜잭션은 ACID라는 아래 네 가지 조건을 만족해야 합니다. 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공하든, 모두 실패해야 한다. 일관성(Consistency) : 모든 트랜잭션은 일관성있는 DB 상태를 유지해야 한다. 가령, 트랜잭션의 결과는 DB에서 정한 무결성 제약 조건을 항상 만족해야 한다. 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리해야 한다. 지속성(Durability) : 트랜잭션이 성공적으로 끝나면 그 결과가 항상 기록되어야 한다. 그리고 이 네 가지 조건 중에서 격리성을 완벽히 보장하기 위해서는 사실 상 개별 트랜잭션이 동시에 처리되지 않고 순서대로 처리되어야 하는데요. 문제는 이..

2023.09.14 게시됨

MySQL

MySQL, InnoDB 엔진에서의 B-Tree 인덱스 구조와 클러스터링, 커버링 인덱스에 대해

DB에서 인덱스는 데이터의 저장(INSERT, UPDATE, DELETE) 성능을 희생하고 그 대신 데이터의 읽고 속도를 높이는 기능입니다. 일반적인 애플리케이션에서 가장 많은 비율을 차지하는 API는 DB 조회와 연관되어 있기 때문에 인덱스를 적절하게 '잘' 사용하는 것은 애플리케이션 성능과 직결된 문제가 됩니다. 이번 글에서는 인덱스를 사용할 때 가장 기본적이고, 범용적으로 알아야 할 B-Tree 인덱스 구조에 대해 정리합니다. 그리고 B-Tree 인덱스와 연결지어 Mysql, InnoDB 아래서 클러스터링 인덱스, 커버링 인덱스란 무엇이며 어떻게 활용하는지 살펴보겠습니다. 1. InnoDB 엔진에서 B-Tree 구조와 데이터 탐색 B-Tree(Balanced Tree)는 이진 트리를 확장해서 더 많..

2023.09.09 게시됨

MySQL

MySQL 다중 컬럼 인덱스(Multi-column Index) 사용 시 주의할 점

0. 테스트 환경 구축 많은 실서비스에서 사용하는 DB에서는 2개 이상의 컬럼을 포함하는 인덱스가 흔히 사용됩니다. 이러한 인덱스를 다중 컬럼 인덱스(Multi-column Index)라고 하는데요. 이번 글에서는 MySQL에서 다중 컬럼 인덱스를 사용할 때 주의해야 할 몇 가지 포인트에 대해 정리해보려고 합니다. 먼저 테스트 환경 구축을 위해 테이블을 생성하고, 더미 데이터를 INSERT 하는 것부터 시작해보겠습니다. 테스트 환경은 아래와 같으며, MySQL Workbench를 사용합니다. mysql> show VARIABLES LIKE '%VERSION%'; +--------------------------+-----------------+ | Variable_name | Value | +------..

2023.08.03 게시됨

MySQL

M1 Mac 환경에서 MySQL 사용 환경 구축하기

1. Homebrew 설치M1 환경에서 개발한다면 Homebrew가 설치되어 있겠지만, 혹시 깔려있지 않다면 아래 명령어로 설치한다./bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" brew 버전 확인$ brew --versionHomebrew 5.0.7 2. MySQL 설치brew를 통해 mysql을 설치하고 버전을 확인할 수 있다.$ brew install mysql==> Auto-updating Homebrew......$ mysql --versionmysql Ver 9.5.0 for macos15.7 on arm64 (Homebrew) 3. MySQL 서버 실행 및 root..

2023.06.03 게시됨