데이터 베이스 엔진 레벨 락
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라 바꾸면 테이블이 교체된다.