正在加载中……
最新消息:欢迎大家访问,导航分类不完善,如果找不到自己想要的文章,可以通过【关键词】来进行搜索,^_^!

Windows环境MySql日志(log-slow-queries)分割Bat批处理

MySql REKFAN.COM 6249浏览 0评论

更多


最近MySql数据库很慢,想测试下哪些sql语句的压力大,无奈mysql数据库log-slow-queries日志不可分割,过大就不好下载查看分析了!
想了下面几个方法:

尝试一:通过隔一段时间拷贝到其他文件,然后null>log-slow-queries日志文件,让日志文件清空,结果系统提示文件被其他文件使用中,方法失败
尝试二:直接删除log-slow-queries,让其重新生成,结果删除后再次打开log-slow-queries日志文件提示,拒绝访问,通过

mysqladmin -uroot -p"密码" flush-logs
可以更新flush-logs可以更新过来,再次打开log-slow-queries日志就ok了!
根据上面思路,写了下面的简单批处理:

copy 日志文件 日志备份文件
DEL /F /A /Q 日志文件
mysqladmin -uroot -p"密码" flush-logs 

 加工后代码,核心代码就上面三句:

@echo off
cls
color 1E
title %date% %time:~,8% 『mysql日志切割处理』 BY:REKFAN
::::::::::::::::::::::::以下是需要配置的参数::::::::::::::::::::::::

rem 设置 MySql服务器root账号的密码
SET MySql_pw=rekfan.com

rem 设置 数据库日志目录
SET logs_Dir=f:\mysql_logs
rem 设置 数据库日志备份后目录
SET BAK_Dir=f:\mysql_logs_bak
rem 设置 以2001-01-01格式的日期为子目录
SET BAK_Dir2=%date:~0,4%-%date:~5,2%-%date:~8,2%

rem 设置 自动删除前几天的备份,单位:天,0为删除所有,慎用
SET Bak_Time_ago=30
rem 设置 WinRAR压缩软件的路径
SET RAR_Dir="C:\Program Files\WinRAR\WinRAR.exe"
rem mysql bin安装路径
SET mysql_path="C:\Program Files\MySQL\MySQL Server 5.5\bin"
rem 设置 需要备份的日志
SET BAK_FILE=mysql_log_slow.txt
rem 设置 本次操作的日志文件文件
SET LOG_FILE=%BAK_Dir%\%BAK_Dir2%\日志切割记录.log

::::::::::::::::::::::::以上是需要配置的参数::::::::::::::::::::::::

echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo. ┃                                                                   ┃
echo. ┃                   欢迎使用Mysql日志切割批处理                     ┃
echo. ┃           本代码由rekfan编写 Http://blog.rekfan.com               ┃
echo. ┃                                                                   ┃
echo. ┃  …………………………………………………………………………………… ┃
echo. ┃   关于本脚本                                                      ┃
echo. ┃ ::本脚本调用了临时VBS代码进行日期计算                             ┃
echo. ┃ ::本脚本为兼容不同的日期格式,调用reg命令,统一设置日期格式        ┃
echo. ┃ ::本脚本如果想放在windows计划任务里执行,请去掉脚本里的所有pause   ┃
echo. ┃ ::因每个服务器的Mysql环境不一样,备份的核心语句自行更改            ┃
echo. ┃ ::本脚本没有版权,可以任意改为自己想要的效果,转载请勿删除该注释语句┃
echo. ┃                                          By REKFAN 2012-10-22     ┃
echo. ≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡
echo.

if not defined MySql_pw (echo MySql_pw 尚未定义!)
if not defined logs_Dir (logs_Dir 尚未定义!)
if not defined BAK_Dir (echo BAK_Dir 尚未定义!)
if not defined BAK_Dir2 (echo BAK_Dir2 尚未定义!)
if not defined Bak_Time_ago (echo Bak_Time_ago 尚未定义!)
if not defined RAR_Dir (RAR_Dir 尚未定义!)
if not defined mysql_path (mysql_path 尚未定义!)
if not defined BAK_FILE (BAK_FILE 尚未定义!)
if not defined LOG_FILE (LOG_FILE 尚未定义!)

