MySQLテーブルを強制的に破損させるにはどうすればよいですか?


17

mysqlcheck(破損したテーブルをチェックする)を呼び出し、破損している場合は警告を出す単純なNagiosプラグインを作成しました。

ただし、現在、私のテーブルは破損していません。したがって、プラグインが正常に動作していることを100%確信することはできません。ミスオンクリティカルではない開発サーバーがあります。nagiosアラートをテストできるように、テーブルの1つ(またはいずれか)を強制的に破損させるにはどうすればよいですか?

記録の場合、サーバーはUbuntu Dapperで、mysqlはバージョン5.0です


興味深い.......
サンダーヴェルスルイ09

3
それらがMyISAMテーブルであると仮定すると、ウィンドウを開くことができると思います。ACIDのないテーブルがクラッシュしたり、転倒したり、火災が発生したりするには、わずかな微風で十分なはずです;)
デイヴィッド

回答:


1

通常、データベースを/ var / lib / mysqlからコピーしてバックアップすることはできません。データベースが破損しているため、それらをコピーして戻すには、代わりにmysqldumpを使用する必要があります。

したがって、/ var / lib / mysql内のデータベースのフォルダーの1つ、つまり/ var / lib / mysql / myDB /に移動して、それを実行する必要があるファイルの一部を混乱させると、:-)

そのため、ファイルの1つをコピーし、16進エディターで少し編集してからコピーして戻すことをお勧めします。


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

私はこれが好きです!
カイルブラント

1
ハードディスクがいっぱいになるまで/ dev / randomからデータをプルし続けませんか?:P
ロリー

2
ねえ、あなたは腐敗したと言いましたよね?;-)
マットシモンズ

ローリー、Ya、しかしある時点でCtrl-Cを押す
カイルブラント

ロリー、またはヘッド/ dev / urandomをファイルに使用し、それらをcatする
Kyle Brandt



2

障害をシミュレートするより現実的な方法は、集中的な更新を実行している間に、MySQLの足元からラグを引き出すことです。mysqldプロセスにSIGKILLを発行するだけで十分です。MySQLを再起動すると、問題のテーブルがクラッシュしたとマークされる可能性があります。

または、他の人の提案を.MYIデータファイルではなくindecファイルに適用することをお勧めします。


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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.