MySQL 복제 이해하기: log_bin이 데이터베이스를 지정하지 않고 모든 것을 기록하나요?

여러 데이터베이스에 대해 MySQL 복제를 설정할 때, 바이너리 로그 구성에 대한 혼란이 자주 발생합니다. 일반적인 질문 중 하나는 특정 데이터베이스를 구성 파일에 지정하지 않으면 MySQL이 모든 데이터베이스의 변경 사항을 로그에 기록하는지 여부입니다. 본 포스트에서는 특히 binlog-do-dbbinlog-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 복제 또는 구성에 대한 추가 질문이 있으시면 언제든지 문의해 주세요!