Як змусити таблицю MySQL зіпсуватися?


17

Я написав простий плагін Nagios, який викликає mysqlcheck (який перевіряє наявність пошкоджених таблиць) і дасть попередження, якщо такі є пошкодженими.

Однак жодна з моїх таблиць зараз не пошкоджена. Тому я не на 100% впевнений, що мій плагін працює нормально. У мене є сервер розробників, який не є критичним для міссона. Як я можу змусити пошкодити одну (або будь-яку) таблицю там, щоб я міг перевірити своє нагадування?

Для запису сервером є Ubuntu Dapper, а mysql - версія 5.0


цікаво .......
Sander Versluys

3
Якщо припустити, що це таблиці MyISAM, я думаю, ви могли б просто відкрити вікно. Легкого порушення повинно бути достатньо, щоб ті столи, що не містять кислоти, розбилися, перекинулися та загорілися;)
Девід

Відповіді:


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
Гей, ти сказав корумповано, правда? ;-)
Метт Сіммонс

Rory, Ya, але просто натисніть Ctrl-C в якийсь момент
Kyle Brandt

Rory, або використовуйте head / dev / urandom, щоб додати файл, а потім переспівіть їх
Kyle Brandt



2

Я б припустив, що більш реалістичним способом імітувати помилку було б витягнути килим з-під ніг MySQL під час інтенсивного оновлення. Надання SIGKILL mysqldпроцесу має бути достатнім. Цілком ймовірно, що при перезапуску MySQL відповідні таблиці (і) будуть позначені як збої.

Я також пропоную застосувати пропозиції інших людей, але до .MYIфайлу indec, а не до файлу даних.


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.