Para fazer o backup automático e de forma segura dos bancos de dados do seu servidor a melhor alternativa é colocar a senha em um arquivo de opções do mysql e a maneira mais fácil é utilizar o arquivo .my.cnf no home do seu usuário, ou seja ~/.my.cnf.
Não utilize a senha diretamente no comando ou no arquivo crontab pois esta poderá ser visualizada utilizando o comando ps ou no e-mail enviado automaticamente pelo cron.
Configurando a senha
Crie o arquivo .my.cnf.
$ Shell
vi ~/.my.cnf
Configure o host, o usuário e a senha para serem utilizados com o comando mysqldump.
~/.my.cnf
[mysqldump] host=localhost user=MeuUsuário password=MinhaSenha
Agora proteja o arquivo definindo a permissão como 600 ou 400 para que o acesso somente seja permitido ao seu usuário.
$ Shell
chmod 600 ~/.my.cnf
Proteja também o arquivo ~/.mysql_history da mesma forma, este arquivo é utilizado por padrão em sistemas Unix para armazenar um histórico de instruções mysql executadas e algumas destas instruções como CREATE USER e ALTER USER podem revelar a senha.
$ Shell
chmod 600 ~/.mysql_history
Testando
Execute o comando mysqldump sem os parâmetros para host, usuário e senha e confirme o funcionamento, no exemplo abaixo será feito o backup de todos os bancos de dados para um arquivo compactado com gzip no diretório da execução do comando.
$ Shell
mysqldump --all-databases | gzip -9 > todos_os_bancos_de_dados.sql.gz
Para mais opções do comando mysqldump leia este artigo.
Crontab
O agendamento do backup pode ser feito via cron, edite o arquivo crontab com o comando:
$ Shell
crontab -e
Para fazer o backup todos os dias ao meio dia e salvar o arquivo no diretório home do seu usuário acrescente a linha:
crontab
0 12 * * * mysqldump --all-databases | gzip -9 > ~/todos_os_bancos_de_dados.sql.gz
Para gerar backups com nomes diferentes todos os dias, não sobrescrevendo o backup do dia anterior, utilize a data no nome do arquivo.
crontab
0 12 * * * mysqldump --all-databases | gzip -9 > ~/$(date +\%Y-\%m-\%d)-todos_os_bancos_de_dados.sql.gz
Para mais opções de agendamento usando crontab leia este artigo.
Login sem senha
Se as opções host, user e password forem utilizadas na seção [client] ao em vez de [mysqldump] no arquivo .my.cnf, o login ao mysql será feito sem a necessidade de digitar nenhum destes parâmetros e também irá funcionar para o mysqldump.
~/.my.cnf
[client] host=localhost user=MeuUsuário password=MinhaSenha
Neste caso use o comando mysql sem os parâmetros para o host (-h ou --host) ou para o usuário (-u ou --user) ou para a senha (-p ou --password).
$ Shell
mysql
Para especificar uma localização diferente do arquivo de opções do mysql utilize o parâmetro --defaults-file=nome_do_arquivo na linha de comando.
$ Shell
mysql --defaults-file=~/mysql-opts
Referências
- https://dev.mysql.com/doc/refman/5.7/en/password-security-user.html
- http://www.techiecorner.com/1a619/how-to-setup-mysqldump-without-password-in-cronjob/
- https://www.everythingcli.org/secure-mysqldump-script-with-encryption-and-compression/
- https://mariadb.com/kb/en/making-backups-with-mysqldump/#comment_3576