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 Log
와 Slow 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/orchestrator
는 MySQL/MariaDB 클러스터의 복제 토폴로지를 시각적으로 관리하고 자동화하는 오픈소스 툴인 Orchestrator를 포함한 Docker 이미지입니다. MySQL의 Master-Slave, Master-Master, Group Replication, GTID 기반 복제 등의 다양한 복제 구성에서 토폴로지 관리, 장애 감지 및 자동 페일오버 기능을 제공합니다.
주요 기능
- 복제 토폴로지 시각화
- MySQL 복제 구조를 UI에서 직관적으로 확인 가능
- Cluster 내 서버 간의 관계 및 상태 표시
- 장애 감지 및 자동 복구
- Master 장애 감지 시 자동 Failover 수행
- 여러 노드 간의 장애 및 지연 감지 가능
- 클러스터 관리 및 조작
- Slave Promote 기능을 이용해 특정 Slave를 새로운 Master로 승격 가능
- 서버 추가/삭제 및 복제 설정 변경 가능
- Host 간 Replication 상태를 수정하는 기능 제공
- 자동 클러스터 조정 (Topology Refactoring)
- Replication 구조를 손쉽게 변경하고, 특정 Slave를 다른 Master 아래로 재구성 가능
- 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를 활용해 특정 복제 구조를 변경하거나, 자동화 스크립트와 연동하여 관리할 수도 있습니다.
댓글