我如何强制MySQL表损坏?

我已经写了一个简单的Nagios插件,调用mysqlcheck (它检查损坏的表),并会发出警告,如果有任何损坏。

但是我的桌子现在没有腐败了。 所以我不是100%确定我的插件工作正常。 我有一个devon服务器,这不是misson关键。 我怎么能强迫一个(或任何)表格腐败,以便我可以testing我的nagios警报?

logging的服务器是Ubuntu的Dapper和MySQL是5.0版本

一般来说,您不能通过从/ var / lib / mysql复制数据库来备份数据库,然后将它们复制回来,因为它们已损坏,您必须改用mysqldump。

所以,如果你进入/ var / lib / mysql中的数据库文件夹之一,即/ var / lib / mysql / myDB /和一些应该做的文件混乱:-)

所以我build议复制其中一个文件,用hex编辑器编辑一下,然后将其复制回来。

cat DB1.myd /dev/random > DB2.myd 

你可以使用像zzuf这样的模糊工具来模糊一个已经存在的数据库文件,例如

 zzuf < good.myd > fuzzed.myd 

这应该做到这一点:

 cat /dev/urandom > yourdb.myd 

我build议一个更现实的方式来模拟错误将是在执行密集更新的时候从MySQL脚下拉出地毯。 发布SIGKILL到mysqld进程应该足够了。 有可能当你重新启动MySQL时,有问题的表将被标记为崩溃。

或者我会build议应用其他人的build议,但对.MYI indec文件,而不是数据文件。

例:

 mysql> repair table Transactions; ^CQuery aborted by Ctrl+C +-----------------------------------+--------+----------+-----------------------+ | Table | Op | Msg_type | Msg_text | +-----------------------------------+--------+----------+-----------------------+ | test.Transactions | repair | error | 137 when fixing table | | test.Transactions | repair | status | Operation failed | +-----------------------------------+--------+----------+-----------------------+ 2 rows in set (17.84 sec) mysql> select * from Transactions limit 1; ERROR 144 (HY000): Table './test/Transactions' is marked as crashed and last (automatic?) repair failed 

也许是一个执行如下所示的命令:

 echo "aaa" > file.myd