我创建了一个批处理文件,用于创建数据库转储并将其保存在一个文件中,文件名中包含当前日期。该批处理文件运行良好,所有数据均正确保存。
我现在尝试设置一个计划任务来每周执行一次,但遇到了一个问题:虽然任务运行了,但它创建的文件是空的,好像它没有从远程数据库中提取任何数据。我知道这很模糊,但有人能告诉我从哪里开始寻找原因/解决方案吗?
** 编辑 **
好的,又有进展了 - 看起来可能是路径问题,我在批处理文件中设置了暂停,当通过任务计划程序运行时,它显示:“mysqldump 不是可识别的程序”。但是,当我通过命令行在我的用户帐户上运行时,它运行正常;只是为了确认,我已将其设置为在测试它的同一用户帐户上运行。
** 编辑 2 **
我找到了一种解决方案:我必须通过绝对路径引用 mysqldump 应用程序。但是我仍然不明白为什么直接从命令行运行时可以从路径中找到 mysqldump,但通过任务调度程序自动运行时却找不到。
答案1
也许网络不可用?您可以尝试将其安排为每 5/10 分钟运行一次,看看命令/变量是否正确。您确定脚本在作为整体运行时正确运行,而不是一次只运行单个命令?
在您的编辑 2 中:似乎PATH
环境变量中不存在 mysqldump。尝试添加它,然后重试。
答案2
您是否尝试过在详细模式下运行 mysqldump(在您的计划任务中)?(--verbose)
另外,也许看看您的任务以哪个用户身份运行,确保该用户有权运行 mysqldump 并在目标目录中创建文件。
答案3
如果给出绝对路径解决了您的问题,则无法创建空文件。相反,使用 Windows 调度程序日志创建的文件均未显示作业成功。
如果路径变量保存了 mysqldump.exe 的路径信息,您的脚本可能可以在命令行上运行。通过向命令行提供“path”命令来检查它。
供您参考,这里有我用于 mysql 备份的示例批处理文件。
@echo 关闭 设置 DB_USER_ID=[id] 设置 DB_USER_PASS=[密码] 设置数据库=[数据库名称] SET EXP_PATH=[备份路径] SET EXP_TMP_PATH=[临时路径] SET FILE_NAME=[备份文件名] 对于 /f "tokens=1-3 delims=- " %%a 在 ('date /t') 中执行 (设置今天=%%a-%%b-%%c) 删除/S/Q %EXP_PATH% md %执行路径% %EXP_TMP_PATH% C:\Bitnami\redmine-2.5.2-0\mysql\bin\mysqldump.exe -u%DB_USER_ID% -p%DB_USER_PASS% %DATABASE% > %EXP_TMP_PATH%\%FILE_NAME%_%today%.sql 移动 %EXP_TMP_PATH%\%FILE_NAME%_%today%.sql %EXP_PATH%\%FILE_NAME%_%today%.sql