【问题标题】:backup mysql database in php using mysqldump使用 mysqldump 在 php 中备份 mysql 数据库
【发布时间】:2011-05-25 18:53:46
【问题描述】:

我有这段代码,它使用 mysqldump 来备份 mysql 数据库。问题是我遇到了这个致命错误:

致命错误:最大执行时间 超过 60 秒 C:\wamp\www\pos\php\backupdb.php 上 第 13 行

第 13 行是最后一行。

<?php
$backupFile = 'c:\\onstor'. date("Y-m-d-H-i-s") . '.sql';
$command = "mysqldump --opt -u root -p onstor > $backupFile";
system($command);
?>

我该怎么办,我认为代码没问题,因为我在命令提示符下尝试过它并且它有效。 是不是我把mysql/bin的路径放到环境变量里面了。

【问题讨论】:

标签: php mysql


【解决方案1】:

正如错误消息所言,问题很明确,是您的脚本运行时间过长。通过 Web 服务器执行的脚本并不意味着运行时间超过几秒钟。您可以使用set_time_limit 更改它,但您真正应该做的是让长时间运行的脚本从命令行运行。由于您唯一要做的就是运行 CLI 命令,因此只需完全放弃 PHP 包装器即可。如有必要,将其设为 shell 脚本。定期将此 shell 脚本作为 cron 作业/Windows 调度程序任务(或任何 Windows 等效项)运行。

【讨论】:

  • 我必须把这个 set_time_limit 放在哪里?在 php.ini 的末尾?还是在文件本身中?
  • 转储模块的开头。将它放在 php.ini 中将适用于所有项目。此外,放入您的通用控制器(为所有模块运行的文件)将适用于您的所有模块,这是不必要的
【解决方案2】:

您的代码看起来不错。倾倒需要很多时间。就这样。阅读此Fatal error: Maximum execution time of 400 seconds exceeded。先做那里写的,然后在你的代码中寻找任何问题。

【讨论】:

    【解决方案3】:

    消息说您已达到 60 秒的执行时间。

    您可以使用set_time_limit 函数更改它,即:

     set_time_limit(120); // 2 minutes
    

    但我不知道您为什么会尝试在 PHP 中使用 mysqldump,这对我来说似乎很危险。

    【讨论】:

    • @RageZ 有多危险?你能解释一下吗。 PhpMyAdmin 也允许数据转储。
    • @Sandeepan:如果您使用某些浏览器进行转储,这意味着您必须为您的网络服务器提供足够的权限才能将转储写入某个目录。如果该目录在您的服务器根目录中,则意味着全世界都可以下载转储。 phpMyAdmin 提供了这样的功能,但我认为它需要一些安全措施,比如下载完成后删除转储等等......
    • @Sandeepan:另外,你必须有一个登录名/密码才能使用 phpmysql,这可能不是你的页面的情况,或者至少取决于你。
    • 现在这可能是一个不同的问题。需要时间(倾倒)吗?更好地提出一个单独的问题
    • @Sandeepan:它会读取您的整个数据库并制作一个文件,所以是的,如果您有数千行,这将需要时间。我认为您不必再​​提出一个问题;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2011-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多