Назад | Перейти на главную страницу

Как я могу заставить таблицу MySQL быть поврежденной?

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

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

Для записи сервер - это Ubuntu Dapper, а mysql - версия 5.0.

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

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

cat /dev/urandom > yourdb.myd

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

zzuf < good.myd > fuzzed.myd

Я бы предположил, что более реалистичным способом имитации неисправности было бы вытащить коврик из-под ног MySQL, пока он выполняет интенсивное обновление. Выдача SIGKILL на mysqld процесса должно быть достаточно. Скорее всего, когда вы перезапустите MySQL, рассматриваемые таблицы будут помечены как сбойные.

В качестве альтернативы я бы предложил применять предложения других людей, но к .MYI файл indec, а не файл данных.

пример:

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

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

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

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

возможно выполнение команды, которая делает что-то вроде следующего:

echo "aaa" > file.myd