Original post: http://anothermysqldba.blogspot.com/2014/10/rotating-mysql-slow-logs.html
同時與不同的客戶工作,我碰巧會遇到的非常大的慢日誌文件時有發生。 雖然他們如何應該旋轉的若干意見存在。 許多這些意見使用日誌旋轉和刷新日誌的命令,我不喜歡,雖然我刷新二進制日誌。 這就是為什麼我同意羅納德·布拉德福德的博客文章 ,從幾年前就如何做到這一點。
我已經採取了它遠一點和腳本的步驟。 在bash腳本是建立在MySQL 5.6和記mysql_config_editor它可以在舊版本的MySQL中被使用。
該腳本將執行下列操作:
好吧,讓我們用這個例子。
我目前使用的mysql_config_editor超過.my.cnf文件,所以我相應地更新腳本。
我可以看到,這個慢查詢日誌現在是1G。
所以,我執行腳本
好啊好啊,它的工作,我現在有一個更小的日誌文件,而無需刷新我的垃圾桶日誌或重新啟動MySQL的。
該腳本可以被添加到一個crontab所以你可以經常你想旋轉。
下面是該腳本。
同時與不同的客戶工作,我碰巧會遇到的非常大的慢日誌文件時有發生。 雖然他們如何應該旋轉的若干意見存在。 許多這些意見使用日誌旋轉和刷新日誌的命令,我不喜歡,雖然我刷新二進制日誌。 這就是為什麼我同意羅納德·布拉德福德的博客文章 ,從幾年前就如何做到這一點。
我已經採取了它遠一點和腳本的步驟。 在bash腳本是建立在MySQL 5.6和記mysql_config_editor它可以在舊版本的MySQL中被使用。
該腳本將執行下列操作:
- 收集當前的日誌文件名
- 收集當前的長查詢時間值
- 復位長的查詢時間為更高的值
- 不同的副本截斷它,以及日誌(參見羅納德的帖子)
- 復位長查詢時間回到原來的時間
- 執行,如果你想一個簡單的慢查詢,以便您可以檢查新的記錄速度慢
- 刪除舊的日誌慢,所以你可以得到的空間回來。
- 如果你希望查看的日誌,而不是你可以發表評論,此命令的。
好吧,讓我們用這個例子。
我目前使用的mysql_config_editor超過.my.cnf文件,所以我相應地更新腳本。
# mysql_config_editor print --all
[local]
user = root
password = *****
host = localhost
我可以看到,這個慢查詢日誌現在是1G。
# ls -alh mysql-slow.log
-rw-rw---- 1 mysql mysql 1.1G Oct 11 16:08 mysql-slow.log
所以,我執行腳本
# /root/rotate_slow_logs.sh
# ls -alh mysql-slow.log
-rw-rw---- 1 mysql mysql 5.8K Oct 11 16:11 mysql-slow.log
好啊好啊,它的工作,我現在有一個更小的日誌文件,而無需刷新我的垃圾桶日誌或重新啟動MySQL的。
該腳本可以被添加到一個crontab所以你可以經常你想旋轉。
下面是該腳本。
#!/bin/bash
# THIS IS BUILT WITH MYSQL 5.6 SECURITY IN MIND.
# SET THE LOGINPATHVALUE if you are using the mysql_config_editor
# IF YOU ARE NOT USING THE mysql_config_editor THEN IT IS ASSUMED YOU HAVE
# SET A .my.cnf FILE IN THE USER HOME DIR OR THIS USER HAS NO PASSWORD SET
# PLEASE SET THIS ACCORDINGLY TO YOUR SYSTEM.
LOGINPATHVALUE="local";
if [ -z "${LOGINPATHVALUE}" ]; then
LOGINPATH="";
fi
if [ -n "${LOGINPATHVALUE-unset}" ]; then
LOGINPATH="--login-path=$LOGINPATHVALUE "
fi
# GATHERS THE LOG FILE NAME
SLOWLOG=$(mysqladmin $LOGINPATH variables | grep slow | grep file | awk '/[a-zA-Z]/ {print $4}' )
# GATHER CURRENT VALUE
LQT=$( mysqladmin $LOGINPATH variables | grep long_query_time | awk '/[0-9]./ {print $4}' )
LQTB=$(mysql $LOGINPATH -e " SELECT @@global.long_query_time *200 AS LQTB;" | awk '/[0-9]./ {print $1}' )
LQTC=$(mysql $LOGINPATH -e " SELECT @@global.long_query_time *2 AS LQTC;" | awk '/[0-9]./ {print $1}' )
# GATHER MARKER
DATE=`date +"%m%d%Y"`
# RESET SLOW QUERY TIME
# SET GLOBAL long_query_time=10;
mysql $LOGINPATH -e "SET GLOBAL long_query_time= $LQTB"
LQTD=$( mysqladmin $LOGINPATH variables | grep long_query_time | awk '/[0-9]./ {print $4}' )
#MOVE THE LOG OUT
cp $SLOWLOG $SLOWLOG.$DATE; > $SLOWLOG
#SET THE TIMEBACK
mysql $LOGINPATH -e "SET GLOBAL long_query_time= $LQT"
LQTD=$( mysqladmin $LOGINPATH variables | grep long_query_time | awk '/[0-9]./ {print $4}' )
#PLACE A Slow query for log
SLOWQUERY=$(mysql $LOGINPATH -e "SELECT sleep($LQTC) " )
# REMOVE OLD LOG
/bin/rm -f $SLOWLOG.$DATE;