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


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.


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

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

3

Isso deve servir:

cat /dev/urandom > yourdb.myd

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.


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

1

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

echo "aaa" > file.myd
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.