MySQL

데이터 베이스 엔진 레벨 락

쥐4 2024. 8. 19. 14:41

1. 글로벌 락

FLUSH TABLES WITH READ LOCK

 

=> 하나의 세션이 이 락 권한을 획득하면 다른 모든 세션은 DDL, DML 등의 명령어 실행 금지

=> 모든 테이블에 대해 flush가 가능해야한다. 즉, 현재 명령이 모두 끝나야 진행 가능

=> 백업을 하려고, 서비스를 일시 정지하는 것은 매우 비효율적인 일이다.

2. 백업 락

LOCK INSTANCE FOR BACKUP;

백업 로직

UNLOCK INSTANCE;

 

=>  DDL 명령어, DB 인증 관련 명령어 사용 불가

=> 백업 락을 통해 서버 실행 중 백업 가능

=======================================================

1. 데이터 베이스 소스 서버, 레플리카 서버 준비

2. 레플리카 서버 백업 락 걸기

3. 소스 서버는 그대로 읽기 쓰기를 받을 수 있고, 바이너리 로그에 소스 서버 업데이트 내용 쌓임

4. 레플리카 서버 백업 후 락 풀고 바이너리 로그를 통한 소스 서버와 동기화

--> 락 도중 DDL 쓰지말것.

=======================================================

나중에 레플리카 서버 에 대해 자세하게 배워 볼 예정.

3. 테이블 락

 명시적 : LOCK TABLES table_name [READ | WRITE]

 묵시적 : DDL 명령

=> DDL 명령 시 묵시적으로 테이블 락이 걸린다.

=>InnoDB에서는 DDL 시 묵시적으로 테이블 락이 걸리지만, DML 쿼리는 실행되고, DDL의 경우에만 락이 걸린다.

==>DDL 시 DML 대기 DML 시 DDL 대기라 보면될듯...

4. 네임드 락

잘 안씀 ㅇㅇ

5. 메타 데이터 락

묵시적 : RENAME TABLE rank TO rank_backup, rank_new TO rank; 

=>주로, 데이터 베이스 테이블을 교체할때 사용된다.

=> 락을 걸고 rank를 rank_backup이라 이름을 바꾸고 rank_new를 rank라 바꾸면 테이블이 교체된다.