본문 바로가기
서버구축 (WEB,DB)

MySQL 서버에 발생 주요 로그 유형과 설정 및 활용 방법, 유지보수

by 날으는물고기 2025. 2. 28.

MySQL 서버에 발생 주요 로그 유형과 설정 및 활용 방법, 유지보수

MySQL에는 다양한 로그 유형이 있으며, 각각 다른 목적으로 사용됩니다. 대표적인 로그는 다음과 같습니다.

로그 종류 설명
Error Log MySQL 서버의 오류 및 중요한 이벤트를 기록
General Query Log MySQL 서버에서 실행되는 모든 쿼리를 기록
Slow Query Log 실행 시간이 오래 걸리는 쿼리를 기록
Binary Log (binlog) 데이터 변경 사항을 기록하여 복구 및 복제를 지원
Relay Log 레플리케이션(slave) 서버에서 binlog를 받아 처리하는 로그
Audit Log MySQL Enterprise Edition에서 제공하는 사용자 활동 감시 로그
Performance Schema MySQL 서버 내부의 실행 통계를 수집하는 로그

Selecting General Query Log and Slow Query Log Output Destinations

MySQL의 General Query LogSlow Query Log의 출력 방식은 다음 옵션을 통해 설정할 수 있습니다.

로그 저장 방식

[mysqld]
log_output=TABLE,FILE
설명
TABLE MySQL의 mysql.general_log, mysql.slow_log 테이블에 저장
FILE 파일(general_log_file, slow_query_log_file)에 저장
NONE 로그를 저장하지 않음

The Error Log (오류 로그)

  • MySQL 서버에서 발생하는 오류, 경고, 중요 이벤트를 기록
  • 서버 시작 및 종료 메시지를 포함
  • 복제(replication) 관련 오류도 기록됨

설정 방법

설정 파일에 추가 (/etc/my.cnf 또는 /etc/mysql/my.cnf)

[mysqld]
log_error=/var/log/mysql/error.log
log_error_verbosity=3
옵션 설명
log_error 오류 로그를 저장할 파일 경로
log_error_verbosity 오류 로깅 수준 (1=기본, 2=경고 포함, 3=모든 정보 기록)

로그 확인

tail -f /var/log/mysql/error.log

The General Query Log (일반 쿼리 로그)

  • MySQL에서 실행되는 모든 SQL 문을 기록
  • 디버깅 또는 분석 목적으로 사용됨

설정 방법

[mysqld]
general_log=1
general_log_file=/var/log/mysql/general.log
log_output=FILE
옵션 설명
general_log 일반 로그 활성화 (1=ON, 0=OFF)
general_log_file 로그 파일 경로 지정
log_output TABLE 또는 FILE 지정

테이블 저장 방식으로 설정

[mysqld]
general_log=1
log_output=TABLE
SELECT * FROM mysql.general_log;

실시간 확인

tail -f /var/log/mysql/general.log

The Binary Log (바이너리 로그)

  • 데이터 변경(INSERT, UPDATE, DELETE 등)을 기록
  • 데이터 복구(Point-in-Time Recovery) 및 레플리케이션(Replication)에 필수
  • SELECT 쿼리는 기록되지 않음

설정 방법

[mysqld]
log_bin=mysql-bin
binlog_format=ROW
expire_logs_days=7
server_id=1
옵션 설명
log_bin 바이너리 로그 활성화
binlog_format ROW, STATEMENT, MIXED
expire_logs_days 일정 기간 후 로그 삭제
server_id 레플리케이션을 위한 서버 ID

바이너리 로그 확인

SHOW BINARY LOGS;
mysqlbinlog /var/lib/mysql/mysql-bin.000001

The Slow Query Log (느린 쿼리 로그)

  • 실행 시간이 오래 걸리는 쿼리를 기록
  • 성능 튜닝 및 인덱스 최적화에 도움

설정 방법

[mysqld]
slow_query_log=1
slow_query_log_file=/var/log/mysql/slow.log
long_query_time=2
log_queries_not_using_indexes=1
log_output=TABLE
옵션 설명
slow_query_log 느린 쿼리 로그 활성화
slow_query_log_file 로그 파일 경로
long_query_time 느린 쿼리 기준 시간 (초)
log_queries_not_using_indexes 인덱스를 사용하지 않은 쿼리도 기록

테이블에서 확인

SELECT * FROM mysql.slow_log;

로그 파일에서 확인

tail -f /var/log/mysql/slow.log

Server Log Maintenance (로그 유지보수)

로그가 지속적으로 축적되면 디스크 공간을 차지할 수 있으므로 관리가 필요합니다.

1) 오래된 로그 자동 삭제

방법 1: 바이너리 로그 자동 정리

[mysqld]
expire_logs_days=7
  • 7일이 지난 로그를 자동 삭제

 

방법 2: 느린 쿼리 로그 및 일반 로그 수동 삭제

echo "" > /var/log/mysql/general.log
echo "" > /var/log/mysql/slow.log

2) 로그 파일 크기 관리

방법 1: 로그 파일 교체

mv /var/log/mysql/general.log /var/log/mysql/general.log.1
mv /var/log/mysql/slow.log /var/log/mysql/slow.log.1
systemctl restart mysql

방법 2: 로그 로테이션 (logrotate 설정)

로그 파일을 자동으로 압축하고 관리하려면 /etc/logrotate.d/mysql-server에 아래 설정 추가:

/var/log/mysql/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 640 mysql mysql
    postrotate
        systemctl restart mysql > /dev/null
    endscript
}

3) 테이블 기반 로그 정리

