PHP和mysql';s二进制日志文件


PHP and mysql's binary log file

我正在尝试从我运行的虚拟机中使用PHP恢复MySQL二进制日志文件的内容。我正在虚拟机和LAMP上运行CentOS。

我有4台虚拟机在虚拟网络上运行,它们都位于同一个子网上,MySQL数据库已经启动并运行,复制正在工作。

我正在尝试使用PHP恢复master的bin日志的内容。通常情况下,可以使用以下命令恢复文件的内容:

shell> mysqlbinlog [options] log_file

我写了一个PHP脚本,在本地机器上执行shell命令:

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

我已经检查了provider-bin.00003是否存在,shell_exec函数是否工作并且没有被禁用。

当我在控制台上执行命令时,问题就会发生——我得到了bin文件的内容,但PHP脚本没有输出预期的结果。

它输出以下内容:

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

更新:exec

我也尝试过使用exec函数,它的输出也是一样的:

$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003";
print_r(exec($cmd,$ret_value)) . "<br />DONE";
echo "<pre>".shell_exec($cmd." 2>&1");

非常感谢

我几天前就想好了,下面是解决方案。

尽管mysqlbinlog是由PHP执行的,但如果从浏览器运行,它仍然无法读取MySQL的二进制文件,因为某种原因,它显示文件不存在。这从来都不是我的计划,所以cron作业和sh文件对我来说很有用

Cron job将以root用户身份运行脚本,而不会向外界爆料其内容。

现在,我的循环复制故障转移脚本正在愉快地运行。