我有一个数据表,建立在wamp环境下。由于需要FULLTEXT搜索,数据表类型设置为MyISAM,11个字段中有6个为INDEX索引。
现在每天数据表都在进行频繁的进行30000+的擦写,(多数都是并发的),导致1,2天就会产生一次坏表。'MySQL Error : Table ... is ed as crashed and should be repaired '然后总是在MYPHPADMIN里手动repair table `tablename`来手动修复。 但是人不可能24小时监视着数据库,况且每一次repair的过程都要好几分钟。求教高手们有没有好的应对方法?

解决方案 »

  1.   

    错误日志好大啊~
    PC-20081226FOHX.err
    已经好几十个MB了,打不开,卡……我所说的(多数都是并发的)是因为我有许多计划任务,有时需要在同一秒钟内开启10个来文件,同时INSERT一些数据。(恨死WIN系统了,不支持CRONTAB,自带计划任务实在太简陋了……)你问我:“系统进程是否有异常中止?”,我现在想起来了,坏表大都是在服务器重启后造成的。以前对电脑不是很懂,选了WIN系统。现在很想换成ubuntu,另外也想换掉MySQL(如果没有很好的办法从根本上解决问题的话)。求教:Postgresql,oracle或者nosql支持FULLTEXT搜索吗?是不是比MySQL稳定点?另外还关心检索执行的速度。谢谢斑竹。
      

  2.   

    只用过sqlserver得全文索引,还不错,另外肯定是在windows上得 
      

  3.   

    错误日志不要用notepad打开 用UltraEdit
      

  4.   

    net stop mysql
    删除错误日志
    net start mysql
    等待出现表损坏
    查看错误日志你现在几百M的日志文件,在WIN下,也可以用MORE工具来打开查看。
      

  5.   

    Database was not shut down normally! 看样子是什么原因导致了服务器重启了吧。如果不是无故重启,MySQL表不会随便损坏的吗?110428  9:36:27 [ERROR] MySQL: Table '.\1311241909_mysite\myarticles' is ed as crashed and should be repaired
    110428  9:37:41 [Note] Found 7795626 of 7795578 rows when repairing './1311241909_mysite/myarticles'
    InnoDB: The log sequence number in ibdata files does not match
    InnoDB: the log sequence number in the ib_logfiles!
    110428 13:58:04  InnoDB: Database was not shut down normally!
    InnoDB: Starting crash recovery.
    InnoDB: Reading tablespace information from the .ibd files...
    InnoDB: Restoring possible half-written data pages from the doublewrite
    InnoDB: buffer...
    110428 13:58:06  InnoDB: Started; log sequence number 0 70204237
    110428 13:58:06 [Note] MySQL: ready for connections.
    Version: '5.0.91-community-nt'  socket: ''  port: 3306  MySQL Community Edition (GPL)
    110428 13:58:16 [ERROR] MySQL: Incorrect key file for table '.\1311241909_mysite\uslocale.MYI'; try to repair it
    110428 13:58:16 - mysqld got exception 0xc0000005 ;
    This could be because you hit a bug. It is also possible that this binary
    or one of the libraries it was linked against is corrupt, improperly built,
    or misconfigured. This error can also be caused by malfunctioning hardware.
    We will try our best to scrape up some info that will hopefully help diagnose
    the problem, but since we have already crashed, something is definitely wrong
    and this may fail.
      

  6.   

    MyISAM没有事务,在大并发下是会出现坏表。并发越大,越容易坏。
    这个应该是没有办法解决的。从架构上就有这个缺点
    建议你用innodb.
      

  7.   

    恩,服务器重启的原因找到更关键
    MYSQL容易坏表,不过修复也没有MSSQL难呵呵
      

  8.   

    innodb不支持fulltext,教程上是这么说的,真的吗?
      

  9.   

    MYISAM表是索引容易损坏,所有有些人为了稳定性改用INNODB了。
    但是INNODB下不支持全文搜索,不支持空间字段类型。
      

  10.   

    楼上2位,坏表主要是因为同一时间内并发写入数据库造成的呢?还是读取数据库也会造成坏表。
    另外如果使用第三方,类似sphinx,是不是会减少表的压力?再次感谢。
      

  11.   

    win和linux的任务计划99.9%相同,都很简单。
    你只需要把下列命令写入bat,然后每天半夜,任务计划 执行即可。
    -----------
    a.bat
    mysqlcheck.exe  -uroot -a  -o -A  --auto-repair 
    -----------
    上面的命令会自动优化修复表,当然,最初几天最好手动执行a.bat,没有问题后最好修改下bat,写入log。
    win下ntfs上的表(文件)坏了,很容易恢复,linux就难了。
     
      

  12.   

    @aleng18, linux的表很难修复吗?
    有谁用过sphinx吗?貌似只能作‘读’的搜索,不能‘写’…… 会不会减少坏表率?
      

  13.   

    win下ntfs上的表(文件)坏了,很容易恢复,linux就难了。-----我把这句重写一下啊:
    表为a。
    则表文件为a。myd  a。frm a。myi 或ibdata
    ntfs恢复多个文件比ext3恢复文件强很多。一个raw的ntfs分区,逻辑问题,ntfs根目录中的,ntfs日志等全坏了,用软件我亲自修复了100%,中文和目录全正常。貌似根目录中的文件会全坏。
      

  14.   


    哇~哇~ 那么危险,看样子WIN系统贵,也有贵的好处。LINUX只能勤做备份了。