원본 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>
38 lines
1.8 KiB
INI
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
|