数据表损坏有很多种情况,下面我将分三种情况为大家做一下讲解:
(一)cdb_sessions表损坏或丢失,需要重建
session 表是内存表,记录在线会员信息的,是即时读写的,所以它损坏时可以重建,遇到类似下面的错误时你只需重建这个表即可,用修复无效。
常见错误举例:
____________________________________________________________________
There seems to have been a problem with the database of your Discuz! Board
Discuz! info: MySQL Query Error
Time: 2006-7-13 9:35pm
Script: /bbs/viewpro.php
SQL: DELETE FROM cdb_sessions WHERE sid='2o3tkl' OR lastactivity<(1152797706-900) OR ('0'<>'0' AND uid='0') OR (uid='0' AND ip1='202' AND ip2='160' AND ip3='180' AND ip4='40' AND lastactivity>1152797706-60)
Error: Table 'cdb_sessions' doesn't exist
数据表缺失,请恢复备份数据
Please check-up your MySQL server and forum scripts, similar errors will not be reported again in recent 24 hours
If you have troubles in solving this problem, please visit Discuz! Community http://www.Discuz.net.
__________________________________________________________________
Discuz! info: MySQL Query Error
User: tiger21
Time: 2006-7-16 1:47am
Script: /index.php
SQL: INSERT INTO cdb_sessions (sid,ip1, groupid, styleid, lastactivity, action, fid )
VALUES ('qFPkDG','000' ,'1', '1','1152985061','2','95')
Error: Duplicate entry 'qFPkDG' for key 1
Errno.: 1062
An error report has been dispatched to our administrator.
重建 cdb_sessions 表的方法和过程:
1、打开论坛安装包的 \upload\install 目录,找到 discuz.sql 文件打开,复制其中有关 cdb_sessions 表的内容;如图 1 所示:
2、打开 phpmyadmin,点 “SQL” 菜单,将上面复制的内容粘贴,执行即可。如图2所示:
cdb_sessions 重建完成,打开论坛可以看到论坛显示正常。
注:其他数据表损坏请慎用重建数据表的方法,重建数据表后该数据表的资料将完全遗失,其他数据表损坏请先恢复数据表,并时常对您的论坛进行备份数据,以便出现数据表丢失错误时可以及时恢复。
(二)数据表损坏,需要修复数据表
错误举例:
Discuz! info: MySQL Query Error
User: lovegogo
Time: 2006-8-9 9:19am
Script: /admincp.php
SQL: SELECT * FROM cdb_memberfields LIMIT 68100, 300
Error: Got error 127 from table handler
Errno.: 1030
Similar error report has beed dispatched to administrator before.
由于 MySQL 本身的读写及锁定机制等方面的原因,与一些其他数据库软件一样,在特殊情况下的极为频繁读写时,或在服务器掉电、死机等情况下,相关的数据文件可能会发生被损坏的情况,通常可以采用以下的方式加以解决。
1、tools.php 修复工具
使用方法:在Discuz!5.5 安装包的 ./utilities 目录下找到 tools.php文件,将 tools.php 文件上传到论坛根目录下,如图 3 所示:
打开 tools.php 文件,在文件头部找到
$tool_password = ''; //请您设置一个工具包的高强度密码,不能为空!
在这里设置该工具包的密码,注意不能为空!例如图 4 所示:
如果未设置密码则访问该文件如图 5 所示:
在浏览器中如下运行该文件:http://你的论坛地址/tools.php ,如图 6 所示提示输入密码:
输入密码后进入该系统如图 7 所示:
点击“检查或修复 Discuz! 数据库”,如图 8 所示:
点击“检查并尝试修复数据库1次”,检查结果如图 9 所示:
也可以点击“检查并尝试修复数据库5次”,确保数据库修复完全。
2、myisamchk 修复工具
MySQL 自带了专门用户数据表检查和修复的工具—— myisamchk,当 repair.php 多次修复均无法成功时,可以在服务器终端使用 myisamchk 进行修复。
常用的修复命令为 myisamchk -r 数据文件目录/数据表名.MYI,如果 -r 参数不能奏效,可以先把数据文件备份(备份可使用直接文件复制的方式,详见《数据备份与恢复》中的说明)后使用 -o 参数,如果 -o 还不可以的话,就使用 -f 参数,如果还是无法修复,只有使用你的备份文件来恢复数据了。
具体修复过程:
(1)在“运行-cmd”下更改当前目录到 mysql/bin 下面并关闭 MySQL 数据库;
如图 10 所示:
(2)执行 myisamchk -r E:/Database/bbs1/*.MYI;
(E:/Database/bbs1为你论坛数据库的存放路径)
如图 11 所示:
执行成功如图 12 所示:
(3)启动MySQL数据库。如图 13 所示:
数据表修复成功,您可以继续开启你的网站运行了!
下面给的一个是linux下面的修复方法,和上面的基本相同.只是linux下面关闭和启动mysql的方法和windows的不同.一般情况下linux用
- /etc/init.d/mysql stop service mysqld stop /etc/init.d/mysql start service mysqld start
复制代码
来关闭和启动mysql,如图 14 所示:
3、数据表经常性损坏的解决方法
首先请确认在服务器硬件不存在问题(如内存工作不稳定、散热条件不好等),且使用中的操作系统版本也没有相关的 BUG 报告或升级补丁。这种情况下,如果数据库仍出现经常性的损坏,请检查是否 MySQL 的编译方式或参数存在问题。通常情况下使用官方提供的编译好的版本是比较稳定的,可以长期使用。如果您钟爱自行编译相关程序,请确认您的语言编译器(如 gcc)和配置的相关参数没有导致不稳定的因素。同时,磁盘分区满也可能是导致数据表经常性损坏的原因。网上提供了一些问题的处理方法(英文),需要时可多参考,并针对您的具体服务器环境制定解决方案。
(三) 数据表丢失,需要恢复数据
出现类似这种错误 Error: Table 'bbs.cdb_threads' doesn't exist
,此时数据表已经丢失了,无法修复,只能恢复备份数据,所以请时常对您的论坛数据进行备份,以便出现数据表丢失错误时可以及时恢复。
如果你是在后台做的备份,数据量不是很大,使用后台“资料恢复”即可恢复数据;如果你的数据量很大,建议使用restore.php进行恢复。
注:具体论坛的备份和恢复方法在“论坛搬家详解”里有详细的说明。
[ 本帖最后由 紫琼 于 2007-4-25 14:53 编辑 ] |