Eu gerencio um banco de dados onde milhares de GBs de dados de log inúteis são criados diariamente.
Não consigo consertar o software que está executando todo esse registro (desnecessário). Existe uma maneira de bloquear (ou desabilitar gravações) esta tabela de log para que ela nunca seja gravada, mas ao mesmo tempo relatará a gravação como bem-sucedida para que não cause problemas com o software?
Eu sei que posso apenas truncar as tabelas com um cronjob, mas gostaria de saber se existe uma abordagem melhor?
MySQL , e amigos, ou seja, MariaDB e Percona , têm um mecanismo de armazenamento bastante incomum chamado mecanismo Black Hole - pode ajudar com sua solicitação específica (veja o violino aqui ).
Por exemplo, se você fizer isso:
O mecanismo padrão é de
InnoDB
qualquer maneira, mas estou apenas sendo explícito por uma questão de clareza aqui.Em seguida, inserimos alguns registros:
Não há problemas lá! Então, para verificarmos:
Tudo é rosa no jardim!
Agora vem a parte interessante!
OK. Continuamos alegremente
INSERT
enviando dados da seguinte forma:Mais uma vez, tudo está bem e elegante. O banco de dados está feliz, nós estamos felizes e, o mais importante, o software de terceiros está feliz e ignorante de qualquer mudança no ambiente!
MAS!!! Agora, quando fazemos isso:
Nada! Zilch! Rien! Nada...
Nossos dados encontraram o horizonte de eventos do Buraco Negro do qual nada pode escapar! Você pode inserir quantos dados quiser - é como enviar um arquivo para
/dev/null
*nix!Você perguntou:
e agora você tem (veja acima) comportamento externamente normal no
INSERT
:Então, somos ouro! Para todos os efeitos, os dados enviados ao servidor estão sendo armazenados fielmente, exceto que não é!
Para o software que escreve esses logs, parece que tudo está ótimo, mas nada é escrito - é realmente muito bacana.
Parece que foi feito para sua necessidade. No MariaDB, você precisa carregar um plugin conforme explicado aqui , mas parece bem simples. A partir daqui :
Apenas uma palavra de advertência! Não sei qual é o seu software que está gravando todos esses dados de log no servidor, mas alguém, em algum lugar, achou que valia a pena salvar. Apenas certifique-se de não jogar o bebê fora com a água do banho!
Além disso, se você tiver um contrato de suporte para esse software irritante, talvez queira verificar se está potencialmente invalidando esse contato ao fazer isso?
Como nota final, se você tentar algo assim na mesa do Black Hole:
Resultado:
Portanto, mesmo os erros são autênticos, e seu software se comportará conforme o esperado se houver um erro e continuará (todas as aparências externas) funcionando normalmente se algo assim acontecer.
Você notará que o violino é para MySQL 8 e não MariaDB. Com MariaDB (neste violino ), recebo um erro de permissão negada se tentar executar
recebo mensagem:
Isso é esperado - a partir do link MariaDB:
As tentativas de alterar o tipo de mecanismo e instalar o plug-in falharam (dificilmente surpreendente em um servidor público).
dá: