免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1611 | 回复: 5
打印 上一主题 下一主题

我的mysql是怎么了,查询输出都有问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-23 11:24 |只看该作者 |倒序浏览
我的表结构如下:


  1. --
  2. -- 表的结构 `logs`
  3. --

  4. CREATE TABLE `logs` (
  5.   `host` varchar(32) default NULL,
  6.   `facility` varchar(10) default NULL,
  7.   `priority` varchar(10) default NULL,
  8.   `level` varchar(10) default NULL,
  9.   `tag` varchar(10) default NULL,
  10.   `date` date default NULL,
  11.   `time` time default NULL,
  12.   `program` varchar(15) default NULL,
  13.   `msg` text,
  14.   `seq` int(10) unsigned NOT NULL auto_increment,
  15.   `flag` tinyint(10) unsigned NOT NULL default '0',
  16.   PRIMARY KEY  (`seq`),
  17.   KEY `host` (`host`),
  18.   KEY `seq` (`seq`),
  19.   KEY `program` (`program`),
  20.   KEY `time` (`time`),
  21.   KEY `date` (`date`),
  22.   KEY `priority` (`priority`),
  23.   KEY `facility` (`facility`),
  24.   KEY `flag` (`flag`)
  25. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1530668 ;
  26.         
  27.         
  28. -- 表的结构 `info`
  29. --

  30. CREATE TABLE `info` (
  31.   `id` int(11) NOT NULL auto_increment,
  32.   `name` varchar(60) character set latin1 NOT NULL default '',
  33.   `name_en` varchar(60) collate gb2312_bin default NULL,
  34.   `ip` varchar(60) character set latin1 NOT NULL default '',
  35.   `memo` varchar(60) character set latin1 default NULL,
  36.   PRIMARY KEY  (`id`)
  37. ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COLLATE=gb2312_bin AUTO_INCREMENT=96 ;
  38.                

复制代码


logs表中记录大概有10W条左右;
通过perl程序每30秒,查询一次数据库,找出新记录(flag为0的记录,默认值0,处理过置1)的,输出到文本文件中,然后再进行处理,
sql语句如下:

  1.         my $sth1 = $dbh1->prepare("select logs.seq,logs.host,info.name,info.name_en,logs.priority,logs.msg into outfile \'/tmp/syslog.txt\' fields terminated by \'|\' lines terminated by \'\\n\' from info,logs where info.ip=logs.host and logs.flag=0 order by logs.seq ASC limit $rec_once ");
  2.        
  3.         if ($sth1->execute) {
  4.                 print "$timenow : Succeed to get data from syslog database !\n";
  5.                 system("cp /tmp/syslog.txt /tmp/tmpdir/syslog_$timenow.txt")
  6.         }
  7.         else {
  8.                 print "$timenow : Failed to get data ! \n"
  9.         }
复制代码


现在碰到这样的问题:
一般情况下,运行还是比较正常的,但过一段时间后,多长时间也没准,导出的文本文件中会有很多flag为1的记录(肯定被处理过的,从序号seq可以看出来,是最早的一些记录),不知道是为什么? 还请哪位高手帮忙解惑,不胜感激

[ 本帖最后由 kobbydf 于 2006-8-23 11:47 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-08-23 13:12 |只看该作者
要么是程序被改过,要么是表中的数据发生变化了,你不知道而已;又或者导出的数据被人改过了

论坛徽章:
0
3 [报告]
发表于 2006-08-23 13:35 |只看该作者
你说的程序被改过或导出的数据被人修改是不可能的,至于表中的数据发生变化,应该也是不可能的,等我把表中flag字段一起导出,就知道是不是了,

论坛徽章:
0
4 [报告]
发表于 2006-08-23 13:57 |只看该作者

学习

学习

论坛徽章:
0
5 [报告]
发表于 2006-08-23 16:10 |只看该作者
原帖由 kobbydf 于 2006-8-23 13:35 发表
你说的程序被改过或导出的数据被人修改是不可能的,至于表中的数据发生变化,应该也是不可能的,等我把表中flag字段一起导出,就知道是不是了,


如果什么情况都不可能的话,那么你的结果产生变化就需要由你自己来解释了,谁也帮不了你

论坛徽章:
0
6 [报告]
发表于 2006-08-25 17:47 |只看该作者
我把flag字段也导出了,sql语句:

  1. select logs.seq,logs.host,info.name,info.name_en,logs.priority,logs.msg  <...>
复制代码


改成

  1. select logs.seq,logs.host,info.name,info.name_en,logs.priority,logs.msg,logs.flag  <...>
复制代码


到目前运行了两天,还没有出现原来的问题,像是好了,其他什么也没动,还有前面我说的绝对是事实,爱信不信

真是奇怪,不解

[ 本帖最后由 kobbydf 于 2006-8-25 17:49 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP