Como posso obter o mysqldump para usar as credenciais do mysql_config_editor em um script executado pelo crontab?

1

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?

    
por JYelton 10.01.2014 / 20:10

2 respostas

3

O que você precisa fazer é definir sua linha de programação da seguinte forma

HOME=/root
# m     h       dom     mon     dow     user   command
15      0       *       *       *       root   /home/username/mysqldump-daily

Observe a coluna "usuário". Adicione também a entrada HOME antes para o que for relevante para o seu caminho de login

    
por gillyspy 14.02.2014 / 11:32
1

Eu tive o mesmo problema com o mysqldump 5.7.13 em um script lançado pelo crontab. Você pode definir a localização do arquivo .mylogin.cnf usando a variável de ambiente MYSQL_TEST_LOGIN_FILE antes de chamar o comando mysqldump:

export MYSQL_TEST_LOGIN_FILE=/root/.mylogin.cnf
mysqldump --login-path=mysqldump [...]
    
por David Le Borgne 24.06.2016 / 10:31