Как заставить таблицу 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, для файла и затем следи за ними
Кайл Брандт



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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.