UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

MySQLで不要なSleepセッションを消すプログラム

MySQLで不要なSleepセッションを消すプログラム


0.改訂履歴

  • 2005.10.03 新規作成

1.はじめに

 このドキュメントでは,MySQLにて,ステータスがSleepになっているコネクションを,消すプログラムについて説明する.  システムの暴走?や,キャンペーン等で急激なアクセスがきた場合,不要なコネクションが残る事がある. 放置しておくとmac connection値になるので,それを回避するために不要なプロセスを切断する. これが複数あるとkillコマンドを入力するのは面倒なので,Sleepセッションに限定して一括で実行するプログラムとなる.

2.プログラム

  • 以下のプログラムを使って,実行すればよい.
#!/bin/sh

MYSQLROOT=root
MYPASSWD=password
MYSQLADMIN='/usr/local/mysql/bin/mysqladmin'
MYSQLmon='/usr/local/mysql/bin/mysql'
TMPFILE=MySQLsessionKiller

#get process list
$MYSQLADMIN -u $MYSQLROOT -p$MYPASSWD processlist > /tmp/$TMPFILE.processlist

#get SleepSession List and session ID
cat /tmp/$TMPFILE.processlist | grep Sleep | cut -f 2 -d' '  > /tmp/$TMPFILE.sessionid

#create kill SQL command
cat /tmp/$TMPFILE.sessionid  | sed "s/^/kill /g" | sed "s/$/;/g" > /tmp/$TMPFILE.killcommand

#
cat /tmp/$TMPFILE.killcommand | $MYSQLmon -u $MYSQLROOT -p$MYPASSWD > /tmp/$TMPFILE.status


NOW_DATE=`date +%Y.%m.%d`
NOW_TIME=`date +%H:%M:%S`

echo ------------------------------ 
echo DATE
echo ------------------------------ 
echo $NOW_DATE $NOW_TIME 
echo ------------------------------ 
echo Process list [Before]
echo ------------------------------ 
cat /tmp/$TMPFILE.processlist
echo ------------------------------ 
echo Process list [after]
echo ------------------------------ 
$MYSQLADMIN -u $MYSQLROOT -p$MYPASSWD processlist
echo ------------------------------ 
echo Exec log 
echo ------------------------------ 
cat /tmp/$TMPFILE.status
echo END
[root@db02 bin]#  
  • このプログラムでは,次のような動作になる.
    1. mysqladminを使っプロセスリストを呼び出し,その中からセッションIDを取り出す.
    2. 取り出したセッションIDを,killコマンドのフォーマットにそろえて,SQL文を作成する.
    3. 作成したSQL文をmysqlモニタに読み込ませて実行させる.
    4. 実行結果などを表示する.
  • /tmp以下にちょっとゴミファイルが残るが,これは意図的に残している.


広告スペース
Google