- 积分
- 19754
- 经验
- 1998 点
- 热情
- 1987 点
- 魅力
- 145 点
- 信誉
- 1406 度
- 金币
- 2571 枚
- 钻石
- 41 颗
- 蓝光币
- 10 ¥
Forum CEO
- 金币
- 2571 枚
- 体力
- 12349 点
|
网上经常有人说 Discuz 论坛 pre_home_feed数据表错误,返回的错误信息类似”Table ‘.\home_feed’ is marked as crashed and last (automatic?) repair failed.” 通过discuz自带的tools工具修复不了,通过phpmyadmin修复出现数据表“使用中”。
[Type] 查询语句错误
[144] Table ‘.\tuiguba\home_feed’ is marked as crashed and last (automatic?) repair failed
[Query] SELECT * FROM home_feed WHERE uid=’92′ ORDER BY dateline DESC LIMIT 0,1
错误编号:145
问题分析:
这种情况是不能打开 %s.MYI 造成的,引起这种情况可能的原因有:
1、服务器非正常关机,数据库所在空间已满,或一些其它未知的原因,对数据库表造成了损坏。
2、类 unix 操作系统下直接将数据库文件拷贝移动会因为文件的属组问题而产生这个错误。
解决方法:
1、修复数据表
可以使用下面的三种方式修复数据表:(第二种方法仅适合独立主机用户)
1)通过 tools.php 修复,这个文件的下载地址为:https://www.discuz.net/thread-1024315-1-1.html,然后上传到服务器的相应程序目录下,如通过 https://站点地址/tools.php 访问;
2)使用 myisamchk ,MySQL 自带了专门用户数据表检查和修复的工具 —— myisamchk 。更改当前目录到 MySQL安装目录的 bin 目录下面,一般情况下只有在这个下面才能运行 myisamchk 命令。常用的修复命令为:
myisamchk -r 数据文件目录/数据表名.MYI;- CODE: [COPY]
- myisamchk -r 数据文件目录/数据表名.MYI;
复制代码 3)通过 phpMyAdmin 修复, phpMyAdmin 带有修复数据表的功能,进入到某一个表中后,点击“操作”,在下方的“表维护”中点击“修复表”即可。
注意:以上三种修复方式在执行前一定要备份数据库。
2、修改文件的属组(仅适合独立主机用户)
1)复制数据库文件的过程中没有将数据库文件设置为 MySQL 运行的帐号可读写(一般适用于 Linux 和 FreeBSD 用户)。
利用dz后台的数据库检测工具检测了下说pre_home_feed()和pre_home_feed_app()字符集错误,不知道是不是他备份的时候讲数据库下的所有文件备份到本地,然后直接上传的缘故,如果利用phpmyadmin修复这个表可能会出现“使用中”这样的状况,到数据库目录查看会有.TMD后缀的文件出现,网上很多教程说通过.TMD改名然后恢复之类,其实没有必要,我是这样操作的:
- 停止数据库(必须要停止数据库),net stop mysql,使用的lnmp集成包安装的环境,那么就是:/etc/init.d/mysql stop
- 删除数据库目录下的.TMD文件,如果你的服务器是linux,也可以使用如下的命令:rm -f /你的数据库目录/*.TMD
- 然后运行:myisamchk -r /你的数据库目录/*.MYI,修复进程会逐个表进行修复。
- 修复完成后启动数据库net start mysql,lnmp下应该是:/etc/init.d/mysql start
现在进phpmyadmin看看已经修复好了,如果你按照这个步骤操作不可行,那么建议你重建这两个表,当然如果你有备份,单独提取这两张表恢复进你的数据库也可以,不过这样操作需要一个额外的数据库来操作,我觉得因为这两个表是dz家园动态的,清空这两个表的数据对于网站也没有什么大的损害,方法是在dz的后台-站长-数据库-升级里粘贴如下的数据库升级语句:
执行前最好先对比一下下面两个表的原理的字段
后台,站长,数据库,升级。- DROP TABLE IF EXISTS pre_home_feed;
- CREATE TABLE pre_home_feed (
- feedid int(10) unsigned NOT NULL AUTO_INCREMENT,
- appid smallint(6) unsigned NOT NULL DEFAULT '0',
- icon varchar(30) NOT NULL DEFAULT '',
- uid mediumint(8) unsigned NOT NULL DEFAULT '0',
- username varchar(15) NOT NULL DEFAULT '',
- dateline int(10) unsigned NOT NULL DEFAULT '0',
- friend tinyint(1) NOT NULL DEFAULT '0',
- hash_template varchar(32) NOT NULL DEFAULT '',
- hash_data varchar(32) NOT NULL DEFAULT '',
- title_template text NOT NULL,
- title_data text NOT NULL,
- body_template text NOT NULL,
- body_data text NOT NULL,
- body_general text NOT NULL,
- image_1 varchar(255) NOT NULL DEFAULT '',
- image_1_link varchar(255) NOT NULL DEFAULT '',
- image_2 varchar(255) NOT NULL DEFAULT '',
- image_2_link varchar(255) NOT NULL DEFAULT '',
- image_3 varchar(255) NOT NULL DEFAULT '',
- image_3_link varchar(255) NOT NULL DEFAULT '',
- image_4 varchar(255) NOT NULL DEFAULT '',
- image_4_link varchar(255) NOT NULL DEFAULT '',
- target_ids text NOT NULL,
- id mediumint(8) unsigned NOT NULL DEFAULT '0',
- idtype varchar(15) NOT NULL DEFAULT '',
- hot mediumint(8) unsigned NOT NULL DEFAULT '0',
- PRIMARY KEY (feedid),
- KEY uid (uid,dateline),
- KEY dateline (dateline),
- KEY hot (hot),
- KEY id (id,idtype)
- ) TYPE=MyISAM;
复制代码 这样这两个表就不会有问题了。 |
|