Как заставить таблицу MySQL испортиться?

17

Я написал простой плагин Nagios, который вызывает mysqlcheck (который проверяет поврежденные таблицы) и выдаст предупреждение, если таковые имеются.

Однако ни одна из моих таблиц сейчас не повреждена. Так что я не уверен на 100%, что мой плагин работает нормально. У меня есть dev-сервер, который не критичен по мисс. Как я могу заставить одну (или любую) из таблиц там быть поврежденными, чтобы я мог проверить свое предупреждение nagios?

Для записи сервер Ubuntu Dapper и MySQL версии 5.0

Рори
источник
интересно .......
Сандер Верслуйс
3
Предполагая, что это таблицы MyISAM, я могу представить, что вы можете просто открыть окно. Легкого срыва должно быть достаточно, чтобы эти таблицы, не содержащие ACID, вылетали, опрокидывались и загорались;)
David

Ответы:

1

Как правило, вы не можете создавать резервные копии баз данных, копируя их из / var / lib / mysql, а затем копируя их обратно, потому что они повреждены, вместо этого вы должны использовать mysqldump.

Поэтому, если вы войдете в одну из папок для базы данных в / var / lib / mysql, т.е. / var / lib / mysql / myDB /, и возитесь с некоторыми файлами, которые должны это сделать :-)

Поэтому я бы порекомендовал скопировать один из файлов, немного отредактировать с помощью шестнадцатеричного редактора и скопировать его обратно.

Кайл Брандт
источник
8
cat DB1.myd /dev/random > DB2.myd
Мэтт Симмонс
источник
Мне нравится этот!
Кайл Брандт
1
Разве это не продолжит извлекать данные из / dev / random, пока мой жесткий диск не заполнится? : P
Рори
2
Эй, ты сказал коррумпированный, верно? ;-)
Мэтт Симмонс
Рори, да, но в какой-то момент просто нажал Ctrl-C
Кайл Брандт
Рори, или используй head / dev / urandom, для файла и затем следи за ними
Кайл Брандт
3

Вы можете использовать инструмент фаззинга, такой как zzuf, для фаззинга уже существующего файла базы данных, например

zzuf < good.myd > fuzzed.myd
Джеральд Комбс
источник
3

Это должно сделать это:

cat /dev/urandom > yourdb.myd
Беркус Аврелий
источник
Это будет продолжаться, пока мой жесткий диск не заполнится.
Рори
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
Марк Л
источник