Eu estou configurando um backup diário de um banco de dados MySQL 5.6.14 usando o mysqldump em um servidor Ubuntu 12.04 Precise.
Eu criei o arquivo de credenciais no diretório raiz (.mylogin.cnf) de acordo com as instruções para o mysql_config_editor.
Eu criei um script de shell para executar o backup:
#!/bin/bash
echo "$(date +'%Y%m%d %k%M%S'): Starting daily backup." >> /path/to/backup/dump.log
/opt/mysql/server-5.6/bin/mysqldump --login-path=localroot --databases mydatabase --single-transaction > /path/to/backup/daily.sql 2>> /path/to/backup/dump.log
echo "$(date +'%Y%m%d %k%M%S'): Finished daily backup." >> /path/to/backup/dump.log
(O script foi chmod 755).
Se eu executar esse script como root, ele funcionará como esperado.
Eu criei uma entrada crontab no crontab da raiz usando sudo crontab -e
:
# m h dom mon dow command
15 0 * * * /home/username/mysqldump-daily
O problema é que o log de saída (dump.log) mostra que o script tentou usar credenciais incorretas:
mysqldump: Obteve o erro: 1045: Acesso negado para o usuário 'root' @ 'localhost' (usando a senha: NO) ao tentar se conectar
Basta dizer que meu usuário root não é chamado de 'root', por isso sei que ele não está usando as credenciais armazenadas no arquivo .mylogin.cnf
, nem está usando a conta de usuário raiz real.
Não sei por que isso está acontecendo, mas suspeito que tenha algo a ver com o cron não ter acesso ao caminho inicial do usuário raiz ou que esteja executando o script como um usuário diferente. Pensei em editar o crontab da raiz (em vez de colocar o script em /etc/cron.daily/
, por exemplo, que eu tentei) funcionaria.
Eu não quero incluir a senha no script por razões óbvias, e é por isso que estou tentando empregar o arquivo criptografado.
Como posso obter o script executado pelo cron para utilizar com êxito as credenciais que estou especificando?