Gostaria de armazenar o tamanho do banco de dados para um determinado banco de dados diariamente em uma tabela que ajudaria a entender o crescimento do banco de dados durante um período de tempo.
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MB)" FROM information_schema.TABLES where table_schema = 'testdb' GROUP BY table_schema;
Obtenho a saída para a consulta acima, digamos 10456.3.
Eu preciso inserir esse número em uma tabela que deve conter três colunas. Nome do banco de dados, data e tamanho do banco de dados.
Como posso fazer isso diariamente automatizando isso?
Se você estiver armazenando-o no mesmo banco de dados que está medindo, poderá usar um MySQL Scheduled Event para executar a consulta em um determinado momento.
sendo um exemplo:
Se for um banco de dados diferente, você precisará usar algum tipo de script de shell.
Tendo em mente que estou longe de ser um especialista em Linux (e ignorando as discussões sobre
permissions
,passwords in scripts
,SSL
etc etc), você pode fazer algo como:Que
should
obtêm o valor do tamanho do banco de dados remoto e o carregam em uma tabela no banco de dados local.Acabei de usar:
para testar isso, mas você provavelmente gostaria de um tipo de dados
decimal
,integer
,float
dependendo dos dados que você retorna e da precisão necessária.Além disso, isso não inclui os campos
dbname
ou .time
Você poderia usartimeVal TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
o que lhe daria o campo timestamp.O nome do banco de dados é complicado, pois você precisaria transportar duas variáveis, e meu script (acima) permite apenas um (se você estiver olhando apenas para um banco de dados, basta digitá-lo diretamente na consulta / definir um valor padrão) .