discuz官方说,过几个月,可以优化一下数据库,提防碎片过多,影响论坛速度,因此我就登陆到他论坛后台,先更新了下系统缓存,然后直接点击优化数据库,提示有二百多M碎片数据表需要优化,这已经非常多了,默认是选择所有需要优化表状态,直接点击提交,进行优化。优化时,网站已经不能访问了,然后连接服务器,也出现连接非常缓慢的情况,怀疑是优化时占用资源过多,引起服务器响应不过来其他请求,假死机了。继续远程连接,仍然连接不上,无奈,只有关掉刚才的优化网页,依照经验,这时候是不能让机房重启服务器的,这种硬性的重启是非常容易损失表以及表中的数据库。关掉优化网页以后,等了一会,可以连接上远程桌面了,此时网站网页已经提示错误代码“posts‘ is marked as crashed and last (automatic?) repair failed”,看越来是posts表损坏,自动修复没有成功。这个表存有大量的帖子数据,是非常重要而关键的表,这个表如果损失不能修复,论坛就要麻烦大了。
想了想,依据以前的经验,discuz论坛官方提供的有数据库修复文件“repair.php”,把此文件上传至网站后,在浏览器中运行此文件,可以依照提示“检测并修复数据库一次”或“检测并修复数据库五次”,用此文件没有用,修复完以后,状态都提示OK,但网页访问故障依旧。用discuz官方提供的“tools.php”,发现检测和修复数据库功能和“repair.php”差不多,只是集成了一些其他的工具。
到discuz论坛,以关键字“修复”搜索了下,发现童虎有一篇贴子“教你如何修复数据表”,其中提到了几种方法来修复数据表:
服务器非法关机,有可能会对部分数据库造成一定影响。一般运行会报错,**.MYI 不能打开。 Can‘t find file: ‘***.MYI‘ 请使用repair.php或者使用phpmyadmin修复一下数据表。
1.上传repair.php到论坛根目录下,然后在浏览器运行http://你的论坛地址/repair.php
一般点击第一个链接“repair.php?html=1&check=1”就可以修复了,
如果不能修复可以尝试点击第二个连接“repair.php?check=1&iterations=5”
就可以了。
提醒:修复完表操作以后一定记得要从服务器删除这个文件repair.php
2.使用phpmyadmin修复数据表
进入论坛数据库,然后选择要修复的表,在页脚下拉框选择“修复”即可。
3.如果您的服务器是独立主机强烈建议使用命令行方式进行修复:
修复前将mysql服务停止。
如果是Win主机,打开命令行方式,然后进入到mysql的/bin目录。
执行myisamchk -r d:\mysql\data\discuz\*.MYI
其中d:\mysql\data\discuz\换成您的数据库所在路径。
如果是类Unix主机,直接使用myisamchk -r 数据库目录\*.MYI 即可。
其中我用第二种办法时,在phpmyadmin中显示此表正在使用中,phpmyadmin修复操作无法对此表进行修复操作。那就用第三种办法了,朋友服务器用的是win服务器主机,于是打开命令行,首先停止mysql服务:net stop mysql,然后进入到mysql的bin目录,输入:myisamchk -r d:\mysql\data\discuz\*.MYI,如果是能确认是哪个表,也可以把前面的*号直接换为具体的表名称,一般全部修复没问题。回车确定后,修复进程就在不断的一个表一个表,一行一行的修复中了。
修复过后,启动mysql数据库,net start mysql,然后到浏览器,打开论坛页面,试着浏览帖子,发贴等,已经全部正常,至此完全恢复OK。
经验就不多说了,在操作过程中中断是非常可怕的事,当然,关机断电更可怕。另外,更重要的一点就是在出问题以后,进行操作修复以前,一定要停掉mysql,然后直接到data目录中,备份好你的数据库,这很关键;一定要是停掉mysql以后备份。备份,是一个很好的习惯!呵!! .
TAG: discuz 论坛,修复