MySQL에서 복제(replication) 유형을 확인하려면 SHOW GLOBAL VARIABLES 명령어를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
이 명령어는 ROW, MIXED, STATEMENT 중 하나의 값을 반환하며, 기본값은 ROW입니다.
복제 유형(binlog_format) 확인하기
실제로 위 문법을 실행하여 현재 설정된 복제 유형을 확인해 보겠습니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';
실행 결과는 다음과 같습니다.
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.10 sec)
현재 binlog_format이 ROW로 설정되어 있는 것을 확인할 수 있습니다.
ROW에서 STATEMENT로 변경하기
복제 유형을 ROW에서 STATEMENT로 변경하려면 SET GLOBAL 구문을 사용합니다.
mysql> SET GLOBAL binlog_format = 'STATEMENT'; Query OK, 0 rows affected (0.04 sec)
변경 후 다시 한번 복제 유형을 확인해 보겠습니다.
mysql> SHOW GLOBAL VARIABLES LIKE 'binlog_format';
실행 결과는 다음과 같습니다.
+---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ 1 row in set (0.01 sec)
이제 binlog_format이 STATEMENT로 변경된 것을 확인할 수 있습니다.
세션(Session) 단위로 변경하기
전역(Global) 설정뿐만 아니라 세션 단위로도 복제 유형을 변경할 수 있습니다. 예를 들어 STATEMENT에서 MIXED로, MIXED에서 ROW로 자유롭게 전환이 가능합니다.
mysql> SET SESSION binlog_format = 'ROW'; Query OK, 0 rows affected (0.00 sec)
변경 후 세션 변수 값을 다시 확인해 보겠습니다.
mysql> SHOW VARIABLES LIKE 'binlog_format';
실행 결과는 다음과 같습니다.
+---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.04 sec)
binlog_format 유형별 특징
- STATEMENT: SQL 문장 자체를 바이너리 로그에 기록합니다. 로그 크기가 작지만, NOW()나 RAND() 같은 비결정적 함수 사용 시 복제 불일치가 발생할 수 있습니다.
- ROW: 실제 데이터의 변경된 행(row) 정보를 기록합니다. 가장 안정적으로 복제 일관성을 보장하지만 로그 크기가 커질 수 있습니다.
- MIXED: 기본적으로 STATEMENT 방식을 사용하다가 필요한 경우(비결정적 함수 사용 등)에만 ROW 방식으로 자동 전환됩니다.
참고로 SET GLOBAL은 서버 전체에 적용되며 새로운 연결부터 반영되고, SET SESSION은 현재 연결(세션)에만 적용됩니다. 운영 환경에서는 영구 적용을 위해 my.cnf(my.ini) 설정 파일에 binlog_format=ROW와 같이 지정하는 것이 좋습니다.