mysql保留原有文件_Windows批处理脚本,用于备份本地MySQL数据库,并且仅使用备份文件保留N个最新文件夹...

我正在使用adityasatrio的批处理文件来备份本地MySQL数据库,并且希望仅保留30个最新的备份文件。在此示例中使用root:root。

@echo off

set dbUser=root

set dbPassword=root

set backupDir="D:\MySQLDumps\dbs\"

set mysqldump="C:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump.exe"

set mysqlDataDir="C:\wamp\bin\mysql\mysql5.6.17\data"

set zip="C:\Program Files\7-Zip\7z.exe"

:: get date

for /F "tokens=2-4 delims=/ " %%i in ('date /t') do (

set yy=%%i

set mon=%%j

set dd=%%k

)

:: get time

for /F "tokens=5-8 delims=:. " %%i in ('echo.^| time ^| find "current" ') do (

set hh=%%i

set min=%%j

)

echo dirName=%yy%%mon%%dd%_%hh%%min%

set dirName=%yy%%mon%%dd%_%hh%%min%

:: switch to the "data" folder

pushd %mysqlDataDir%

:: iterate over the folder structure in the "data" folder to get the databases

for /d %%f in (*) do (

if not exist %backupDir%\%dirName%\ (

mkdir %backupDir%\%dirName%

)

%mysqldump% --host="localhost" --user=%dbUser% --password=%dbPassword% --single-transaction --add-drop-table --databases %%f > %backupDir%\%dirName%\%%f.sql

%zip% a -tgzip %backupDir%\%dirName%\%%f.sql.gz %backupDir%\%dirName%\%%f.sql

del %backupDir%\%dirName%\%%f.sql

)

popd

现在,我对以下问题进行了很好的了解:

for /f "skip=30 delims=" %%A in ('dir /a:-d /b /o:-d /t:c *.sql ^2^>nul') do if exist "%%~fA" echo "%%~fA"

(是的,我稍后将echo更改为del,但首先我想看看会发生什么)

for /f "skip=30 eol=: delims=" %%F in ('dir /b /o-d *.sql') do @del "%%F"

在批处理文件的末尾,就在

del %backupDir%\%dirName%\%%f.sql

做到这一点?

我以前从未做过此事,但已经搜索了MySQL数据库的自动本地备份应用程序/ php脚本/ mysqldump命令/

etc,甚至尝试使用Workbench只是发现在社区版中无法设置任何计划(感谢Oracle) 。

所有其他应用程序都需要有人打开该应用程序并单击“立即运行”,或者希望您为设置时间表付费(不用了,谢谢)。

我认为可以使用Windows 7及更高版本计算机上的工具来完成此操作。请帮助我将此功能添加到脚本中,太好了,谢谢。

编辑1:

当添加引号命令时,什么也不会发生。创建的备份目录也仅显示时间,而不显示年,月和日。做进一步的研究以找出原因。有任何想法吗?

此评论删除所有(除X个最新文件夹外)谈论删除5个最新文件夹,尽管当我像这样使用它时

for /f "skip=2 delims=" %%a in ('dir %backupDir%\%dirName% /o-d /b') do rd /S

/Q "%backupDir%\%dirName%\%%a"

错误如下。

The system cannot find the file specified.

The system cannot find the path specified.

edit2:

下面是使用@foxidrive帮助设置我喜欢的文件夹名称的代码,但最后一点是,尝试仅保留3个最新文件夹(仅用于测试目的3个),并删除其中的其余文件夹backupDir似乎无法解决。

感谢您的任何帮助。

@echo off

set dbUser=root

set dbPassword=root

set "backupDir=D:\MySQLDumps\dbs\"

set "mysqldump=C:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump.exe"

set "mysqlDataDir=C:\wamp\bin\mysql\mysql5.6.17\data"

set "zip=C:\Program Files\7-Zip\7z.exe"

rem The four lines below will give you reliable YY DD MM YYYY HH Min Sec MS variables in XP Pro and higher.

for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"

set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"

set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%" & set "MS=%dt:~15,3%"

set "dirname=%YY%-%MM%-%DD% %HH%-%Min%-%Sec%"

echo "dirName"="%dirName%"

pause

:: switch to the "data" folder

pushd "%mysqlDataDir%"

:: create backup folder if it doesn't exist

if not exist "%backupDir%\%dirName%\" mkdir "%backupDir%\%dirName%"

:: iterate over the folder structure in the "data" folder to get the databases

for /d %%f in (*) do (

echo processing folder "%%f"

"%mysqldump%" --host="localhost" --user=%dbUser% --password=%dbPassword% --single-transaction --add-drop-table --databases %%f > "%backupDir%\%dirName%\%%~nxf.sql"

"%zip%" a -tgzip "%backupDir%\%dirName%\%%~nxf.sql.gz" "%backupDir%\%dirName%\%%~nxf.sql"

del "%backupDir%\%dirName%\%%~nxf.sql"

)

popd

:: delete all but the latest 3 folders

for /f "skip=3 delims=" %%A in ('dir /b /ad /o-n "%backupDir%\%dirName%\*"') do @echo rd /s /q "%backupDir%\%dirName%\%%~A"

pause

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值