Eu encontrei este artigo que parece abordar a questão muito bem
postado por Ximena Cardinali
O conto começa a deletar relatórios em pequenos lotes e depois recupera o espaço do MySQL
Como limpar os relatórios de marionetes e o banco de dados
Se o banco de dados do Puppet Dashboard estiver usando vários GB e aumentando a cada dia, essa é uma maneira de recuperar parte do espaço.
Existem dois trabalhos de rake que você deve executar todos os dias como parte da manutenção diária do Puppet Dashboard.
cd /usr/share/puppet-dashboard
env RAILS_ENV=production rake reports:prune upto=5 unit=day
env RAILS_ENV=production rake reports:prune:orphaned
Você pode alterar o RAILS_ENV e o número do dia (dia), semanas (semanas), meses (mês), etc. para corresponder ao seu sistema e às suas necessidades.
-
Parar os relatórios recebidos:
cd / path / to / puppet-dashboard
env RAILS_ENV = roteiro de produção / delayed_job -p dashboard -m stop
-
Inicie a exclusão de relatórios em pequenos lotes
Continue trabalhando até o tempo que você deseja manter relatórios. A razão para isso é que as tabelas Innodb têm um desempenho ruim ao excluir mais de 10 mil linhas por vez. Se você tentar excluir algumas centenas de milhares de linhas, o tempo limite será esgotado e você terá que dividi-las em exclusões menores de qualquer forma. Também o processo de rake do Ruby provavelmente usará toda a sua RAM e provavelmente será morto pelo kernel antes de terminar. Algo como essa progressão deve funcionar para a maioria das pessoas, mas se você tiver muitos meses de dados, talvez queira começar com um mês ou dois de seus primeiros registros. No nosso caso, estamos mantendo apenas 2 semanas de relatórios (14 dias).
env RAILS_ENV=production rake reports:prune upto=6 unit=mon
env RAILS_ENV=production rake reports:prune upto=4 unit=mon
env RAILS_ENV=production rake reports:prune upto=2 unit=mon
env RAILS_ENV=production rake reports:prune upto=3 unit=wk
env RAILS_ENV=production rake reports:prune upto=1 unit=wk
env RAILS_ENV=production rake reports:prune upto=5 unit=day
- Determine o melhor método para recuperar espaço do MySQL
Existem dois métodos para recuperar espaço, dependendo de como o MySQL foi configurado. Execute este comando para determinar se "innodb_file_per_table" está ativado. Deve ser definido como "ON" se for. NOTA: Eu recomendo usar o innodb no seu MySQL para casos como este.
mysqladmin variables -u root -p | grep innodb_file_per_table
Você também pode fazer uma listagem do banco de dados para ver se há arquivos de dados maiores. A tabela com maior probabilidade de ser grande é resource_statuses.ibd.
ls -lah /var/lib/mysql/dashboard_production
...
-rw-rw---- 1 mysql mysql 8.9K Jan 08 12:50 resource_statuses.frm
-rw-rw---- 1 mysql mysql 15G Jan 08 12:50 resource_statuses.ibd
...
- Recuperando espaço da maneira mais fácil
Se o MySQL foi configurado com innodb_file_per_table e seu Dashoard DB mostrar que seus dados estão em arquivos de tabelas grandes, faça o seguinte:
mysql -u root -p
use puppet_dashboard;
OPTIMIZE TABLE resource_statuses;
Isso criará uma nova tabela com base nos dados atuais e a copiará no lugar. Se você fizer uma listagem enquanto estiver em andamento, verá algo assim:
-rw-rw---- 1 mysql mysql 8.9K Jan 08 12:50 resource_statuses.frm
-rw-rw---- 1 mysql mysql 15G Jan 08 12:50 resource_statuses.ibd
-rw-rw---- 1 mysql mysql 8.9K Jan 08 12:50 #sql-379_415.frm
-rw-rw---- 1 mysql mysql 238M Jan 08 12:51 #sql-379_415.ibd
E quando terminar, copiaremos o arquivo tmp no lugar. Neste caso, passamos de 15 GB para 708 MB.
-rw-rw---- 1 mysql mysql 8.9K Jan 08 13:01 resource_statuses.frm
-rw-rw---- 1 mysql mysql 708M Jan 08 13:03 resource_statuses.ibd
- Recuperando espaço da maneira mais difícil
Se o seu sistema não foi configurado com innodb_file_per_table ou todos os dados atuais residem em um grande arquivo ibdata, a única maneira de recuperar espaço é limpar toda a instalação e reimportar todos os dados. O método geral deve ser algo como: Primeiro configure innodb_file_per_table, despeje todos os bancos de dados, então pare o Mysql, delete / var / lib / mysql, execute mysql_install_db para criar / var / lib / mysql novamente, inicie o MySQL e finalmente reimporte os dados. Não haverá necessidade de otimizar as etapas devido à importação de dados.
-
Finalmente, reinicie o delayed_job:
cd / path / to / puppet-dashboard
env RAILS_ENV = script de produção / delayed_job -p dashboard -n 2 -m start
-
Limpeza de relatórios diários e manutenção de banco de dados:
Para uma limpeza diária de relatórios, você pode criar um script BASH simples que pesquise os relatórios em / var / lib / puppet / reports por hora (mtime +14 no nosso caso), remova-os e limpe o banco de dados com (upto = 2 unidades = semana) e coloque-o no seu crontab. Um exemplo do script pode ser:
#!/bin/bash
REPORTS='find /var/lib/puppet/reports -type f -mtime +14'
for i in $REPORTS; do rm -f $i; done
cd /usr/share/puppet-dashboardenv RAILS_ENV=production rake reports:prune upto=2 unit=wk