北极寒流 » 网络资源 » phpmyadmin 导入大数据库文件的方法及软件下载 - 2015.11.05

phpmyadmin 导入大数据库文件的方法及软件下载

phpMyAdmin使用方便,已成为大多数站长的常用工具,对于小型网站来讲phpmyadmin已经绰绰有余了,但是对于中大型网站,在数据库较为庞大的时候,phpmyadmin就显得力不从心了!一般情况下,phpMyAdmin最大限制上传2M以内的文件,但是当网站运营一段时间后,即使把sql格式的数据库压缩成zip格式,想变成2M以内是不太现实的。

个人并不推荐使用phpMyAdmin来导入大数据库,因为大多数用户使用的是虚拟主机,很多文件没有服务器权限是无法修改的,而且phpmyadmin对大数据库的执行效率也非常低,容易出现错误。

如果你很执着一定要用phpmyadmin来进行数据库导入操作,网络上虽然可以找到很多资料,但大多数都不全,只解决了一部分问题,所以我整理出了相对比较靠谱的方案,

以下是我搜集的一些解决phpMyAdmin上传文件大小限制的方法

方案一(简单)

打开phpmyadmin下的配置文件 config.inc.php

查找

$cfg['UploadDir'] = ”;
$cfg['SaveDir'] = ”;

给他们赋值

$cfg['UploadDir'] = ‘upload’;
$cfg['SaveDir'] = ‘save’;

修改后如果提示“配置文件现在需要绝密的短语密码(blowfish_secret)。”不用担心,问题解决方案

因为一些特殊原因,我需要对phpmyadmin的配置文件进行修改,但是修改后就出现问题了,一打开phpmyadmin,就出现“配置文件现在需要绝密的短语密码(blowfish_secret)。”

那就按照他的提示来吧,在配置文件里设置一个密码就是了。

打开phpmyadmin的配置文件 phpmyadmin/config.inc.php(注:php5.0为config.sample.inc.php)

查找 $cfg['blowfish_secret'] 把他的值修改下,任意数字字母都可以,也就是错误信息中提到的设置短语密码。重启Apache,搞定!

libraries文件夹里面找到config.default.php这个文件,复制出来外层文件夹改名成config.inc.php开始配置。

搜索找到$cfg['blowfish_secret'] = '';改成$cfg['blowfish_secret'] = '随便填写个字符串';比如$cfg['blowfish_secret'] = '123456789';如果不填写在打开phpmyadmin的时候没有输入用户名和密码的地方,而会出现错误,需要绝密短句。

$cfg['Servers'][$i]['host'] = 'localhost';localhost是你的主机名

$cfg['Servers'][$i]['auth_type'] = 'cookie';或者$cfg['Servers'][$i]['auth_type'] = 'config';

$cfg['Servers'][$i]['user'] = 'root';root为mysql默认用户名

$cfg['Servers'][$i]['password'] = 'root用户名对应的密码';

其他可以默认,这样就可以连接上带密码的mysql数据库了。

然后在 phpMyAdmin 的目录下创建两个空目录,upload 和 save,并且把要导入的数据库文件(必须是sql格式,非zip格式)传送到 upload 目录下。

登录phpMyAdmin,点导入(import) 发现多了一个 网站服务器上传文件夹

20140923030736479

选择网站服务器上传的文件夹里的数据库就可以了,然后点击【执行】按钮就可以顺利导入超大型的数据库了。

方案二(繁琐)

打开PHP配置文件 php.ini

查找 upload_max_filesize 和 post_max_size 把他们的值修改的大一点

如果上传的文件很大,还需进行以下修改

  • max_execution_time(php页面执行最大时间)
  • max_input_time(php页面接受数据最大时间)
  • memory_limit(php页面占用的最大内存)

这是因为phpmyadmin上传大文件时,php页面的执行时间、内存占用也势必变得更长更大,其需要php运行环境的配合,光修改上传文件大小限制是不够的。

打开 phpmyadmin 目录下的 config.inc.php 文件

