Preciso adicionar 'sudo' para o comando mysqldump, para o script de backup do MySql

1

Estou tentando escrever o script de backup mysql para o cron. Usando o servidor Ubuntu.

O código atual é o seguinte:

#!/bin/sh
mysqldump -u root --all-databases > /root/all_databases_backup-'date +%A'.sql

Eu preciso adicionar 'sudo' antes do mysqldump, assim:

#!/bin/sh
sudo mysqldump -u root --all-databases > /root/all_databases_backup-'date +%A'.sql

A razão que eu pergunto é porque quando eu executo o mysql / mysqldump no shell, ele sempre diz Permission denied. Eu preciso sudo para passar.

O comando no script também requer o sudo?

Obrigado.

    
por gilzero 08.05.2012 / 14:51

3 respostas

3

mysqldump precisará de uma senha para o usuário mysql root . Se você não fornecer essa senha, não funcionará, sudo ou não sudo .

mysqldump pode consultar seu arquivo .my.cnf para obter a senha e obterá do usuário executando o comando mysqldump . Portanto, se o usuário do Linux root tiver um .my.cnf configurado com uma senha, então sim, sudo ajudará. No entanto, se o usuário mysql root tiver uma senha e não estiver configurado em nenhum .my.cnf , então sudo não ajudará.

Você pode adicionar o usuário e a senha do mysql root ao seu usuário .my.cnf e então você não precisa do sudo , mas isso é um risco de segurança.

Como as outras respostas também apontam, você pode precisar de sudo para escrever a saída em algum lugar que root (Linux, não mysql) possua.

Por último, você não nos diz qual usuário está executando o script, se ele está no crontab root (por exemplo), então sudo não será necessário, embora você ainda possa precisa de um .my.cnf para fornecer a senha.

Se o seu usuário mysql root não tiver nenhuma senha configurada, o único problema é escrever a saída. Nesse caso, sudo é necessário se você não executar o script como root .

Se você executar o script como raiz (por exemplo, como um script em /etc/cron.daily ), não deverá usar o sudo no script, independentemente de todos os comentários acima.

    
por 08.05.2012 / 14:54
4

O comando mysqldump não exige sudo , mas salvar o arquivo de despejo na pasta /root requer privilégios de root. Então, você precisa executar seu script usando sudo .

Você também pode observar a execução do seguinte comando:

sudo mysqldump -u root --all-databases > /root/all_databases_backup-'date +%A'.sql

dará o seu erro permissão negada . Isso ocorre porque o redirecionamento de saída ainda não está sendo executado como root, mas apenas a parte do dump.

    
por 08.05.2012 / 14:53
1

No seu caso, você precisa do sudo para gravar na pasta / root /. Se você pode descarregar o banco de dados para qualquer outra pasta com as permissões corretas (ou alterar as permissões em / root - não recomendado), você pode usá-lo sem sudo.

    
por 08.05.2012 / 14:53