想在linux实现这个功能,用vixie-cron调度一个job,job的内容就是先用mysqlchk检查指定数据库[code=BatchFile]mysqlcheck --auto-repair --optimize --user=MyLogin --password=MyPassword --databases MyDatabase[/code]然后对于出错的表进行及时的fix[code=BatchFile]myisamchk --recover /usr/mysql/MyDatabase/MyTable[/code]不知道各位有啥思路

解决方案 »

  1.   

    o  --auto-repair          If a checked table is corrupted, automatically fix it. Any necessary
              repairs are done after all tables have been checked.这个参数对于myisam的表来说,会不会自动调用 myisamchk --recover /usr/mysql/MyDatabase/MyTable 呢?
      

  2.   

    一般要求定时做MyISAM表的检查及修复。你可以加上 --force 做为自动修恢的选项。参考一下官方文档中的做法。http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#maintenance-schedule5.9.6. 建立表维护计划
    定期对表进行检查而非等到问题出现后再检查数据库表是一个好主意。检查和修复MyISAM表的一个方式是使用CHECK TABLE和REPAIR TABLE语句。参见13.5.2.3节,“CHECK TABLE语法”和13.5.2.6节,“REPAIR TABLE语法”。检查表的另一个方法是使用myisamchk。为维护目的,可以使用myisamchk -s检查表。-s选项(简称--silent)使myisamchk以沉默模式运行,只有当错误出现时才打印消息。
      

  3.   

    在问一个问题运行mysqlchk/myisamchk时有warningWarning: option 'key_buffer_size': unsigned value 18446744073709551615 adjusted to 4294963200
    Warning: option 'read_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295
    Warning: option 'write_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295
    Warning: option 'sort_buffer_size': unsigned value 18446744073709551615 adjusted to 4294967295
      

  4.   

    不用管这些信息,因为你运行的时候没有说明这些参数,所以chk程序先以默认值来处理了,但你的系统不可能支持这么大的buffer,所以check就根据实现情况做出了调整。帮助文档中有关于这几个参数的说明。
      

  5.   

    /usr/bin/myisamchk -r --sort-index -O sort_buffer_size=16M /usr/mysql/MyDatabase/*.MYI这样是指定了sort_buffer_size的值么?但是还是报告相同的警告。
      

  6.   

    mysqlcheck --auto-repair --optimize --user=MyLogin --password=MyPassword --databases MyDatabase已经足够了,结贴!