MySQL 버전차이에 의한 NULL 복제 이슈

minstone·2023년 2월 2일
0
post-thumbnail

환경

  • mysql 5.7.24 -> mysql 8.0.26 복제
  • binlog_format = MIXED
  • 테이블구조
CREATE TABLE `TROUBLESHOOT_230203` (
  `SEQNO` bigint(20) NOT NULL AUTO_INCREMENT,
  `INDATE` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`SEQNO`)


이슈

복제 구성 후 스케줄로 들어오는 데이터가 REPLICA에 복제되지 않아 복제중단.



원인 및 해결

NOT NULL 컬럼에 NULL이 입력되는 버그로 인한 이슈

  1. SOURCE서버에서 NOT NULL인 INDATE컬럼에 NULL을 삽입 시 CURRENT_TIMESTAMP가 입력됨.
  2. MIXED 포멧 동작 이상함. binlog가 ROW포멧이 아닌 STATEMENT 포맷으로 기록됨.
  3. REPLICA서버 버전에서는 해당 컬럼에 NULL 입력이 안되어 복제중단.
    • 5.7.32버전에서 버그픽스
      MySQL :: MySQL 5.7 Reference Manual

      When explicit_defaults_for_timestamp was disabled and a NULL was inserted into a generated column declared as TIMESTAMP NOT NULL, the server would attempt to convert the inserted value to CURRENT_TIMESTAMP. Such an insertion is now rejected with ER_BAD_NULL_ERROR. (Bug #29449518)

  4. REPLICA 서버 INDATE 컬럼 NULL허용하여 임시조치. 추후 NULL삽입로직 수정해야 함.
profile
🌚Stone Kid

0개의 댓글