최근에 너무 바빴다..
아픈것도 있었고...심신의 위로가 너무나도 필요했다.
의욕도 생기지 않은것도 한몫 했다...
이런 하소연은 Life에 일기로 써야지....ㅋㅋ쓰다보면 위로가 될꺼라 믿고...
각설하고 오늘부터 하루에 기술 관련 정리하여 올리자고 한다.
작심 3일을 매주 2번..씩 다짐한다.
오늘 Binlog_format에 대한 정리한 것을 공유해 본다.
아래 블로그에서 참고 하였다.
[출처] : http://mysqldba.tistory.com/196
★ binlog_format 종류 및 차이
- Statement Format : 가장 오래된 Format으로 데이터 변경에서 사용되는 모든 쿼리를 쿼리대로 저장하는 방식을 말함(5.7까지 기본 Format)
- Row Format : 변경 작업으로 변경된 모든 Row의 정보를 기록하는 방식
- Mixed Format : Statement 방식과 Row 방식을 혼합한 방식으로 기본은 Statement 방식이고, 몇몇의 경우에는 Row방식으로 동작하는 방식
mysql> set global binlog_format = 'STATEMENT';
mysql> set global binlog_format = 'ROW';
mysql> set global binlog_format = 'MIXED';
- global 대신 session 으로 변경 가능
* Row 와 Statement
데이터베이스에 작은 변경을 많이 발생 시키는 쓰레드는 열 기반 로깅을 선호한다.
WHERE 구문에 있는 많은 열과 매치가 되는 업데이트를 실행하는 쓰레드는 명령문 기반 로깅을 선호하는데, 그 이유는 많은 열을 로깅하는 것 보다는 적은 명령문 로깅이 효과적이기 때문이다.
마스터에서 오랜 실행 시간 동안 실행되지만 비교적 적은 수의 열만을 수정하는 명령문들이 있다.
이러한 명령문들은 열 기반 로깅을 사용해서 복제하는 것이 보다 효과적이다.
* Defualt
* STATEMENT 일때 로그 흔적
* row 형태의 format
* Format 변경 시 문제 발생하는 시점
- Trigger나 Stored Function을 사용하고 있는 경우
- NDB Cluster Storage Engine을 사용하고 있는 경우
- 현재 Temporary Table을 사용하고 있는 세션이 있는 경우
- Mixed Binary Logging Format 을 사용하면 Binary log를 작성하면 MySQL은 자동적으로 Statement방식과 Row 방식을 섞어서 기술
- Row 방식으로 작성 되는 경우
- NDB Cluster Table에 DML이 실행된 경우
- UUID()를 사용한 경우
- Auto_Increment 칼럼을 가지고 있는 테이블에 연결된 Trigger나 Stored Function이 생성되어 사용되는 경우
- Insert Delayed가 실행하는 경우
- User Defined Function 을 호출할 때 등
- Storage Engine 별로 지원하는 format
Storage Engine |
Row Logging Supported |
Statement Logging Supported |
Archive |
Yes |
Yes |
Blackhole |
Yes |
Yes |
CSV |
Yes |
Yes |
Example |
Yes |
No |
Federated |
Yes |
Yes |
Heap |
Yes |
Yes |
InnoDB |
Yes |
Yes / When the Transaction isolation level is Repeatable Read or Serializable : No otherwise. |
MyISAM |
Yes |
Yes |
Merge |
Yes |
Yes |
NDB |
Yes |
No |
- Storage Engine별 지원하는 logging 형태에 따라 2가지로 분류
- SLC (Statement-Logging Capable) - Statement Logging 방식을 지원하는 Storage Engine.
- RLC (Row-Logging Capable) - Row Logging 방식을 지원하는 Storage Engine
- Binary Log에 작성되는 3가지 종류
- Safe : Statement 방식으로 작성 시 Replication 이나 복구 시에 문제가 되지 않는 쿼리 형태
- UnSafe : Statement 방식으로 작성 시 Replication 이나 복구 시에 문제가 되는 쿼리 형태
- Row/Binary Injection : Row Event로 Row Based 방식으로 실행하기 위해 저장되는 Event형태 (Row format 으로 로깅해야 지만, 변경 내역이 저장되는 것을 의미)
- MySQL은 Grant 작업은 직접적인 DML로 진행될 수도 있으나 간접적인 DDL 구문으로 실행 가능
- 직접적으로 실행되는 DML 는 Binlog_format에 따라 작성되는 방법이 다름 (Insert / Update / Delete / Replace / Do / Load Data Infile / Select / Truncate table)
- 간접적으로 실행되는 DDL 문은 Binlog_format과 상관없이 무조건 Statement방식으로 저장(Grant / Revoke / Set Password / Rename User / Create / Alter Drop)
- Create table .. Select 경우 Create Table 은 Statement 방식으로 저장되고 Select 부분은 Binlog_format 설정값에 따라 달라짐
반응형
'MySQL' 카테고리의 다른 글
[MySQL] UTF-8 / utf8mb4 (0) | 2016.10.20 |
---|---|
[MySQL] mysqllbinlog event_type: 19 (0) | 2016.10.20 |
[MySQL] Log 정리 (0) | 2016.10.05 |
[MySQL] Query 관련 수정 (Index) (0) | 2016.09.29 |
[펌][MySQL] 대용량 테이블의 경우 성능 개선을 위한 10 가지 방안 (0) | 2016.08.03 |