mysql 리두 로그

BackEnd_Ash.log·2023년 7월 30일
0

database

목록 보기
29/31

리두 로그?

mysql 에서 리두 로그라는게 뭐야 ??

MySQL에서 "리두 로그"는 데이터베이스의 모든 변경사항을 추적하는데 사용되는 기능입니다. 이 로그는 DBMS (Database Management System)에서 데이터의 무결성을 유지하고, 트랜잭션의 복구를 가능하게 하는 데 사용됩니다.

리두 로그의 주요 용도는 다음과 같습니다:

  1. 충돌 복구: 시스템이 갑자기 실패하거나 충돌하는 경우, 리두 로그는 MySQL이 데이터베이스를 일관된 상태로 복구하는데 도움이 됩니다.

  2. 트랜잭션 관리: MySQL에서는 트랜잭션의 실행 중인 변경 사항을 추적하는데 리두 로그를 사용합니다. 이는 "roll back" (되돌리기) 작업을 지원합니다. 즉, 트랜잭션이 완료되기 전에 오류가 발생하면, 리두 로그를 사용하여 데이터베이스를 이전 상태로 되돌릴 수 있습니다.

  3. 레플리케이션: MySQL에서는 리두 로그를 사용하여 마스터 서버에서 슬레이브 서버로의 변경 사항을 복제합니다.

리두 로그는 일반적으로 디스크에 기록되며, MySQL 서버가 재시작 될 때마다 자동으로 재생됩니다. 이는 시스템 충돌 후에 데이터베이스를 일관된 상태로 복구하는 데 사용됩니다. 이 로그는 시스템이 안전하게 종료되면 지워집니다.

충돌 복구

"충돌 복구"는 시스템이 비정상적으로 종료된 경우(예: 전원 중단, 시스템 크래시 등)에 데이터베이스를 이전의 일관된 상태로 복구하는 과정을 말합니다.

MySQL에서 InnoDB 스토리지 엔진은 '리두 로그'(Redo Log)라는 메커니즘을 사용하여 충돌 복구를 수행합니다. 리두 로그는 트랜잭션에서 발생하는 모든 변경 사항을 기록하는 로그 파일입니다. 이 로그는 트랜잭션이 커밋되기 전에 먼저 디스크에 기록됩니다. 이런 방식을 'Write-Ahead Logging'이라고 합니다.

리두 로그를 사용하면, 데이터베이스가 비정상적으로 종료된 경우에도 다시 시작할 때 리두 로그를 사용하여 아직 디스크에 반영되지 않은 모든 변경 사항을 재실행할 수 있습니다. 이 과정을 '충돌 복구'라고 합니다.

충돌 복구 과정은 대략 다음과 같습니다:

  1. MySQL 서버가 다시 시작되면, InnoDB 스토리지 엔진은 자동으로 충돌 복구 과정을 시작합니다.
  2. 이 과정에서 InnoDB는 리두 로그를 확인하고, 각 트랜잭션의 상태(커밋되었는지, 커밋되지 않았는지 등)를 확인합니다.
  3. 커밋되지 않은 트랜잭션의 변경 사항은 롤백되고, 커밋된 트랜잭션의 변경 사항이 아직 디스크에 반영되지 않았다면 이 변경 사항들을 다시 적용합니다.

따라서 리두 로그는 데이터의 일관성을 유지하고, 데이터베이스의 상태를 복구하는 데 매우 중요한 역할을 합니다.

트랜잭션 관리

MySQL에서 트랜잭션을 이해하는 것은 매우 중요합니다. 트랜잭션은 데이터베이스의 상태를 변화시키는 하나 이상의 연산들의 단위입니다.

트랜잭션이 중요한 이유 중 하나는 그것이 ACID 속성 (원자성, 일관성, 고립성, 지속성)을 만족시키기 때문입니다.

  • 원자성(Atomicity): 트랜잭션에 포함된 모든 연산이 성공적으로 완료되거나, 아니면 하나도 실행되지 않아야 함을 의미합니다. 즉, 모든 것이 완전히 실행되거나 아니면 전혀 실행되지 않아야 합니다.
  • 일관성(Consistency): 트랜잭션이 데이터베이스를 일관된 상태에서 다른 일관된 상태로만 이동시킨다는 것을 보장합니다. 즉, 트랜잭션의 실행이 데이터베이스의 일관성을 해치지 않습니다.
  • 고립성(Isolation): 각 트랜잭션은 독립적으로 실행되어야 함을 의미합니다. 즉, 한 트랜잭션이 실행되는 동안 다른 트랜잭션에 의해 변경된 데이터를 볼 수 없습니다.
  • 지속성(Durability): 트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 데이터베이스에 반영되어야 함을 의미합니다.

이러한 ACID 속성을 만족시키기 위해, MySQL의 InnoDB 스토리지 엔진은 트랜잭션에 관련된 모든 데이터 변경을 리두 로그에 먼저 기록합니다. 이는 'Write-Ahead Logging'라고 불리는 방식으로, 실제 데이터 변경 이전에 로그를 먼저 쓰는 방법입니다.

예를 들어, 트랜잭션을 사용하여 데이터베이스의 두 테이블에서 동시에 업데이트를 수행한다고 가정해 봅시다. 업데이트가 성공적으로 완료되면, 트랜잭션은 커밋되고, 이 변경은 리두 로그에 기록됩니다. 이후에 데이터베이스가 비정상적으로 종료되더라도, 이전에 커밋된 트랜잭션의 변경 사항은 리두 로그를 통해 복구할 수 있습니다.

따라서 트랜잭션과 리두 로그는 데이터 무결성을 보장하고 데이터베이스의 상태를 복구하는 데 중요한 역할을 합니다.

레플리케이션

데이터베이스 레플리케이션은 데이터를 여러 위치에 복사하거나 동기화하는 프로세스를 말합니다. 이것은 일반적으로 네트워크의 여러 서버 사이에 이루어지며, 레플리케이션을 사용하면 동일한 데이터에 대한 사용자의 동시 액세스를 허용하거나, 데이터 손실을 예방하거나, 서버의 장애 시스템의 가용성을 높이는 등의 목적을 달성할 수 있습니다.

레플리케이션은 아래와 같은 장점을 제공합니다:

  1. 데이터 가용성 향상: 만약 한 서버가 다운되면, 다른 서버에서 데이터에 계속 액세스할 수 있습니다.

  2. 분산처리: 데이터를 여러 서버에 분산시킴으로써 부하를 분산시키고 시스템 성능을 향상시킬 수 있습니다.

  3. 데이터 보호: 중요 데이터를 여러 위치에 복사하여 데이터 손실 위험을 감소시킵니다.

  4. 백업: 레플리케이션은 데이터 백업 전략의 일부로 사용될 수 있습니다.

  5. 분석: 하나의 데이터베이스를 운영용도로 사용하고, 복제된 데이터베이스를 보고서 및 분석 용도로 사용할 수 있습니다. 이를 통해 운영 작업과 분석 작업 간의 리소스 경쟁을 최소화할 수 있습니다.

레플리케이션은 주로 마스터-슬레이브 레플리케이션(한 서버에서 다른 서버로 복사) 또는 멀티마스터 레플리케이션(모든 서버가 동일한 수준의 권한을 가지고, 어떤 서버에서든 변경이 이루어질 수 있음) 형식으로 이루어집니다.

profile
꾸준함이란 ... ?

1개의 댓글

comment-user-thumbnail
2023년 7월 30일

좋은 글 감사합니다.

답글 달기