Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

ssuperjun 님의 블로그

[과제5-5] DB 모니터링 프로그램 Python 변환 5편: Python 의존성 패키지 설치, 코드 실행 테스트 본문

인턴

[과제5-5] DB 모니터링 프로그램 Python 변환 5편: Python 의존성 패키지 설치, 코드 실행 테스트

ssuperjun 2026. 1. 17. 15:03

명령어 모음

[의존성 패키지 설치]

*sudo 권한으로

sudo apt update

sudo apt install python3 python3-pip

 

[/home1/irteam 경로에 venv 가상 환경 구축]

python —version으로 3.12 버전임을 확인한 뒤

sudo apt install python3.12-venv

sudo python3 -m venv /home1/irteam/venv-process2

source /home1/irteam/venv-process2/bin/activate

sudo pip install pymysql

 

[실행]

su 권한 없는 cb801 접속해 가상환경 활성화

source /home1/irteam/venv-process2/bin/activate

실행

python3 process2.py admin01

venv 사용 이유

sudo pip3 install pymysql 시

Ubuntu에서 Python 패키지 전체를 시스템 전체에 적용하지 못하도록 막아놨기 때문


시행착오

[파이썬 코드 실행 명령어]

python3 process2.py username

 

의존성 패키지를 설치 안했으므로 당연히 실패

 

sudo apt update

sudo apt install python3 python3-pip

 

이걸 실행했더니

sudo pip3 install pymysql

 

오류 발생: Ubuntu에서 Python 패키지 전체를 시스템 전체에 적용하지 못하도록 차단하는 정책(3.12 버전부터 적용) 때문

 

그래서 venv 설치 시도

python3 -m venv ~/venv-process2

 

하지만 처음부터 오류

/home1/irteam 경로에 venv 가상 환경을 깔아보자.

 

python —version으로 3.12 버전임을 확인한 뒤

sudo apt install python3.12-venv

sudo python3 -m venv /home1/irteam/venv-process2

source /home1/irteam/venv-process2/bin/activate

sudo pip install pymysql

 

[실행]

su 권한 없는 cb801 접속해

source /home1/irteam/venv-process2/bin/activate

실행

python3 process2.py admin01


python 실행 시 에러

 * processlist insert failed: infa-testsrv-ca801 13306
 * MySQL Error Message: (1146, "Table 'log.processlist' doesn't exist")
 * innodb insert failed: infa-testsrv-ca801 13306
 * MySQL Error Message: not enough arguments for format string
 * InnoDB Lock query failed: infa-testsrv-ca801 13306
 * MySQL Error Message: (1054, "Unknown column 'dw.blocking_trx_id' in 'on clause'")

오류 발생

 

[not enough arguments 문제]

해결: insert into innodb 구문에서, %s 5개인데 전달되는 매개변수는 4개라 %s 하나 지워 해결

 

[Unknown column 문제]

해결: 'dw.blocking_trx_id' 컬럼명 대신 'dw.BLOCKING_ENGINE_TRANSACTION_ID' 컬럼명 사용해 해결

 

[테이블 없음 에러]

log.processlist 테이블, log.innodb이 존재하지 않음

<해결>

log DB 테이블 확인

// cb801 내에서 MYMON DB 접속해
USE log;
SHOW TABLES;

log DB의 테이블엔 processlist_날짜_시간 테이블뿐이었다.

 

process2.py 코드에 log.processlist_날짜_시간, log.innodb_날짜_시간, log.innodb_lock_날짜_시간 테이블이 존재하지 않을 경우 테이블을 생성하는 코드를 추가. 테이블명은 예를 들어 processlist_20220720_17 같은 형식

 

<코드 수정 후 실행 결과>

log DB 재접속해 테이블 생성 및 데이터 삽입 여부 확인 -> 성공!

 

crontab을 5분 주기에서 1분 주기로 바꾼 뒤

slowquery가 작동되는 게 보이는지 확인

중간에 pid 1025인 세션이 sleep을 10초 간 수행한 것을 볼 수 있다.

 

 

[참고]

InnoDB Lock result is empty 에러는 실제 에러가 아니라, 현재 서버에 InnoDB Lock 없다는 뜻이므로 정상적인 상황임.

python 코드를 수정하면, debug 모드에서만 에러 메시지 출력되도록 하는 게 가능함.

=>6편에 구현 완료