Тест MySqldump на успех или неудачу - PullRequest
1 голос
/ 05 января 2012

Я использую mysqldump, чтобы сделать резервную копию моей базы данных mysql и поставил ее под задание cron.Я хочу проверить его успех или неудачу и хочу, чтобы он повторил сообщение об успехе или неудаче в электронном письме задания cron, но не получилось?Пожалуйста, помогите мне ...

Какую команду передать?Я сделал это, но не смог:

В мой скрипт резервного копирования php я включил:

   $testvar = '
            if [ "$?" -eq 0 ]
then
        echo "Success"
        else
        echo "Mysqldump encountered a problem look in database.err for information"
        fi
            ';

    exec($testvar);

Мой сервер говорит: Неожиданный конец файла

Сценарий:

 $creatBackup = 'mysqldump -uabc -p password  mydb > myfile '.       
        'if [ "$?" -eq 0 ]; then
        eho "Success"    

 else  echo "Mysqldump encountered a problem"
fi
    ';



$BackupMessage = exec($creatBackup);

echo $BackupMessage;

Ответы [ 4 ]

3 голосов
/ 05 января 2012

Вы пытаетесь запустить содержимое скрипта bash, используя exec. Это не правильно; exec предназначен для запуска команд или файлов сценариев, а не сценариев оболочки.

Я вижу два способа исправить это:

1) Сохраните содержимое вашего скрипта в файле bash и запустите его, используя exec:

/ вар / WWW / скрипты / script.sh:

#!/bin/bash
mysqldump -uabc -p password  mydb > myfile
if [ "$?" -eq 0 ]; then
    echo "Success"    
else
    echo "Mysqldump encountered a problem"
fi

PHP:

$creatBackup = '/var/www/scripts/script.sh';
$BackupMessage = exec($creatBackup);
echo $BackupMessage;

2) Другой способ - перехватывать не только выходные данные скрипта, но и стандартные ошибки (проверьте третий exec параметр ):

$creatBackup = 'mysqldump -uabc -p password  mydb > myfile';
exec($creatBackup, $output, $returnVar);
var_dump($output, $returnVar);
1 голос
/ 31 января 2014

Ответил в аналогичной теме, но с той же проблемой.Получение сообщений об ошибках mysqldumps через PHP: mysqldump через PHP

0 голосов
/ 05 января 2012

Я думаю, что код выхода mysqldump поможет вам. Он вернет 0 при успехе, любое другое значение при ошибке.

Функция php passthru вернет это значение во втором параметре.

0 голосов
/ 05 января 2012

Если вы включили ссылочный код в ваш скрипт резервного копирования php, вы неправильно вызываете функцию 'exec', которая требует ссылки на внешнюю программу. Содержимое вашей переменной '$ testvar' выглядит как сценарий оболочки (sh или bash), а не как имя внешнего сценария (и путь к файлу).

Следующий скрипт оболочки запустит команду mysqldump и может быть выполнен через cron, чтобы вы получили по электронной почте уведомление об успехе или сбое дампа базы данных. Вам нужно настроить PHP-скрипт для создания файлов резервных копий для mysqldump.

#!/bin/sh
if /usr/local/mysql/bin/mysqldump -u root -pyourpassword yourdatabasename 
then
    echo 'Success'
else
    echo 'Mysqldump encountered a problem look in database.err for information'
fi

Надеюсь, это поможет!

...