mysqlcheck (破損したテーブルをチェックする)を呼び出す単純な Nagios プラグインを作成し、破損している場合は警告を表示します。
しかし、私のテーブルはどれも壊れていません。だから私は私のプラグインがうまく機能していることを100%確信していません。ミッションクリティカルではない開発サーバーがあります。 nagiosアラートをテストできるように、テーブルの1つ(またはいずれか)を強制的に破損させるにはどうすればよいですか?
記録のために、サーバーはUbuntu Dapperであり、mysqlはバージョン5.0です
一般に、/ var/lib/mysqlからデータベースをコピーしてデータベースをバックアップすることはできません。破損するため、データベースをコピーします。代わりにmysqldumpを使用する必要があります。
したがって、/ var/lib/mysqlにあるデータベース用のフォルダーの1つに移動した場合(つまり、/ var/lib/mysql/myDB /)、それを実行するはずのいくつかのファイルを混乱させます:-)
そのため、ファイルの1つをコピーし、16進エディターで少し編集して、コピーして戻すことをお勧めします。
cat DB1.myd /dev/random > DB2.myd
これはそれを行うはずです:
cat /dev/urandom > yourdb.myd
zzuf のようなファジングツールを使用して、既存のデータベースファイルをファジングできます。
zzuf < good.myd > fuzzed.myd
例:
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
障害をシミュレートするためのより現実的な方法は、集中的な更新を実行しているときに、MySQLの足元から敷物を引き抜くことです。 mysqld
プロセスにSIGKILLを発行するだけで十分です。 MySQLを再起動すると、問題のテーブルがクラッシュしたとマークされる可能性があります。
または、他の人の提案を適用することをお勧めしますが、データファイルではなく.MYI
indecファイルに適用します。
おそらく、次のようなコマンド実行。
echo "aaa" > file.myd