2012-08-22 2 views
4

Я пытаюсь восстановить содержимое бинарного файла журнала MySQL с помощью PHP с виртуальной машины, в которой я запущен. Я запускаю CentOS на виртуальной машине и LAMP.PHP и mysql файл двоичного журнала

У меня есть 4 виртуальных компьютера, работающих в виртуальной сети, все они расположены в одной подсети, а базы данных MySQL работают и работает, и репликация работает.

Я пытаюсь восстановить содержимое журнала регистрации хозяина с помощью PHP. Обычно содержимое файла может быть восстановлен с помощью следующей команды:

shell> mysqlbinlog [options] log_file 

я написал скрипт, который выполняет команду оболочки на локальной машине:

$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003"; 
echo "<pre>".shell_exec($cmd); 

Я проверил, что поставщик -bin.000003 существует и что функция shell_exec работает и не отключена.

Проблема возникает, когда я выполняю команду на консоли. Я получаю содержимое файла bin, но сценарий PHP не выводит ожидаемый результат.

Он выводит следующую вместо:

/*!40019 SET @@session.max_insert_delayed_threads=0*/; 
/*!50003 SET @[email protected]@COMPLETION_TYPE,COMPLETION_TYPE=0*/; 
DELIMITER /*!*/; 
DELIMITER ; 
# End of log file 
ROLLBACK /* added by mysqlbinlog */; 
/*!50003 SET [email protected]_COMPLETION_TYPE*/; 

Update: EXEC

Я также попытался с помощью EXEC функции ADN выводит то же самое:

$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003"; 

print_r(exec($cmd,$ret_value)) . "<br />DONE"; 

echo "<pre>".shell_exec($cmd." 2>&1"); 

Высокую оценку

+0

Имеет ли интересующий файл/каталог соответствующие разрешения, позволяющие пользователю PHP/Apache получить к нему доступ? Обратите внимание, что запуск командной строки в консоли не обязательно совпадает с тем, что PHP делает то же самое для вас (пользователю PHP не разрешается делать то, что вы можете с консоли). –

+0

Я выполняю скрипт PHP как задание cron, поэтому он должен иметь права root. Я проверяю разрешения на данный момент, используя команду whoami. Я отдам его, и если проблема возникнет оттуда, я удалю этот вопрос. – thedethfox

+1

Вам необязательно удалять вопрос. Не стесняйтесь отвечать на свой вопрос, если хотите ... таким образом люди, у которых есть подобная проблема в будущем, будут знать, что делать. –

ответ

0

У меня есть фигура Это на пару дней, а вот решение.

Хотя mysqlbinlog запускается PHP, он все еще не может читать двоичные файлы MySQL, если он запускается из браузера, по какой-то причине он показывает, что файл не существует. Это никогда не было моим планом, поэтому работа cron и sh-файл сделали для меня трюк.

Задача Cron будет запускать скрипт как корень, не нарушая его содержимое во внешний мир.

Теперь мой круговой репликационный сценарий отказа от работы работает счастливо.

Смежные вопросы