arko_renual/deploy/wise/mariadb.cnf
infraurp 28a0329114 MariaDB sql_mode에서 ONLY_FULL_GROUP_BY 제거
원본 MySQL 8과 동작을 맞추려고 이 모드를 켰던 것이 역효과였다. MySQL 8은
GROUP BY 컬럼에 대한 함수 종속성을 판정해 집계에 없는 컬럼도 통과시키지만
MariaDB는 그 판정을 하지 않는다. 같은 sql_mode를 그대로 옮기면 로컬에서
잘 돌던 쿼리가 서버에서만 터진다.

증상: 관리자 2차인증 로그인 직후 /mnt/main.do 가 404. 실제로는 대시보드
쿼리가 'Z.STATUS1' isn't in GROUP BY 로 실패하고 예외 처리가 404로 이어진 것.

ONLY_FULL_GROUP_BY 제외는 MariaDB의 기본값이기도 하다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 15:11:19 +09:00

38 lines
1.8 KiB
INI

# arko(문화품앗이) MariaDB — /opt/arko-app/conf/mariadb.cnf
#
# 이 서버(27.255.76.2)는 llama-server가 200G+를 쓰는 GPU 추론 서버다.
# 가용 메모리가 3G 안팎이라 버퍼풀을 384M로 묶고 컨테이너에도 768m 상한을 건다.
# 늘리기 전에 반드시 `free -g` 로 여유를 확인할 것.
[mysqld]
# 원본은 Windows MySQL 8 (lower_case_table_names=1). Linux 기본값 0으로 두면
# iBatis SQL의 테이블명 대소문자가 어긋나 "Table doesn't exist"가 난다.
# 이 값은 초기화(initdb) 시점에만 반영되므로 db-data를 비우고 다시 만들어야 바뀐다.
lower_case_table_names = 1
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
innodb_buffer_pool_size = 384M
innodb_log_file_size = 128M
innodb_flush_log_at_trx_commit = 2
max_connections = 150
max_allowed_packet = 64M
table_open_cache = 400
tmp_table_size = 32M
max_heap_table_size = 32M
# 원본 MySQL 8 은 ONLY_FULL_GROUP_BY 가 켜진 상태로 운영되지만, 여기서는 빼야 한다.
# MySQL 8 은 GROUP BY 컬럼에 대한 '함수 종속성'을 판정해 집계에 없는 컬럼도 통과시키지만
# MariaDB 는 그 판정을 하지 않는다. 같은 sql_mode 를 그대로 옮기면 로컬에서 잘 돌던
# 쿼리가 여기서만 터진다 (2026-08-26 관리자 메인 대시보드: 'Z.STATUS1' isn't in GROUP BY).
# ONLY_FULL_GROUP_BY 제외는 MariaDB 의 기본값이기도 하다.
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
default_time_zone = '+09:00'
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
[client]
default-character-set = utf8mb4