Como despejar um banco de dados mysql e transferir para o ftp remoto em uma linha - para crontab-?

2

Eu preciso fazer um backup semanal de uma tabela mySQL e, em seguida, transferi-lo para uma máquina remota usando ftp.
Este é o comando que tenho agora no crontab:

0 18 * * 1 /usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > /home/myuser/backups/bdd-'date +%d-%m-%Y'.sql

Eu precisaria substituir a última parte do comando para que o arquivo sql gerado pudesse ser transferido para outro servidor usando o protocolo ftp.

Eu procurei e encontrei algo sobre "montar permanentemente o servidor ftp remoto usando o curlftpfs em / mnt / ftpserver /", mas não encontrei as etapas para fazer isso no meu linux

Agradecemos antecipadamente por qualquer dica que você possa me dar

    
por Enrique Becerra 18.05.2011 / 14:08

2 respostas

4

Se você tiver alguma tarefa que requeira mais de uma linha de shell, uma abordagem comum é colocá-la em um script de shell pequeno e chamar esse script de shell do cron.

0 18 * * 1 /home/myuser/backups/backup-and-ftp-db.sh

onde /home/myuser/backups/backup-and-ftp-db.sh contém algo como

#!/bin/sh
dumpfile=/home/myuser/backups/bdd-$(date +%d-%m-%Y).sql
/usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > $dumpfile
lftp -e "put $dumpfile backupdir/$dumpfile ; quit" -u username,password backupserver

Também é importante notar que várias invocações de date na substituição de comandos, como o Mike fez, podem levar a resultados diferentes. Isso é mais provável se a data incluir horas / minutos / segundos, no entanto, considere o que acontece se o seu cron job iniciar antes da meia-noite - sua primeira chamada de data, diga bdd-19-05-11.sql , e se o mysqldump demorar o suficiente para que a meia-noite passe e você no dia seguinte, seu segundo comando esperará um nome de arquivo bdd-20-05-11.sql . Por esse motivo, invoco date uma vez e armazeno em uma variável.

    
por 18.05.2011 / 14:25
1

Você pode usar o ncftpput se tiver uma senha de ftp no seu crontab .. ou o caminho para o arquivo ncftpput cfg

0 18 * * 1 /usr/bin/mysqldump --add-drop-table --extended-insert -user -ppass db [table] > /home/myuser/backups/bdd-'date +%d-%m-%Y'.sql && ncftpput -u user -p pass host.remote.com /home/myuser/backups/bdd-'date +%d-%m-%Y'.sql remotePath//bdd-'date +%d-%m-%Y'.sql
    
por 18.05.2011 / 14:14