Idioma
Categoria
Pesquisar

Executando mysqldump automaticamente sem senha

Como agendar backup com o mysqldump usando crontab, sem senha e de forma segura

Em Banco de dados Por Rudi Drusian Lange
Publicado em
Última atualização

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