Como posso forçar uma tabela MySQL a ser corrompida?

17

Eu escrevi um simples plugin Nagios que chama mysqlcheck (que verifica tabelas corrompidas) e dará um aviso se algum estiver corrompido.

No entanto, nenhuma das minhas tabelas está corrompida agora. Portanto, não tenho 100% de certeza de que meu plug-in está funcionando bem. Eu tenho um servidor de desenvolvimento que não é essencial. Como posso forçar uma (ou qualquer) das tabelas a ser corrompida para que eu possa testar o meu alerta de nagios?

Para o registro, o servidor é o Ubuntu Dapper e o mysql é a versão 5.0

    
por Rory 12.08.2009 / 17:44

7 respostas

1

Geralmente você não pode fazer o backup dos bancos de dados copiando-os do / var / lib / mysql e então copiando-os de volta porque eles são corrompidos, você tem que usar o mysqldump.

Então, se você entrar em uma das pastas para o banco de dados em / var / lib / mysql, ou seja, / var / lib / mysql / myDB / e mexer com alguns dos arquivos que devem fazê-lo: -)

Por isso, recomendo copiar um dos arquivos, editando um pouco com um editor hexadecimal e copiando-o de volta.

    
por 12.08.2009 / 17:57
8
cat DB1.myd /dev/random > DB2.myd
    
por 12.08.2009 / 18:39
3

Você pode usar uma ferramenta de fuzzing como zzuf para peneirar um arquivo de banco de dados preexistente, por exemplo

zzuf < good.myd > fuzzed.myd
    
por 12.08.2009 / 21:32
3

Isso deve ser feito:

cat /dev/urandom > yourdb.myd
    
por 12.08.2009 / 19:36
2

Eu sugeriria que uma maneira mais realista de simular falhas seria puxar o tapete de debaixo dos pés do MySQL enquanto ele está executando uma atualização intensiva. Emitir SIGKILL para o processo mysqld deve ser suficiente. As chances são de que quando você reiniciar o MySQL, a (s) tabela (s) em questão serão marcadas como falhas.

Como alternativa, sugiro aplicar as sugestões de outras pessoas, mas ao arquivo .MYI indec, em vez do arquivo de dados.

    
por 12.08.2009 / 22:46
2

exemplo:

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
    
por 17.03.2010 / 11:25
1

talvez uma execução de comando que faça algo como o seguinte:

echo "aaa" > file.myd
    
por 12.08.2009 / 17:46