TRUNCATE TABLE mysql.general_log;
TRUNCATE TABLE mysql.slow_log;

MySQL 서버에서 로그를 적절히 관리하면 성능 최적화 및 문제 해결에 큰 도움이 됩니다.

🔹 필수 설정 추천

log_error → 오류 로그 활성화
slow_query_log + long_query_time=2 → 느린 쿼리 로그 활성화
log_bin → 바이너리 로그 활성화 (복구/레플리케이션)
logrotate → 로그 파일 크기 자동 관리

 

위 설정을 적용하면, MySQL의 로그 시스템을 효과적으로 운영할 수 있습니다.

openarkcode/orchestratorMySQL/MariaDB 클러스터의 복제 토폴로지를 시각적으로 관리하고 자동화하는 오픈소스 툴인 Orchestrator를 포함한 Docker 이미지입니다. MySQL의 Master-Slave, Master-Master, Group Replication, GTID 기반 복제 등의 다양한 복제 구성에서 토폴로지 관리, 장애 감지 및 자동 페일오버 기능을 제공합니다.

주요 기능

  1. 복제 토폴로지 시각화
    • MySQL 복제 구조를 UI에서 직관적으로 확인 가능
    • Cluster 내 서버 간의 관계 및 상태 표시
  2. 장애 감지 및 자동 복구
    • Master 장애 감지 시 자동 Failover 수행
    • 여러 노드 간의 장애 및 지연 감지 가능
  3. 클러스터 관리 및 조작
    • Slave Promote 기능을 이용해 특정 Slave를 새로운 Master로 승격 가능
    • 서버 추가/삭제 및 복제 설정 변경 가능
    • Host 간 Replication 상태를 수정하는 기능 제공
  4. 자동 클러스터 조정 (Topology Refactoring)
    • Replication 구조를 손쉽게 변경하고, 특정 Slave를 다른 Master 아래로 재구성 가능
  5. Failover 시나리오 지원
    • GTID (Global Transaction ID) 기반 Failover 지원
    • Orchestrator 자체의 복제 방향 변경 기능을 활용하여 마스터 변경 가능

도커 이미지 활용 방법

1. Docker Compose로 실행

Orchestrator는 MySQL과 함께 동작해야 하므로, 일반적으로 docker-compose를 사용하여 실행합니다.

 

docker-compose.yml 예제

version: '3.7'
services:
  orchestrator:
    image: openarkcode/orchestrator
    container_name: orchestrator
    restart: always
    environment:
      - ORCHESTRATOR_API=http://127.0.0.1:3000/api
    ports:
      - "3000:3000"  # UI 포트
      - "5000:5000"  # API 포트
    volumes:
      - ./orchestrator.conf.json:/etc/orchestrator.conf.json
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: orchestrator
    ports:
      - "3306:3306"

2. Orchestrator 설정 파일

orchestrator.conf.json 예

{
  "Debug": true,
  "ListenAddress": ":3000",
  "MySQLTopologyUser": "orchestrator",
  "MySQLTopologyPassword": "orchestrator_password",
  "MySQLTopologySSL": false,
  "MySQLOrchestratorHost": "mysql",
  "MySQLOrchestratorPort": 3306,
  "MySQLOrchestratorDatabase": "orchestrator"
}

Orchestrator 주요 활용 사례

1. MySQL 복제 관리

  • 여러 개의 MySQL 노드가 있을 때 Master-Slave 관계를 쉽게 확인하고 관리
  • 특정 Slave를 Master로 승격하는 과정에서 자동 Failover 적용 가능
  • orchestrator-client를 이용한 명령줄 복제 관리 가능

2. 자동 장애 조치 (High Availability)

  • Master DB 서버 장애 발생 시, 자동으로 새로운 Master를 선택하고 Failover 진행
  • GTID 기반 복제 지원으로 데이터 손실 없이 빠른 복구 가능

3. MySQL Group Replication 모니터링

  • Group Replication이 활성화된 MySQL 클러스터를 모니터링하고 장애 발생 시 빠르게 복구 가능

4. 데이터베이스 운영 효율성 향상

  • GUI 및 API 기반으로 빠른 노드 관리
  • 장애 복구 프로세스를 자동화하여 운영 부담 감소

Orchestrator UI 및 API 활용

1. 웹 UI

Orchestrator는 기본적으로 웹 기반 인터페이스를 제공하며, http://localhost:3000에서 접근할 수 있습니다.

  • 현재 클러스터 상태를 한눈에 확인 가능
  • Failover 테스트 및 복제 토폴로지 변경 가능

2. API 활용

Orchestrator는 REST API를 제공하므로 자동화된 클러스터 관리 및 모니터링 도구와 연동 가능합니다.

 

API 예제

curl -X GET http://localhost:3000/api/clusters-info

위 명령을 실행하면 현재 Orchestrator에서 관리하는 모든 클러스터의 상태 정보를 JSON 형태로 반환합니다.

 

  • openarkcode/orchestrator Docker 이미지는 MySQL 복제 토폴로지를 효율적으로 관리할 수 있도록 설계된 오픈소스 툴입니다.
  • 자동 장애 복구, 클러스터 관리, 복제 토폴로지 변경 기능 등을 지원하여 운영자의 관리 부담을 줄이고 안정적인 서비스 운영을 지원합니다.
  • Docker 환경에서 손쉽게 배포 가능하며, GUI와 API를 활용한 운영 자동화도 가능합니다.

 

필요한 경우, orchestrator-client CLI나 API를 활용해 특정 복제 구조를 변경하거나, 자동화 스크립트와 연동하여 관리할 수도 있습니다.

728x90

댓글