Chinaunix首页 | 论坛 | 博客
  • 博客访问: 575263
  • 博文数量: 89
  • 博客积分: 2383
  • 博客等级: 大尉
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-09 23:02
个人简介

Scientific Linux是重新编译的Red Hat Enterprise Linux,由费米国家加速器实验室、欧洲核研究组织以及世界各地的大学和实验室共同开发。它旨在与Red Hat Enterprise Linux完全兼容,也强调自主方便的定制,用户可以根据自己的需求做相应修改,可以使用脚本或者Anaconda给自己定制最小化的安装模式。

文章分类

全部博文(89)

文章存档

2017年(1)

2016年(2)

2013年(2)

2012年(2)

2011年(16)

2010年(13)

2009年(46)

2008年(7)

我的朋友

分类: LINUX

2016-04-12 09:25:33

extmail自己在用,发现错误:
Apr 10 07:03:19 mail dspam[1468]: query error: Duplicate entry '1-2288815384906775934' for key 'id_token_data_01': see sql.errors for more details
Apr 10 07:03:19 mail dspam[1468]: bailing on error -2
Apr 10 07:03:19 mail dspam[1468]: received invalid result (!DSR_ISSPAM && !DSR_ISINNOCENT): -2
Apr 10 07:03:19 mail dspam[1468]: process_message returned error -5.  delivering.

mysql出现“Incorrect key file for table” 错误!

度娘居然没有给我什么帮助,还是自己想的办法,其实很简单,就是mysql中dspam库的dspam_token_data表文件中token字段记录有重复数据,怎么折腾都白搭,正确的处理方法是:
     第一种方法(原有数据不保留了):先stop掉dspamd服务,service dspamd stop,然后清空dspam_token_data的所有数据(我用Navicat for mysql 图形界面做到的),然后在该表上做一个token字段的主键(主键就不会再重复了)。然后重启服务即可。
    第二种方法(保留表里原有数据,想办法去掉重复的,然后见token设置成主键):先stop掉dspamd服务,将dspam_token_data导出成“,”分割的txt文件,然后导入到excel,注意将token字段定义成文本格式,否则那数据末尾全部变成0000了(这就是为什么要导出文本,而不导出成excel),可以用excel中“数据”-->“删除重复数据”来清楚重复内容,再将mysql中dspam_token_data表清空,导入这些处理完的数据,恢复dspamd服务,错误没了!

   第三种方法,野蛮法,进入mysql命令行:
use dspam; 
delete dspam_token_data from dspam_token_data,(select  token  from dspam_token_data  group  by  token   having  count(token) > 1) as t2 where dspam_token_data.token=t2.token;
直接删除重复数据。

    还是需要最后搞一下:
/usr/bin/myisamchk -r /var/lib/mysql/dspam/dspam_token_data.MYI

有时候有人搞3下:
/usr/bin/myisamchk -of /var/lib/mysql/dspam/dspam_token_data.MYI
/usr/bin/myisamchk -r /var/lib/mysql/dspam/dspam_token_data.MYI
/usr/bin/myisamchk -safe -recover /var/lib/mysql/dspam/dspam_token_data.MYI

好像只有这样好使:在linux终端中,进入mysql>命令行,执行
repair table dspam_token_data;
搞定。

zoux> mysql -u root -p
mysql> use dspam;
mysql>
repair table dspam_token_data;

亡羊补牢呀,根本问题解决不了,几分钟马上就出来Duplicate key记录了,只好写到crontab里了:
1. 编辑文件:vi  /root/mysql_repair.sql
use dspam;
repair table dspam_token_data;
2. crontab -e 加入:5分钟搞一次!
*/3 * * * * /usr/bin/mysql -u dspam -p'dspam' dspam < /root/mysql_repair.sql

也不知道这和/usr/bin/myisamchk -r /var/lib/mysql/dspam/dspam_token_data.MYI是不是一回事!

-------------------------
基本稳定了,我已经关掉/usr/bin/myisamchk -r /var/lib/mysql/dspam/dspam_token_data.MYI,这没用,
真正有效的是
*/3 * * * * /usr/bin/mysql -u dspam -p'dspam' dspam < /root/mysql_repair.sql,确实解决问题。
不过,我这么做只是投机取巧,真正解决问题应该是dspam内部如何在写入dspam_token_data库时,检查是否重复。

这个问题暂时这么样了!


阅读(2336) | 评论(3) | 转发(0) |
给主人留下些什么吧!~~

zeuls2016-05-05 16:56:10

还行,基本可用了!

zeuls2016-04-12 13:34:52

基本是搞定了!

zeuls2016-04-12 10:06:39

败了!还没搞定!