Bagaimana saya bisa memaksa tabel MySQL menjadi rusak?

17

Saya telah menulis plugin Nagios sederhana yang memanggil mysqlcheck (yang memeriksa tabel yang rusak) dan akan memberikan peringatan jika ada yang rusak.

Namun tidak ada meja saya yang rusak sekarang. Jadi saya tidak 100% yakin bahwa plugin saya berfungsi dengan baik. Saya memiliki server dev yang tidak kritis misson. Bagaimana saya bisa memaksa satu (atau yang lain) dari tabel di sana menjadi rusak sehingga saya bisa menguji nagios saya?

Sebagai catatan server adalah Ubuntu Dapper dan mysql adalah versi 5.0

Rory
sumber
menarik .......
Sander Versluys
3
Dengan asumsi itu adalah tabel MyISAM, saya bayangkan Anda bisa membuka jendela. Sedikit terobosan harus cukup untuk menyebabkan tabel bebas ASAM itu jatuh, terbalik dan terbakar;)
David

Jawaban:

1

Secara umum Anda tidak dapat membuat cadangan database dengan menyalinnya dari / var / lib / mysql dan kemudian menyalinnya kembali karena mereka rusak, Anda harus menggunakan mysqldump sebagai gantinya.

Jadi jika Anda masuk ke salah satu folder untuk basis data di / var / lib / mysql, yaitu / var / lib / mysql / myDB / dan mengacaukan beberapa file yang harus melakukannya :-)

Jadi saya akan merekomendasikan menyalin salah satu file, mengedit sedikit dengan hex editor, dan menyalinnya kembali.

Kyle Brandt
sumber
8
cat DB1.myd /dev/random > DB2.myd
Matt Simmons
sumber
Saya suka yang ini!
Kyle Brandt
1
Bukankah itu akan terus menarik data dari / dev / acak sampai harddisk saya terisi? : P
Rory
2
Hei, katamu korup, kan? ;-)
Matt Simmons
Rory, Ya, tetapi tekan saja Ctrl-C di beberapa titik
Kyle Brandt
Rory, Atau gunakan head / dev / urandom, ke file dan kemudian cat mereka
Kyle Brandt
3

Anda bisa menggunakan alat fuzzing seperti zzuf untuk fuzz file database yang sudah ada, misalnya

zzuf < good.myd > fuzzed.myd
Gerald Combs
sumber
3

Ini harus dilakukan:

cat /dev/urandom > yourdb.myd
Berkus Aurelius
sumber
Itu akan terus berjalan sampai harddisk saya terisi.
Rory
2

Saya menyarankan bahwa cara yang lebih realistis untuk mensimulasikan kesalahan adalah dengan menarik karpet dari bawah kaki MySQL ketika sedang melakukan pembaruan intensif. Penerbitan SIGKILL ke mysqldproses harus memadai. Kemungkinannya adalah ketika Anda me-restart MySQL, tabel yang bermasalah akan ditandai sebagai macet.

Atau saya sarankan menerapkan saran orang lain tetapi untuk .MYIfile indec daripada file data.

Dan Carley
sumber
2

contoh:

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
kuanta
sumber
1

mungkin eksekusi perintah yang melakukan sesuatu seperti berikut:

echo "aaa" > file.myd
Markus L
sumber