Zabbix DB가 느릴 때: MySQL 파티션으로 해결하는 실무 구축법 (1편) — history·trends 분할 기반 튜닝

이 문서는 Zabbix 7.4 환경에서 MySQL 파티션 구조를 적용, Zabbix 패키지 설치 및 스키마 로드 과정을 정리한 실무용 가이드다. 이전에 썻던 아래 글에 이어 실무기반으로
가이드한 글이니 도움이 되었으면 한다.

1) 전제 및 범위

  • OS: Ubuntu 22.04
  • Zabbix: 7.4 (운영 EOL 민감하면 7.0 LTS 권장)
  • DB: MySQL 8.x
  • 웹: Apache + zabbix-frontend-php
  • 목적: 설치와 스키마 import까지. 파티션은 다음 편부터 진행.

운영 환경에서 보안 인증(컴플라이언스)을 받아야 하면 지원 기간이 짧은 릴리스를 피한다. EOL에 민감한 조직은 7.0 LTS로 고정.


2) Zabbix 저장소 추가

- 레포지토리 추가
# wget https://repo.zabbix.com/zabbix/7.4/release/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.4+ubuntu22.04_all.deb
# dpkg -i zabbix-release_latest_7.4+ubuntu22.04_all.deb
apt update

체크포인트

  • /etc/apt/sources.list.d/zabbix.list 생성 확인
  • apt updatezabbix.com 관련 인덱스가 받아지는지 확인

3) Zabbix 서버/프론트/에이전트 설치

- zabbix server / frontend / agent2 설치
# apt install -y zabbix-server-mysql zabbix-frontend-php zabbix-apache-conf zabbix-sql-scripts zabbix-agent2

- zabbix agent2 plugin (필요한 플러그인만 선택 설치)
# apt install -y zabbix-agent2-plugin-mongodb zabbix-agent2-plugin-mssql zabbix-agent2-plugin-postgresql

체크포인트

  • /etc/zabbix/ 하위 설정 파일 생성(특히 zabbix_server.conf)
  • Apache 모듈/설정이 함께 들어오며 /etc/apache2/conf-enabled/zabbix.conf 링크되는지 확인

4) MySQL 설치

# apt install -y mysql-server

체크포인트

  • systemctl status mysql → active (running)
  • Ubuntu 22.04 기본 설정에선 auth_socket 인증이 활성화된 경우가 있음
    : 운영체제 로그인 사용자root여야만 MySQL에 접속 가능

5) DB 초기화 (DB/계정/권한/함수설정)

# MySQL 접속
mysql -uroot -p
# (패스워드 입력)

# DB/계정/권한
mysql>create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql>create user zabbix@localhost identified by 'password';       
   #password 부분 실사용 비밀번호로 변경
mysql>grant all privileges on zabbix.* to zabbix@localhost;

# 함수 신뢰 설정(임시)
mysql>set global log_bin_trust_function_creators = 1;
quit

설명

  • log_bin_trust_function_creators=1임시로 켠다.
  • 이유: Zabbix 스키마 안에는 get_host_agent() 등 STORED FUNCTION이 포함된다. 바이너리 로그 활성화 환경에서 SUPER 권한 없는 계정으로 FUNCTION 생성은 기본적으로 차단되어 있어 임포트 시 필요.

6) Zabbix 스키마 import

- zabbix.sql 스키마 import
# zcat /usr/share/zabbix/sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix

체크포인트

  • 오류 없이 종료
  • mysql -uzabbix -p zabbix -e "show tables;" → history/trends 등 핵심 테이블 생성 확인

7) 함수 신뢰 설정 원복

mysql -uroot -p
# (패스워드 입력)
mysql>set global log_bin_trust_function_creators = 0;
quit

설명(보안)

  • FUNCTION 생성 신뢰 옵션은 임시로만 사용. 스키마 생성 후 바로 원복한다.

8) Zabbix 서버 DB 접속 정보 등록

- Zabbix 서버 설정
# vi /etc/zabbix/zabbix_server.conf

# 아래 항목에 DB 비밀번호 입력
 DBName=zabbix      (기본)
 DBUser=zabbix      (기본)
 DBPassword=여기에_실제_비밀번호

9) 서비스 기동

# systemctl restart zabbix-server zabbix-agent2 apache2
# systemctl enable zabbix-server zabbix-agent2 apache2

체크포인트

  • systemctl status zabbix-server → active (running)
  • 웹 UI 접근: http://<서버IP>/zabbix

타임존은 웹(UI) 표시용(KST 등)과 DB 파티션 경계(UTC epoch)가 분리된다. 파티션 계산은 UTC로만 간다. UI는 표시만 로컬 타임존으로 본다. (자세한 파티션/자동화는 3~4편에서 다룸)


10) 다음 편 예고

  • 2편: 디스크 분리(AppArmor, 권한, innodb_directories), General Tablespace 생성
  • 3편: file-per-table 전환 + 파티션 최초 구성(History=일/epoch, Trends=월)
  • 4편: 자동화 스크립트 + 크론 + 보존주기(DAYS_KEEP/MONTHS_KEEP)
  • 5편: Housekeeper 비활성 + Zabbix 캐시/프로세스 + MySQL InnoDB 튜닝

점검 포인트

  • 스키마 임포트 실패 시: log_bin_trust_function_creators 상태 확인 후 재실행
  • 계정 인증 오류: DB 사용자/비밀번호, mysql_native_password vs auth_socket 상태 확인
  • 서비스 기동 실패: /var/log/zabbix/zabbix_server.log, /var/log/apache2/error.log 확인
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. 본문 및 이미지를 무단 복제·배포할 수 없습니다. 공유 시 반드시 원문 링크를 명시해 주세요.
ⓒ 2025 엉뚱한 녀석의 블로그 [quirky guy's Blog]. All rights reserved. Unauthorized copying or redistribution of the text and images is prohibited. When sharing, please include the original source link.

🛠 마지막 수정일: 2025.10.28