Я написал простой 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