VBB论坛数据库备份/还原成功
时间:2007-10-03 来源:poople
P.S.感谢FreeBSD项目组的delphij兄的提点。
桑梓原有的VBB论坛有几年没有升级了,◎独自一人◎提出要升级论坛。
首先要先导出原有数据库,复制一份供◎独自一人◎测试。几年下来桑梓有广大校友拥护,人气一直不减,论坛数据库自然也是巨大。在phpmyadmin下查了一下,数据库总大小3.4G,其中有张postindex的表大小2.4G,难点就在这里。
一开始按照技术手册中的方法来导,使用不加参数的mysqld,过了大半天,提示导出结束。新建了个bbstest数据库,使用mysql命令直接重定向导入,在postindex表卡死,myadmin查看一直显示是1K。此后,还试过使用VBB自带的管理后台来导,phpmyadmin自带的工具来导,均没有成功。
后来,在ChinaUnix找到一篇文章,上面提到
缺省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大表,几乎是失败的。你可用--quick 选项告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾倒过程,使用--opt而不是--quick。--opt选项打开其它选项,加速数据的倾倒和把它们读回。
用--opt实施备份可能是最常用的方法,因为备份速度上的优势。然而,要警告你,--opt选项确实有代价,--opt优化的是你的备份过程,不是其他客户对数据库的访问。--opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表。你可在一般数据库访问上很容易看到其效果。当你的数据库一般非常频繁地使用,只是一天一次地调节备份。
用--opt实施备份可能是最常用的方法,因为备份速度上的优势。然而,要警告你,--opt选项确实有代价,--opt优化的是你的备份过程,不是其他客户对数据库的访问。--opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表。你可在一般数据库访问上很容易看到其效果。当你的数据库一般非常频繁地使用,只是一天一次地调节备份。
问题就出在这个postindex表大小已经超过服务器内存容量,导出的时候读入内存失败,该表没有正确导出到sql文件,到此进程就结束了,再后来的导入当然出错。使用--quick参数再试,果然可以,110张表完整的出现在phpmyadmin里。
在这里,还要友情提醒一下,使用命令行导数据库的时候是没有进度显示的,可以通过phpmyadmin来查看。还有就是导大表的时间相当长,我是用了一个上午,各位不要误以为僵死而将其终止。 相关阅读 更多 +