Я создал пакетный файл, чтобы создать дамп базы данных и сохранить его в файл с текущей датой как часть имени файла. Пакетный файл работает великолепно, и все данные сохранены правильно.
Сейчас я попытался настроить запланированное задание для этого еженедельно, но столкнулся с проблемой: хотя задание выполняется, файл, который он создает, пуст, как если бы он не извлекал данные из удаленной базы данных. Я знаю, что это довольно расплывчато, но кто-нибудь может сказать, с чего бы я начал искать причину / решение?
** РЕДАКТИРОВАТЬ **
Да, больше прогресса - похоже, это может быть проблема с путём. Я поставил паузу в командном файле, и при запуске через планировщик задач он говорит: «mysqldump не является распознанной программой». Однако при запуске через командную строку в моей учетной записи он работает нормально; просто чтобы подтвердить, я настроил его на ту же учетную запись, на которой я его тестировал.
** РЕДАКТИРОВАТЬ 2 **
Я нашел своего рода решение: мне пришлось ссылаться на приложение mysqldump по его абсолютному пути. Однако я до сих пор не могу понять, почему он может найти mysqldump по пути при запуске непосредственно из командной строки, но не при автоматизации через планировщик задач.
3 ответа на вопрос
1
Sathya
Может быть, сеть была недоступна? Вы можете попробовать запланировать его запуск каждые 5/10 минут и посмотреть, правильно ли работают команды / переменные. Вы уверены, что скрипт работает правильно, когда запускается как единое целое, а не как одна команда за раз?
На вашем редактировании 2: Похоже, mysqldump не присутствует в PATHпеременных среды. Попробуйте добавить это и попробуйте снова.
это не проблема сети, я могу запустить весь командный файл из командной строки, и он работает нормально, и я получаю ту же проблему, пытаясь выполнить резервное копирование с моего локального сервера MySQL
richzilla 14 лет назад
0
да это проблема, это в пути. в пути я получил `c: \ xampp \ mysql \ bin \`, где bin содержит все двоичные файлы mysql. при запуске командного файла из командной строки мне просто нужно сослаться на имя приложения - `mysqldump`. При запуске из планировщика задач он отказывается работать, если я не предоставлю командному файлу полный путь к `mysqldump.exe`
richzilla 14 лет назад
0
0
Aerik
Вы пытались запустить mysqldump (в запланированном задании) в подробном режиме? (--подробный)
Также, возможно, посмотрите, от какого пользователя выполняется ваша задача, убедитесь, что у пользователя есть разрешения на запуск mysqldump и создание файла в целевом каталоге.
Пользователь, с которым запускается задача, такой же, как пользовательская папка, к которой относятся все файлы, поэтому это не должно быть проблемой с разрешениями.
richzilla 14 лет назад
0
Я попробовал многословный флаг, снова он работает нормально, если я запускаю командный файл из командной строки, но если я запускаю его из планировщика задач, командная строка мигает, а затем сразу исчезает, я никогда не получаю шанс увидеть, что это говорит.
richzilla 14 лет назад
0
0
Heungwoo
If giving absolute path solved your problem, it is not possible to create empty file. Instead no file created with windows scheduler log shows job successful.
Your script might works on command line, if path variable holds the path information to mysqldump.exe. Check it by giving "path" command to command line.
For your reference here is sample batch file I've used for mysql backup.
@echo off SET DB_USER_ID=[id] SET DB_USER_PASS=[password] SET DATABASE=[database name] SET EXP_PATH=[backup path] SET EXP_TMP_PATH=[temp path] SET FILE_NAME=[backup filename] For /f "tokens=1-3 delims=- " %%a in ('date /t') do (set today=%%a-%%b-%%c) del /S /Q %EXP_PATH% md %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 move %EXP_TMP_PATH%\%FILE_NAME%_%today%.sql %EXP_PATH%\%FILE_NAME%_%today%.sql