Jak zmusić tabelę MySQL do uszkodzenia?


17

Napisałem prostą wtyczkę Nagios, która wywołuje mysqlcheck (która sprawdza uszkodzone tabele) i ostrzega, jeśli są uszkodzone.

Jednak żadna z moich tabel nie jest teraz uszkodzona. Nie jestem więc w 100% pewien, że moja wtyczka działa dobrze. Mam serwer deweloperów, który nie jest krytyczny dla misson. Jak zmusić jedną (lub dowolną) ze znajdujących się tam tabel do uszkodzenia, aby móc przetestować alert nagios?

Dla przypomnienia, serwerem jest Ubuntu Dapper, a mysql to wersja 5.0


ciekawe .......
Sander Versluys

3
Zakładając, że są to stoły MyISAM. Wyobrażam sobie, że możesz po prostu otworzyć okno. Nieznaczne breaze powinno wystarczyć, aby spowodować te wolnego kwasu tabele upaść, przewrócić i zapalić;)
David

Odpowiedzi:


1

Zasadniczo nie można wykonać kopii zapasowej baz danych, kopiując je z / var / lib / mysql, a następnie kopiując je z powrotem, ponieważ uległy uszkodzeniu, zamiast tego należy użyć mysqldump.

Więc jeśli przejdziesz do jednego z folderów bazy danych w / var / lib / mysql, tj. / Var / lib / mysql / myDB / i zadzierasz z niektórymi plikami, które powinny to zrobić :-)

Polecam więc skopiowanie jednego z plików, edycję trochę przy pomocy edytora szesnastkowego i skopiowanie go z powrotem.


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

Podoba mi się ten!
Kyle Brandt,

1
Czy to nie ciągnie danych z / dev / random, dopóki mój dysk twardy się nie zapełni? : P
Rory,

2
Hej, powiedziałeś zepsuty, prawda? ;-)
Matt Simmons,

Rory, Ya, ale w pewnym momencie po prostu nacisnąłem Ctrl-C
Kyle Brandt,

Rory, Lub użyj head / dev / urandom do pliku, a następnie cat tych
Kyle Brandt



2

Sugerowałbym, że bardziej realistycznym sposobem symulowania błędu byłoby wyciągnięcie dywanu spod stóp MySQL podczas intensywnej aktualizacji. Wydanie SIGKILL do mysqldprocesu powinno wystarczyć. Możliwe, że po ponownym uruchomieniu MySQL dane tabele zostaną oznaczone jako zawieszone.

Alternatywnie sugerowałbym zastosowanie sugestii innych osób, ale do .MYIpliku indec zamiast do pliku danych.


2

przykład:

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

być może wykonanie polecenia, które robi coś takiego:

echo "aaa" > file.myd
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.