다음은 내가 시도한 것을 요약 한 것입니다.Python을 사용하여 Sleeping MySQL 연결을 종료하는 방법?
셸 스크립트에서이 작업을 수행 할 수 있지만 --secure-file-priv
옵션을 사용하는 상태에서 서버를 실행중인 경우에는이 작업을 수행 할 수 없습니다. 그리고 나는 그것을 무능하게하고 싶지 않다.
- 공정한 --secure-file-priv를 사용하면 특정 디렉토리로 내보낼 수 있습니다.
show global variables like '%secure%';
을 입력하면 MySQL 결과 세트를 직접 파일에 기록 할 수있는 경로를 얻을 수 있습니다.
1. 쉘 스크립트는 Percona의 Percona의 pt-kill
pt-kill --match-command Sleep --kill --victims all --interval 10
사용하여 연결을 자고 죽이는
을 PT가-죽일
mysql -e "select concat('KILL ',id,';') from information_schema.processlist where Command = 'Sleep' AND user = 'root' into outfile '/tmp/sleep_processes.txt'"
mysql -e "source /tmp/sleep_processes.txt;"
rm -rf /tmp/sleep_processes.txt
2
장애인-priv에 --secure 파일을 필요로하는3. pand가있는 Python 스크립트 as
판다 스 프레임에서 모든 쿼리가 삭제되도록 나열하는 Python 스크립트. 하지만 판다 스 프레임에서 각 명령을 어떻게 실행합니까?
import MySQLdb as mdb
import pandas as pd
con = mdb.connect('localhost', 'root', 'password', 'mydatabase');
with con:
cur = con.cursor()
cur.execute("select concat('kill ',id,';') sleeping_connections FROM information_schema.processlist isp WHERE Command = 'Sleep' and time > 60")
rows = cur.fetchall()
df = pd.DataFrame([[ij for ij in i] for i in rows])
df.rename(columns={0: 'Sleeping Connections'}, inplace=True);
print(df.head(10))
@jezrael - FYI. – MontyPython
MySQL 시스템 변수에'wait_timeout'을 설정하는 것을 고려 했습니까? –
@ TanHongTat - 네,하지만 그건 영구적입니다. 내가 너무 낮게 설정하면 MySQL에 연결하는 응용 프로그램에서 풀링 문제가 발생합니다. 그러나이 크론 작업은 일시적인 해결책이었습니다. – MontyPython