常用的 mysql 数据库恢复工具(也能进行备份操作)是 phpmyadmin,这是一个开源、免费的工具,大多数商(例如 hawkhost)都会免费提供 。相信很多站长也用过 phpmyadmin 来进行网站数据库的备份和恢复,确实很方便,并且有多国语言界面。不过,有一种情况可能你还没碰到,就是当你的数据库体积比较大时,例如 sql 备份文件大于 2mb,甚至大于 10mb,这个时候如果你通过 phpmyadmin 来进行数据库的恢复,就会出错,显示如下的提示:
这是因为你的 sql 文件体积太大,超过了 phpmyadmin 的处理能力,这种情况在网络速度比较慢的情况下尤为突出,例如站长在周末晚上8点这个网络拥挤的时段尝试使用 phpmyadmin 来恢复大型 mysql 数据库备份,就容易遇到这种问题。
很显然 phpmyadmin 只适用于恢复比较小的 sql 文件备份。对于超大 mysql 数据库备份的恢复,你必须换一个专用的恢复工具,那就是: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 数据库连接参数。如下图所示:
一般来说,设置好这几项就可以了。对于某些特殊数据库,还需要在下面第66行左右设置数据库字符编码。bigdump.php 文件中没有预设这个参数,原文是:
$db_connection_charset = '';
如果你的数据库是 utf-8 编码,那么此处就要修改为:
$db_connection_charset = 'utf8';
注意那个连字符要去掉。如下图所示:
接下来将设置好的 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 正确,就应该看到如下画面:
这就表示 bigdump 工具已经成功启动,它在启动时就自动扫描所在目录中的全部文件和子目录。如果找到 sql 格式或者 gzip/zip 格式文件,就假设这是数据库文件,在这些文件后面,就会显示出相应的操作链接。例如在上图中,它探测到所在目录中有一个 gate2.sql 文件,那么针对该文件就在表格右侧同一行中显示了两条操作链接,分别是“start import”(开始导入)和“delete file”(删除文件)。上图的表格中也显示了 sql 文件的大小,可以看到这个备份文件接近 150mb。
在上图中,还可以看到一个文件上传功能,点击那个“浏览”按钮,你就可以上传一个 sql 文件(或其压缩包)来进行导入。但是我们不推荐使用此功能。对于大型文件,ftp 上传是最佳选择。
4、运行 bigdump 导入功能
点击上图中的“start import”链接,就看到如下画面:
上面这个截图是导入开始一段时间之后所截取的,可以看出 bigdump 正在顺利进行 sql 文件的导入。表格中不仅显示了文件大小,还显示了已经导入的字节数及总体进度。
经过一段时间后(大约20分钟),这个 150mb 大小的 sql 文件终于导入结束,看到如下画面:
原来显示进度条的地方,现在显示了一条消息:
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 的面板上去掉“扩展插入”的勾选。如下图所示:
3、如何使 akeeba backup 与 bigdump 配合工作?
我们前面推荐大家使用 akeeba backup 来制作备份文件。那么,可否使用 akeeba backup 来制作数据库备份,然后通过 bigdump 导入?当然是可以的。不过,这里面需要一些特殊技巧。我们将在 akeeba backup 使用详解 这篇教程中介绍。
4、使用 bigdump 导入仍然发生超时错误
这种问题多见于配置比较低的服务器,或者服务器繁忙时段。那么,你可以尝试修改 bigdump.php 文件中的“other settings (optional)” 这部分的 $linespersession 参数,将默认值 3000 修改得更小一些。(不过,我认为你还是换一个更好的服务器吧,例如 hawkhost)。
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 备份文件非常容易。如果你参照上述注意事项及操作过程,仍然不能顺利完成数据库备份文件的导入,那么请到阅读更多 faq,查找原因。