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

17

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

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

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

Rory
fonte
interessante .......
Sander Versluys 12/08/09
3
Supondo que sejam tabelas MyISAM, eu imaginaria que você pudesse abrir uma janela. Um ligeiro breaze deve ser suficiente para fazer com que esses ACID mesas livres para bater, tombar e pegar fogo;)
David

Respostas:

1

Geralmente, você não pode fazer backup dos bancos de dados copiando-os de / var / lib / mysql e copiando-os novamente porque eles estão corrompidos; você deve usar o mysqldump.

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

Então, eu recomendaria copiar um dos arquivos, editar um pouco com um editor hexadecimal e copiá-lo novamente.

Kyle Brandt
fonte
8
cat DB1.myd /dev/random > DB2.myd
Matt Simmons
fonte
Eu gosto deste!
Kyle Brandt
1
Isso não continuará puxando dados de / dev / random até que meu disco rígido fique cheio? : P
Rory
2
Ei, você disse corrupto, certo? ;-) #
Matt Simmons
Rory, Ya, mas é só apertar Ctrl-C em algum momento
Kyle Brandt
Rory ou o uso da cabeça / dev / urandom, para um arquivo e gato, em seguida, aqueles
Kyle Brandt
3

Você pode usar uma ferramenta de difusão como o zzuf para difundir um arquivo de banco de dados preexistente, por exemplo

zzuf < good.myd > fuzzed.myd
Gerald Combs
fonte
3

Isso deve servir:

cat /dev/urandom > yourdb.myd
Berkus Aurelius
fonte
Isso continuará até que meu disco rígido fique cheio.
Rory
2

Eu sugeriria que uma maneira mais realista de simular falhas seria puxar o tapete por baixo dos pés do MySQL enquanto ele realiza uma atualização intensiva. A emissão de SIGKILL para o mysqldprocesso deve ser suficiente. Provavelmente, quando você reiniciar o MySQL, as tabelas em questão serão marcadas como travadas.

Como alternativa, sugiro aplicar as sugestões de outras pessoas, mas ao .MYIarquivo indec, e não ao arquivo de dados.

Dan Carley
fonte
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
quanta
fonte
1

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

echo "aaa" > file.myd
Mark L
fonte