我的问题是我在Cronjob中为InnoDB表运行mysqlcheck
,如果每次收到包含数千条这些消息的电子邮件,我都会轻易忽略可能的错误消息。
--silent
也无济于事。
我最好的尝试到现在为止
| grep -v "note :"
但我担心我可以剥夺更重要的“笔记”......
但即便如此,mysqlcheck
列出了数据库中的每个表,这些表已经是一个非常长的列表,仍然隐藏了可能的错误消息。
我无法找到有关mysqlcheck
退出代码的任何相关信息,例如,如果确实有问题,只需发送电子邮件。
所以问题是:
“如何运行mysqlcheck
并获得 RELEVANT 输出”?
答案 0 :(得分:1)
简单的答案是:不要在InnoDB上使用mysqlcheck。并且只使用InnoDB。
错误消息来自OPTIMIZE TABLE
,这对InnoDB来说几乎无用。 (它有一些用于MyISAM。)InnoDB擅长保持其表格的正常形状。也就是说,99.9%的时间OPTIMIZE
是浪费时间。
<强>附加物强>
当然,InnoDB变得支离破碎。任何BTree都会碎片化。 (这包括MyISAM索引,这是由BTree组织的。)BTrees,即使经过大量修改,往往会从0%碎片化到31%“免费”空间的平均,然后留在那里。当然,你可以进行碎片整理以取消它,但是进一步的活动会很快失去它。这不值得努力和停工。
31%不会转化为可忽略不计的减速。是的,它是一块磁盘空间,但是优化需要100%来完成它的任务,因为它复制了表。所以,你显然有足够的磁盘空间。