Fazendo um backup de banco de dados agendado pelo cron (despejo) sem expor a senha em / etc / crontab

3

Eu uso o seguinte código /etc/crontab para criar backups diários do meu banco de dados no limite dos últimos 30 dias:

0 8 * * * mysqldump -u root -PASSWORD --all-databases > /root/backups/mysql/db.sql
1 8 * * * zip /root/backups/mysql/db-$(date +\%F-\%T-).sql.zip /root/backups/mysql/db.sql
2 8 * * * rm /root/backups/mysql/db.sql
2 8 * * * find /root/backups/mysql/* -mtime +30 -exec rm {} \;

Meu problema:

Devo colocar minha senha onde -PASSWORD . Desta forma, minha senha é exposta se por engano eu entrei para alterar algo neste arquivo e alguém próximo a mim viu.

É possível usar o script sem colocar a senha lá? Alternativamente, você conhece uma sintaxe similar que não me forçará a escrever a senha lá para um cronjob?

    
por JohnDoea 08.05.2017 / 08:50

1 resposta

2
  1. Crie um script para fazer o despejo, backup e limpeza completos.

  2. Agende o script.

Além disso, a senha para mysql também pode ser armazenada em um arquivo protegido e não precisa ser fornecida na linha de comando.

O MySQL tem as " Diretrizes para usuários finais de segurança por senha "documento que você pode querer consultar.

Para resumir esse documento:

Crie .my.cnf em seu diretório pessoal e adicione a senha a ele assim:

[client]
password=your_pass

Em seguida, remova as permissões de leitura no arquivo para outros usuários:

$ chmod 600 .my.cnf

ou, equivalentemente,

$ chmod u=rw,go-rwx .my.cnf

Este arquivo, se for nomeado .my.cnf e colocado em seu diretório pessoal, será automaticamente usado pelo programa mysql client (assim como por mysqldump ).

Ainda assim, coloque o backup etc. em seu próprio script e programe-o. Isso será muito mais fácil de manter do que um número de tarefas agendadas.

    
por 08.05.2017 / 09:13