需要确保mysqldump不会在计划备份计划中创建空转储文件

时间:2014-12-03 02:59:20

标签: mysql batch-file database-backups

我正在使用mysqldump将我的数据库备份到与谷歌驱动器直接链接的文件夹中。

我的批处理文件代码是

ECHO OFF

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 "datestamp=%YYYY%%MM%%DD%" & set "timestamp=%HH%%Min%%Sec%"
set "fullstamp=%YYYY%-%MM%-%DD%_%HH%-%Min%-%Sec%"
echo datestamp: "%datestamp%"
echo timestamp: "%timestamp%"
echo fullstamp: "%fullstamp%"

C:\"Program Files (x86)"\MySQL\"MySQL Workbench 6.0 CE"\mysqldump.exe --user=**** --password=**** --max_allowed_packet=1G --host=196.167.3.111 --port=3307 --default-character-set=utf8 --single-transaction=TRUE "test_sales_manager" > C:/Users/user/"Google Drive"/dumps/%fullstamp%.sql

我每天两次在任务调度程序上运行此backup.bat文件来备份我的数据库。 现在我想每小时运行一次,可能会删除时间戳并让文件被覆盖,但我需要确保不会创建空的转储文件。目前,如果连接或数据库服务器已关闭,则会创建一个空转储文件。我该如何避免这种情况?

1 个答案:

答案 0 :(得分:0)

检查mysqldump的退出代码,您可以按照以下步骤执行此操作

...
C:/..../mysqldump  .... %TEMP%/%fullstamp%.sql
IF %ERRORLEVEL% GEQ 1 GOTO EXIT

COPY %TEMP/%fullstamp%.sql C:/Users/user/"Google Drive"/dumps/%fullstamp%.sql
...

:EXIT
REM DO NOTHING - Something Went Wrong!

供参考,需要以下错误代码(来自client / mysqldump.c):

/* Exit codes */

#define EX_USAGE 1
#define EX_MYSQLERR 2
#define EX_CONSCHECK 3
#define EX_EOM 4
#define EX_EOF 5 /* ferror for output file was got */
#define EX_ILLEGAL_TABLE 6