我正在尝试使用PHP从我正在运行的虚拟机中恢复MySQL二进制日志文件的内容。我在虚拟机和LAMP上运行CentOS。
我在虚拟网络上运行了4个虚拟机,它们都位于同一个子网上,MySQL数据库已启动并正在运行,并且复制正在运行。
我正在尝试使用PHP恢复主人的bin日志的内容。通常,可以使用以下命令恢复文件的内容:
shell> mysqlbinlog [options] log_file
我编写了一个PHP脚本,在本地计算机上执行shell命令:
$cmd="mysqlbinlog /var/lib/mysql/provider-bin.000003";
echo "<pre>".shell_exec($cmd);
我检查过provider-bin.000003是否存在以及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");
非常感谢
答案 0 :(得分:0)
我已经想出了几天的痛苦,所以这就是解决方案。
虽然mysqlbinlog由PHP执行,但如果从浏览器运行,它仍然无法读取MySQL的二进制文件,由于某种原因它显示文件不存在。这不是我的计划,所以一个cron作业和sh文件为我做了伎俩。
Cron作业将以root身份运行脚本,而不向外界展示其内容。
现在,我的循环复制故障转移脚本正在愉快地运行。