【问题标题】:Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 91 bytes) error while trying to backup database致命错误:尝试备份数据库时,允许的内存大小为 33554432 字节已用尽(尝试分配 91 字节)错误
【发布时间】:2016-04-17 09:32:07
【问题描述】:

尝试使用 Codeigniter dbutil backup() 函数在在线休息服务​​器上备份数据库时出现致命错误:允许的内存大小为 33554432 字节耗尽(尝试分配 91 字节)错误。

这是我的代码:

    $this->load->dbutil();
    $backup =& $this->dbutil->backup(); 
    $this->load->helper('file');
    write_file('./uploads/db/mybackup.gz', $backup);

我无法找出我做错了什么。

【问题讨论】:

  • php.net/manual/en/ini.core.php#ini.memory-limit 。您刚刚使用了 PHP 设置允许的所有内存。增加 php.ini 中的值。下次读取错误,清楚地说明问题。
  • 我可以从本地服务器增加 php.ini 的内存限制。如何增加在线服务器中的 php.ini 值?
  • 如果你没有生产权限,不如按照我的建议使用 ini_set 函数
  • 你应该看看原生的mysqldump,而不是依赖CodeIgniter基本上用一堆$output.= 'insert into...';填满PHP的内存,然后将输出写入磁盘。
  • 至少在 CodeIgniter 2.1.4 中,转到 /system/database/drivers/mysql/mysql_utility.php 并找到函数 _backup() 以查看您的内存耗尽的确切原因。问题是该实用程序没有将数据流式传输到文件,而是尝试将所有字节加载到内存中。

标签: php database codeigniter


【解决方案1】:

你需要使用这个来增加你的脚本内存:

ini_set('memory_limit', '-1'); 

您需要在文件顶部使用这一行。

通过增加 memory_limit,您的脚本将占用服务器的无限内存。

如果您有权访问 php.ini 文件,则可以增加 php.ini 文件的限制,否则您需要添加此行。

旁注:

如果您认为无限内存会影响其他区域,您可以将自定义值设置为:

ini_set('memory_limit', '512M');  //increase size as you need

【讨论】:

  • 我不会这样做。遇到其他问题的风险很大。
  • @e-p 是的,你说得对...我已经更新了我的答案..但如果它是一个有用的解决方案,我不知道是否投反对票。
  • 更新后删除了反对票。投票的原因是您在没有解释风险的情况下向初学者提供了危险的解决方案。
  • 感谢朋友提及原因。知道我做错了什么真的很好...感谢您的纠正。 @e-p
  • 谢谢。像魅力一样工作......:) @devpro
【解决方案2】:

数据库可能太大了?

“由于 PHP 可用的执行时间和内存有限,可能无法备份非常大的数据库。如果您的数据库非常大,您可能需要通过命令行直接从 SQL 服务器备份,或者让您的如果您没有 root 权限,服务器管理员会为您执行此操作。"

http://www.codeigniter.com/user_guide/database/utilities.html

编辑:正如@E_p 所说,您的内存不足,但我的回答可能是导致错误的最可能原因...

编辑 2:

正如另一个答案中所述,我强烈提醒您不要将内存使用设置为无限制ini_set('memory_limit', '-1');,尤其是在您使用共享服务器时。

【讨论】:

  • 我的数据库文件大小为 6.5 MB。
  • 他们只是措辞不同;)。学习 PHP ;)。
  • @Sazzad-UlIslam 没关系,你只允许 32MB 的运行时内存以及所有额外的东西,你的 6.5Mb 很容易超过 32Mb 的内存
猜你喜欢
  • 2013-02-24
  • 1970-01-01
  • 2023-03-16
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2020-04-10
  • 2013-07-22
相关资源
最近更新 更多