新建 MySQL 用户
创建用于刷新日志的 MySQL 账号,并对账号权限加以限制。
> GRANT RELOAD ON *.* TO 'flushlogs_user'@'localhost' IDENTIFIED BY '123456'; > FLUSH PRIVILEGES;
|
刷新 MySQL 慢日志
刷新MySQL慢查询日志,慢查询日志类型为 slow
$ mysqladmin -u$DBUser -P$DBPass -S /data/server/mysql/tmp/mysql.sock flush-logs slow
$ mysqladmin -u$DBUser -P$DBPass -h $DBHost -P $DBPort flush-logs slow
|
注意:
在刷新 slow log 前,需要先把文件重命名,否则mysql不会生成新的 slow log 文件。
由于在Linux系统中存在“文件描述符”的概念,即使重命名了 slow log 文件,mysql进程依然会把新产生的慢日志写入重命名后的 slow log 文件中。所以需要在刷新 slow log 之前先进行重命名操作,然后刷新 slow log,这样mysql才会生成新的 slowlog 文件并把慢日志写入到该文件中。
慢日志切割脚本
在MySQL实例中添加慢日志切割脚本 logrotate-mysql-slowlog.sh
DateTime=`date +%Y%m%d%H%M%S` DBHost='localhost' DBPort=3306 DBUser='flushlogs_user' DBPass='123456' SocketFile='/var/lib/mysql/mysql.sock' SlowLogDir='/data/service/mysql/data' SlowLogFile='mysql-slow.log' SlowLogBakDir='/data/backup/mysql-backup/slowlog' SlowLogBakFile="${SlowLogFile}-${DateTime}"
[ -d $SlowLogBakDir ] || mkdir -p $SlowLogBakDir
/usr/local/mysql/bin/mysqladmin ping -u$DBUser -p$DBPass -S $SocketFile &>/dev/null;ReturnValue=`echo $?` if [ $ReturnValue -ne 0 ]; then echo -e "MySQL实例无法连接,退出脚本!!!" exit 1 fi
mv $SlowLogDir/$SlowLogFile $SlowLogDir/$SlowLogBakFile
/usr/local/mysql/bin/mysqladmin -u$DBUser -p$DBPass -S $SocketFile flush-logs slow
mv $SlowLogDir/$SlowLogBakFile $SlowLogBakDir/ gzip $SlowLogBakDir/$SlowLogBakFile
|
添加定时任务
58 23 */7 * * /bin/sh /opt/shell/logrotate-mysql-slowlog.sh &>/opt/shell/logs/logrotate-mysql-slowlog.log
|