PHP和mysql的二进制日志文件

标签 php mysql database

我正在尝试使用 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.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");

非常感谢

最佳答案

我几天前就弄明白了,所以这里是解决方案。

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

Cron 作业将以 root 身份运行脚本,而不会向外界公开其内容。

现在我的循环复制故障转移脚本可以正常运行了。

关于PHP和mysql的二进制日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12075049/

相关文章:

php - 为什么代码 "Linux host path"的进程中会出现 "echo"?用法 PHP 扩展 "PCNTL"

mysql - 当从 Spring 服务调用的存储过程完成其工作时,如何立即开始某些工作?

SQL Server CE ORM

php - 在 php 中使用 jquery 变量值?

javascript - 我在 jquery ajax post 和 php 中遇到一些问题

php - 使用 php/mysql 从 json 获取特定数组数据

php - PHP 5.3.2-1ubuntu4.2 不支持闭包

c# - 如何通过列名检查 MySqlDataReader 中的 NULL?

php - 带引号的 URL 导致错误

mysql - 优化缓慢的索引选择 MySql 查询