Nagios: monitorar o estouro do auto_increment do mysql

2

Recentemente, tivemos um estouro em uma coluna auto_increment em uma tabela mysql. Agora eu gostaria de monitorar nossos bancos de dados com nagios, para que possamos ser alertados sempre que uma coluna auto_increment chegar ao seu valor máximo.

Já existe um cheque para isso? Se sim, onde posso encontrá-lo? Se não, alguma boa dica sobre como escrever um?

(Encontrei apenas um pequeno número de resultados úteis do Google, e os que usaram uma extensão do Percona; infelizmente, estamos limitados ao mysql "puro" aqui).

    
por moritz 14.03.2014 / 14:04

2 respostas

2

SUGESTÃO # 1

Eu tenho uma sugestão se você estiver disposto a sujar as mãos um pouco e as mesas forem razoavelmente pequenas o suficiente.

Você deve converter todas as tabelas com auto_increment de INT para BIGINT. Isso deve suprimir os problemas de estouro de incremento automático durante nossa vida útil. Isso resultará em tabelas maiores (1 byte extra por linha).

SUGESTÃO # 2

Se você ainda preferir monitorar todas as tabelas com o incremento automático, veja a abordagem de um homem pobre:

Comece executando esta consulta

SELECT table_schema,table_name,auto_increment FROM information_schema.tables
WHERE auto_increment IS NOT NULL;

Isso lhe dará todas as tabelas que tiverem auto_increment definido na tabela e o próximo valor que será usado. Se você quiser ver quantos valores restam, você pode calculá-lo.

Por exemplo, se todos os auto_increments forem definidos como INT , o valor máximo assinado será 2147483647 . Você poderia executar essa consulta

SELECT table_schema,table_name,auto_increment
(2147483647 - auto_increment) values_left
FROM information_schema.tables
WHERE auto_increment IS NOT NULL;

O values_left é o que você pode monitorar. Se você quer ser avisado das tabelas que possuem menos de um milhão de valores, você pode executar isto:

SELECT * FROM
(SELECT table_schema,table_name,auto_increment
(2147483647 - auto_increment) values_left
FROM information_schema.tables
WHERE auto_increment IS NOT NULL) A
WHERE values_left < 1000000;

Se você conseguir criar plug-ins do Nagios ou se quiser criar um cronjob que chame as tabelas que deseja monitorar, use esta última consulta como sua base.

Experimente!

    
por 14.03.2014 / 15:34
0

Inspirado na resposta de RonaldMySQLDBA Eu já escrevi o link

    
por 18.03.2014 / 14:57

Tags