查找 $cfg[‘ExecTimeLimit’]配置选项,默认值是300,需要修改为0,即没有时间限制。

打开 phpmyadmin 目录下的 import.php 文件 修改 $memory_limit 的值

20140923024155719

说明:首选读取php.ini配置文件中的内存配置选项memory_limit,如果为空则默认内存大小限制为2M,如果没有限制则内存大小限制为10M,你可以结合你php.ini配置文件中的相关信息修改这段代码。

其他的导入大数据库的解决方案

推荐使用 BigDump工具 来进行导入大数据库的操作。

BigDump 数据库导入工具简介

BigDump 是由德国人 Alexey Ozerov 用 PHP 语言开发的一个工具脚本,它只有一个文件,名为 bigdump.php(你可以改名运行)。这个文件是独立运行的,因此与你的网站核心程序无关,不管是 WordPress,Drupal 还是 Joomla,只要你使用的是 MySQL 数据库,都可以用 BigDump 来恢复超大的 .sql 格式备份文件。

BigDump 工作的原理也很简单:切割分段导入。它在读取 SQL 文件时,每次只读取一小部分,将其导入,然后重新开始一次恢复进程,再读取一小部分…… 周而复始,直到将整个 SQL 文件全部导入。

BigDump 数据库恢复工具用法演示

假设我们已经有了一个 MySQL 数据库的备份文件,名为 gate2.sql,文件大小约 150MB(这么大的文件别指望通过 phpMyAdmin 来恢复了)。数据库字符编码为 utf-8。我们演示一下如何通过 bigdump.php 工具将这个备份文件恢复到在线数据库中去。

1、获取 BigDump 文件并设置

我们下载 BidDump 工具并解压,得到一个 bigdump.php 文件。毫无疑问,bigdump.php 文件需要设置一些参数,否则它怎么知道要导入的数据库的连接帐号?

用文本编辑器打开 bigdump.php 文件,在大约第 38 行开始,我们设置要导入的 MySQL 数据库连接参数。如下图所示:

20140923034412534

一般来说,设置好这几项就可以了。对于某些特殊数据库,还需要在下面第66行左右设置数据库字符编码。bigdump.php 文件中没有预设这个参数,原文是:

$db_connection_charset = '';

如果你的数据库是 UTF-8 编码,那么此处就要修改为:

$db_connection_charset = 'utf8';

注意那个连字符要去掉。如下图所示:

20140923034413968

接下来将设置好的 bigdump.php 文件上传到 Joomla 网站上,推荐上传到 /tmp 这个临时目录。

2、上传 MySQL 数据库备份文件

现在需要将数据库备份文件上传到 bigdump.php 所在的 /tmp 目录中。考虑到文件较大,我们通过FTP 软件 FileZilla 上传zip 格式的文件,然后借助 Joomla 后台安装的 eXtplorer 资源管理器组件将其远程解压,在 /tmp 目录中得到 gate2.sql 文件。

3、启动 BigDump 工具

在浏览器地址栏输入 bigdump.php 所在 URL 并回车,运行这个文件。例如本次演示是在本地测试服务器上进行,那么对应的运行网址是:

http://localhost/gate/tmp/bigdump.php

如果你输入的 URL 正确,就应该看到如下画面:

20140923034414168

这就表示 BigDump 工具已经成功启动,它在启动时就自动扫描所在目录中的全部文件和子目录。如果找到 SQL 格式或者 gzip/zip 格式文件,就假设这是数据库文件,在这些文件后面,就会显示出相应的操作链接。例如在上图中,它探测到所在目录中有一个 gate2.sql 文件,那么针对该文件就在表格右侧同一行中显示了两条操作链接,分别是“Start Import”(开始导入)和“Delete file”(删除文件)。上图的表格中也显示了 SQL 文件的大小,可以看到这个备份文件接近 150MB。

在上图中,还可以看到一个文件上传功能,点击那个“浏览”按钮,你就可以上传一个 SQL 文件(或其压缩包)来进行导入。但是我们不推荐使用此功能。对于大型文件,FTP 上传是最佳选择。

4、运行 BigDump 导入功能

点击上图中的“Start Import”链接,就看到如下画面:

20140923034416660

上面这个截图是导入开始一段时间之后所截取的,可以看出 BigDump 正在顺利进行 SQL 文件的导入。表格中不仅显示了文件大小,还显示了已经导入的字节数及总体进度。

经过一段时间后(大约20分钟),这个 150MB 大小的 SQL 文件终于导入结束,看到如下画面:

20140923034416348

原来显示进度条的地方,现在显示了一条消息:

Congratulations: End of file reached, assuming OK

意思是说:已经到达文件末尾,想必应该成功了。看到这条消息,你就可以完全放心了。BigDump 已经成功地将你的 SQL 备份文件导入到你所指定的 MySQL 数据库里面了。

注意:数据库恢复成功结束后,不要忘记删除 bigdump.php 备份工具和你的 SQL 文件!

使用 BigDump 数据库导入工具的注意事项

1、在开始导入之前,目标数据库必须清空

如果目标数据库里面含有记录,那么 BigDump 就无法导入,会报错停止。因此请在开始运行 bigdump.php 文件之前,将目标数据库清空(最好删除全部内容)。

2、所用的 SQL 文件不能含有 Extended Inserts

或许很多第一次使用 BigDump 的用户都会遭遇这个问题。这是因为 phpMyAdmin 在导出数据库时,已经默认勾选了“使用扩展插入”。

这里的“扩展插入”就是 Extended Inserts,而 BigDump 是不能处理带有 Extended Inserts 的 SQL 文件的。所以,在你制作数据库备份时,必须在 phpMyAdmin 的面板上去掉“扩展插入”的勾选。如下图所示:

20140923034418387

3、如何使 Akeeba Backup 与 BigDump 配合工作?

我们前面推荐大家使用 Akeeba Backup 来制作备份文件。那么,可否使用 Akeeba Backup 来制作数据库备份,然后通过 BigDump 导入?当然是可以的。不过,这里面需要一些特殊技巧。我们将在 Akeeba Backup 使用详解 这篇教程中介绍。

4、使用 BigDump 导入仍然发生超时错误

这种问题多见于配置比较低的服务器,或者服务器繁忙时段。那么,你可以尝试修改 bigdump.php 文件中的“Other settings (optional)” 这部分的 $linespersession 参数,将默认值 3000 修改得更小一些。(不过,我认为你还是换一个更好的服务器吧)。

5、发生 MySQL 服务器超载怎么办?

如果服务器性能较差,在运行 bigdump.php 过程中可能会发生 MySQL 服务器超载(overrun)故障。你可以修改 bigdump.php 文件中的 $delaypersession 参数来解决。该参数让 bigdump.php 文件在结束一个片段的导入之后,休息一段时间(你设定的数值就是暂停的时间,单位:毫秒),然后再开始下一个片段的导入,这样服务器就不会太累了。

6、直接把 .sql 格式文件交给 BigDump

在本次演示中,我们先将 zip 格式的备份包上传到服务器上,然后又将它解压成 .sql 格式的文件,再通过 BigDump 来导入。为什么不直接用 BigDump 来导入压缩格式的备份文件?

没错,BigDump 具有导入压缩格式 SQL 备份文件(zip/gzip)的能力,但是在处理压缩文件时,它需要先在临时目录中将其解压,再读取。请注意:这个解压并不是一次性的,而是每导入一个小片段,就要将整个压缩包重新解压一次。因此,直接导入压缩格式文件,反而使 bigdump.php 运行变慢。

7、我还有更奇怪的问题……

一般来说,运行 bigdump.php 导入一个 SQL 备份文件非常容易。如果你参照上述注意事项及操作过程,仍然不能顺利完成数据库备份文件的导入,那么请到BigDump 官方网站阅读更多 FAQ,查找原因。

bigdump软件下载地址

http://www.ozerov.de/bigdump/