해결된 질문
작성
·
350
답변 2
1
안녕하십니까,
일반적으로 DML이 발생하면 commit이 되거나 commit이 되지 않아도 redo log buffer(redo log 파일이 아니라 메모리)에는 변경 데이터가 쌓이게 됩니다.
commit이 되면 해당 데이터는 반드시 redo log 파일에 저장이 됩니다. 그런데, redo log 파일에 commit 되지 않은 데이터가 저장되어야 하는 경우가 있는데, 바로 redo log buffer 에 데이터가 일정 수준 가득 차서 이를 비워 줘야 할 때가 있습니다. 이런 경우 commit이 되지 않은 redo log buffer의 데이터도 redo log 파일에 저장되어야 합니다.
감사합니다.
0
안녕 하세요! 감사드립니다!
그럼 redo log와 binlog의 관계는 어떻게 되는걸까요?
binlog는 명령에 대한 히스토리가 남는걸로 알고 있는데요.
binlog도 commit된 것만 쌓이는걸로 알고 있는데
해당 내용이 인터넷에 검색했을 땐 대부분 얕은 정보뿐이여서요!
덕분에 디비에 대한 지식도 쌓이고 있습니다 감사합니다!!
아, 이 댓글이 있는걸 깜빡 잊고 있었군요.
mysql 은 다른 DB와 다르게 DB내에 별도의 Storage engine이 있습니다. 그러니까 db엔진과 storage engine이 별도로 있습니다.
binlog는 db엔진단에서 생성되며, redo log는 storage 엔진단에서 생성됩니다.
binlog역시 DML발생 시 redo log와 비슷한 역할을 수행하지만, db자체내의 모든 변경에 대한 데이터를 다 가지고, 내부적인 복구의 역할을 한다기 보다는 DB 복제에 주로 사용됩니다.
binlog는 redo log와는 달리 논리적으로 복제 DB에서 SQL로 전환 될 수 있는 형태로 저장됩니다. 또한 redo log와 다르게 Commit과 같은 Transaction이 종료 될 때에만 레코드가 생성됩니다.
감사합니다!!