4

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

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

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

shell> mysqlbinlog [options] log_file

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

$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 函数,它输出相同:

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

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

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

非常感激

4

1 回答 1

0

几天前我已经弄清楚了,所以这是解决方案。

虽然 mysqlbinlog 由 PHP 执行,但如果从浏览器运行,它仍然无法读取 MySQL 的二进制文件,由于某种原因,它显示文件不存在。那从来都不是我的计划,所以 cron 作业和 sh 文件为我解决了问题。

Cron 作业将以 root 身份运行脚本,而不会将其内容暴露给外界。

现在我的循环复制故障转移脚本运行良好。

于 2012-08-27T14:50:20.110 回答