MySQL 복제 이해하기: log_bin
이 데이터베이스를 지정하지 않고 모든 것을 기록하나요?
여러 데이터베이스에 대해 MySQL 복제를 설정할 때, 바이너리 로그 구성에 대한 혼란이 자주 발생합니다. 일반적인 질문 중 하나는 특정 데이터베이스를 구성 파일에 지정하지 않으면 MySQL이 모든 데이터베이스의 변경 사항을 로그에 기록하는지 여부입니다. 본 포스트에서는 특히 binlog-do-db
및 binlog-ignore-db
지시문과 관련하여 MySQL의 바이너리 로깅이 어떻게 작동하는지를 명확히 설명하겠습니다.
문제: MySQL은 데이터베이스 로깅을 어떻게 처리하나요?
바이너리 로그란 무엇인가요?
MySQL의 바이너리 로그는 데이터베이스에 대한 변경 사항을 기록하는 데 사용됩니다. 이러한 로그는 복제에 필수적이며, 슬레이브가 마스터의 데이터의 최신 복사본을 유지하는 데 도움을 줍니다. 여러 클라이언트를 위한 다양한 데이터베이스 작업 시 어떤 데이터베이스가 로그에 기록되는지를 구성하는 것은 매우 중요합니다.
구성 딜레마
MySQL 구성을 설정하면서 다음과 같은 질문을 가질 수 있습니다:
- 모든 데이터베이스를 나열하는 대신 몇 개만 무시할 수 있나요?
- 특정 데이터베이스를 무시하라고 지정하면 나머지는 제대로 기록되나요?
이 시나리오를 설명하기 위해 일반적인 my.cnf
구성 파일 설정을 고려해 보겠습니다.
해결책: binlog-ignore-db
를 효과적으로 사용하기
binlog-ignore-db
사용하기
MySQL 구성에 특정 무시 명령을 포함할 수 있습니다. 예를 들어:
binlog-ignore-db = mysql
binlog-ignore-db = informationschema
이 구성은 mysql
또는 informationschema
데이터베이스에서 명령이 실행될 때 해당 명령이 로그에 기록되지 않음을 나타냅니다. 그러나 중요한 부분은 기본 데이터베이스가 이러한 명령과 어떻게 상호작용하는지에 있습니다.
바이너리 로깅 규칙
MySQL 문서에 따르면:
- 기본 데이터베이스가 어떤
binlog-ignore-db
규칙과 일치하면, 해당 명령은 로그에 기록되지 않습니다. - 기본 데이터베이스가 무시되는 데이터베이스와 일치하지 않으면, 해당 쿼리는 로그에 기록됩니다.
이는 무시 규칙과 일치하지 않는 데이터베이스에서 명령을 실행하는 한, 해당 변경 사항이 바이너리 로그에 기록된다는 것을 의미합니다.
복제에 대한 시사점
binlog-do-db
항목을 제거하면 모든 것이 기록된 것처럼 보일 수 있으며, 바이너리 로그 파일에서 변경 사항을 확인할 수 있습니다. 그러나 모든 것을 로그에 기록한다고 해도 이러한 로그가 슬레이브 서버에 복제된다는 보장은 없습니다.
발생할 수 있는 문제
binlog-do-db
사양이 없고 무시되는 데이터베이스가 일치하지 않으면 MySQL이 모든 것을 기록할 수 있지만, 슬레이브가 이러한 변경 사항을 수신하지 않을 수도 있습니다.- 복제 문제를 해결하기 위해 슬레이브에서
replicate-do-db
옵션을 사용해야 할 수도 있으며, 이는 여러분의 간소화된 구성 노력과 상충할 수 있습니다.
결론
여기서 중요한 점은 binlog-ignore-db
를 사용하면서 binlog-do-db
항목을 생략하면 MySQL이 무시되는 데이터베이스를 제외한 모든 것을 기록하는 상황이 발생할 수 있다는 것입니다. 그러나 복제가 효과적으로 작동하도록 슬레이브 서버의 적절한 구성을 유지하는 것이 매우 중요합니다.
이러한 구성의 미묘한 차이를 이해함으로써 불필요한 복잡성 없이 신뢰할 수 있는 MySQL 복제 설정을 유지할 수 있습니다.
MySQL 복제 또는 구성에 대한 추가 질문이 있으시면 언제든지 문의해 주세요!