如何强制MySQL表损坏?


17

我编写了一个简单的Nagios插件,该插件调用mysqlcheck(用于检查损坏的表),如果有损坏,则会发出警告。

但是我的表现在都没有损坏。所以我不是100%肯定我的插件能正常工作。我有一个开发服务器,它并不缺少关键。如何强制其中一个(或任何一个)表损坏,以便测试我的nagios警报?

作为记录,服务器是Ubuntu Dapper,而mysql是版本5.0


有趣.......
桑德·维尔斯卢伊斯

3
假设它们是MyISAM表,我想您可以打开一个窗口。轻风应该足以使那些无酸的桌子崩溃,翻倒并着火;)
大卫,2009年

Answers:


1

通常,您无法备份数据库,方法是从/ var / lib / mysql复制它们,然后又将它们复制回去,因为它们已损坏,您必须改用mysqldump。

因此,如果您进入/ var / lib / mysql中数据库的文件夹之一,即/ var / lib / mysql / myDB /并弄乱了一些应该这样做的文件:-)

因此,我建议复制一个文件,用十六进制编辑器进行一些编辑,然后再复制回去。





2

我建议,一种更现实的模拟故障的方法是在执行密集更新时从MySQL的脚下拉出地毯。向SIGKILL发行mysqld过程应该足够了。可能是,当您重新启动MySQL时,有问题的表将被标记为崩溃。

另外,我建议将其他人的建议应用于.MYI索引文件而不是数据文件。


2

例:

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

1

也许执行以下命令的命令执行:

echo "aaa" > file.myd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.