我有一台 VPS 机器,我安装了 phpMyAdmin 并插入了数据库。但是现在当我想要备份并导出数据库时,它说:
这是错误日志:http: //pastebin.com/44N4YcAk
[2013 年 6 月 18 日星期二 21:40:16] [错误] [客户端] PHP 致命错误:在 /usr/share/phpmyadmin/libraries/tcpdf/tcpdf.php 中允许的内存大小为 16777216 字节已用尽(尝试分配 491520 字节)
我有一台 VPS 机器,我安装了 phpMyAdmin 并插入了数据库。但是现在当我想要备份并导出数据库时,它说:
这是错误日志:http: //pastebin.com/44N4YcAk
[2013 年 6 月 18 日星期二 21:40:16] [错误] [客户端] PHP 致命错误:在 /usr/share/phpmyadmin/libraries/tcpdf/tcpdf.php 中允许的内存大小为 16777216 字节已用尽(尝试分配 491520 字节)
你不应该为此使用 phpmyadmin,你应该使用 mysqldump。从命令行
mysqldump -uMYSQL-USER -h server -pMYSQL-USER database_name > /path-to-export
来自 php 脚本
$command = "mysqldump -uMYSQL-USER -h server -pMYSQL-USER database_name > /path-to-export/file.sql";
exec($command, $output, $return_var);
这很容易通过 cronjob 实现自动化
浏览这篇文章,它展示了如何增加内存;或者只使用命令行导入:
它在底部说
PHP Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 491520 bytes) in /usr/share/phpmyadmin/libraries/tcpdf/tcpdf.php on line 22694,
您的 VPS 内存不足或您的 PHP 设置不允许分配超过 16MB 的内存。
增加 php.ini 中的内存或只使用 mysqldump
php.ini 更改
memory_limit = 64M
我强烈推荐使用 mysqldump 虽然这是我的备份脚本的摘录
#!/bin/bash
time=`date +%Y-%m-%d_%H-%M-%S`
mysqldump -u mysqluser -pmysqlpassword --all-databases | 7za a -si database/backup-${time}.sql.7z -p7zpass
将备份保存在受密码保护的 7zip 文件中7zpass
执行此命令:
nano /usr/share/phpmyadmin/export.php
按 ctrl+w 并找到:
// now export the triggers (needs to be done after the data because
此命令在此命令之后的文件中使用了两次,您会看到嵌套的 if,因此在嵌套的 if 更改中:
break 2;
至
break;
在这两种情况下,您的导出功能都可以正常工作
小费:
将 mysql 引擎改为 InnoDB 而不是 MyISAM,主要目的是在清理表或删除它们之后声明存储。