ssuperjun 님의 블로그
[과제5-5] DB 모니터링 프로그램 Python 변환 5편: Python 의존성 패키지 설치, 코드 실행 테스트 본문
명령어 모음
[의존성 패키지 설치]
*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편에 구현 완료
'인턴' 카테고리의 다른 글
| [과제6-1] 웹 띄우기: MyMon Dev환경 세팅(웹 소스코드 도커라이징) (0) | 2026.01.21 |
|---|---|
| [과제5-6] DB 모니터링 프로그램 Python 변환 6편: 추가 구현, 조사 (1) | 2026.01.19 |
| [과제5-4] DB 모니터링 프로그램 Python 변환 4편: Python 코드 작성 (0) | 2026.01.17 |
| [과제5-3] DB 모니터링 프로그램 Python 변환 3편: MySQL Client 설치, C 의존성 패키지 설치, C 코드 실행 테스트 (0) | 2026.01.17 |
| [과제5-2] DB 모니터링 프로그램 Python 변환 2편: process2.c 코드 분석 (0) | 2026.01.17 |