:: 取得当前计算机时间,以 yyyy-MM-dd 格式显示
for /f "skip=2 delims=" %%a in ('reg query "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate') do (
SET RegDateOld=%%a
)
SET RegDateOld=%RegDateOld:~-8%
::通过改变注册表改变计算机的日期格式
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d yyyy-M-d /f>nul
>"%temp%\DstDate.vbs" echo LastDate=date()-%Bak_Time_ago%
>>"%temp%\DstDate.vbs" echo FmtDate=right(year(LastDate),4) ^& right("0" ^& month(LastDate),2) ^& right("0" ^& day(LastDate),2)
>>"%temp%\DstDate.vbs" echo wscript.echo FmtDate
for /f %%a in ('cscript /nologo "%temp%\DstDate.vbs"') do (
SET DstDate=%%a
)
::删除指定时间前的备份
SETlocal enabledelayedexpansion
echo. 删除 %BAK_Dir2%〔%Bak_Time_ago%〕天前的备份文件
for /f "delims= " %%i in ('dir /ad/b %BAK_Dir%\????-??-??') do (
SET t1=%%i
SET t2=!t1:~0,4!!t1:~5,2!!t1:~8,2!
if /i !t2! leq %DstDate% (
DEL /F /A /Q \\?\%BAK_Dir%\!t1!\*.*
rd /q /s \\?\%BAK_Dir%\!t1!
echo. 备份文件夹%BAK_Dir%\!t1!删除完成!)
)
:: 还原计算机注册表的日期格式
reg add "HKEY_CURRENT_USER\Control Panel\International" /v sShortDate /t REG_SZ /d %RegDateOld% /f>nul

echo. 开始以当前日期创建文件夹
if not exist %BAK_Dir%\%BAK_Dir2% md %BAK_Dir%\%BAK_Dir2%
cd /d %BAK_Dir%\%BAK_Dir2%
echo.
:: 记录时间日志
echo 备份时间:%BAK_Dir2% %time:~0,8%  >> %LOG_FILE%
echo /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ >> %LOG_FILE%
echo. 开始建立今天(%BAK_Dir2%)的备份

:: 备份的核心代码
SetLocal DisableDelayedExpansion
for %%i in (%BAK_FILE%) do (
copy %logs_Dir%\%%i %BAK_Dir%\%BAK_Dir2%\%%i
echo MySql数据库日志【%%i】 已经备份到%BAK_Dir%\%BAK_Dir2%\%%i >> %LOG_FILE%
%RAR_Dir% a %%i_%time:~0,2%%time:~3,2%%time:~6,2%.rar %%i
echo MySql数据库日志【%%i】 已经压缩到%BAK_Dir%\%BAK_Dir2%\%%i_%time:~0,2%%time:~3,2%%time:~6,2%.rar >> %LOG_FILE%
DEL /F /A /Q %BAK_Dir%\%BAK_Dir2%\%%i
echo %BAK_Dir%\%BAK_Dir2%\%%i 删除 >> %LOG_FILE%
DEL /F /A /Q %logs_Dir%\%%i
echo 强制删除MySql数据库日志【%logs_Dir%\%%i】>> %LOG_FILE%
%mysql_path%\mysqladmin -uroot -p%MySql_pw% flush-logs
echo 刷新MySql数据库日志 flush-logs >> %LOG_FILE%
)

:exitbat
echo ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/ >> %LOG_FILE%
rem if exist *.log DEL /F /A /Q *.log

echo. 所有备份建立完毕
:: 清除变量
SET MySql_pw=
SET logs_Dir=
SET BAK_Dir=
SET BAK_Dir2=
SET Bak_Time_ago=
SET RAR_Dir=
SET mysql_path=
SET BAK_FILE=
SET LOG_FILE=

转载请注明:|REKFAN|系统运维| » Windows环境MySql日志(log-slow-queries)分割Bat批处理

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址