目前碰到个问题,断电后mysql表经常损坏,想做个自动修复的批处理。1 mysql的my.INI设置自动修复,根本不起作用。
2 myisamcheck 工具也只能对每个表做修复,不能批量,linux里面支持*.*文件,windows不行。只好写个循环,获得所有的表名,先check table,如果不是ok的,repair table。
但是发现存储过程里面根本没法得到 check table 的结果。有什么办法吗??现在只好在c代码里面循环获得check table的结果。

解决方案 »

  1.   

    mysqlcheck做个函数有返回值的
      

  2.   

    mysqlcheck 是自带的 exe,装mysql的时候我们只装了mysqld.exe,没其他的
      

  3.   

    你只能通过脚本程序获取到所有表名然后再逐一 check 了。没有什么好办法。你的 mysql/bin  中应该有很多MYSQL提供的工具。
      

  4.   

    windows 下的myisamcheck 能对文件进行批量更改啊myisamcheck -e 先check
    myisamcheck -r -q 再快速修复最重要的是看报什么错出现outmemory error 的话
    就要创建新的MYI文件$ myisamchk -e  "C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data\test\*.MYI"
    批量是没问题的
      

  5.   

    我们在部署的时候对mysql重新定制过,只使用myisam表类型,工具等其他没必要的都去掉了。
    嗯,看来只能把mysqlcheck加到定制包里面去。但是真的没办法在 存储过程中获取 check table 和show tables这样的命令的结果集吗????
      

  6.   

    如果是MYSQL5以上的话,你可以通过information_schema.`TABLES`得到所有表的名字,然后进行 check table xxx
    可以在存储过程中实现。
      

  7.   


    嗯,现在就是存储过程,用的information_schema遍历的表,但是关键问题是 check table xxx的结果集得不到,不知道表是好是坏。
      

  8.   

    试下把表名作为参数传进去存储过程,然后再存储过程里面执行check,看看存储过程是否能把这个check的结果作为结果集显示没有,如果显示的话,直接利用这个结果集就可以了。
      

  9.   


    check table 本身也返回结果集,在工具里面执行能显示结果集,程序用api也能获得这个结果集。
    但是我是想在 存储过程里面 获取check table 的结果集,在存储过程里面遍历该结果集,做逻辑。。
    有办法吗。
      

  10.   


    没有办法,如果你用的外部程序是可能访问这个结果集的,但MYSQL自身的存储过程中不行。
      

  11.   

    可能不行
    根据我的了解,mysql目前在存储过程中无法利用这个结果集的,所以考虑在程序外面循环表,每次把表名作为存储过程的参数传进来,然后获取存储过程的结果集来处理...