Como posso executar um trabalho Cron para fazer backups de um servidor MySQL por SSH

1

Eu tenho um servidor de produção rodando o CentOS com um banco de dados MySQL. Em casa, eu tenho um QNAP NAS (executa um pouco de linux incorporado). Eu quero fazer um trabalho Cron no meu NAS para fazer backup dos dados do meu servidor de produção do CentOS. O problema é que eu não quero transferir os dados descompactados (o dump SQL vai acabar em 5gb). Eu quero SSH no servidor, executar o despejo SQL, comprimir o resultado, baixá-lo.

Isso é possível? Qual seria o caminho mais eficiente?

    
por Pluc 01.10.2013 / 21:47

3 respostas

3

Você pode usar esse one-liner útil, executado no lado local da conexão:

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass mydb | gzip" > /path/to/my/dump.sql.gz

Em resumo, a saída gerada pelo comando mysqldump SSH será canalizada para gzip no lado remoto da conexão e, em seguida, redirecionada para stdout , que é redirecionada para /path/to/my/dump.sql.gz no seu NAS. Apenas os dados compactados serão enviados pela rede.

Você pode expandir isso ligeiramente executando o seguinte em um script (isso é equivalente ao que John especificou em sua resposta):

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass -D mydb | gzip > /tmp/dump.sql.gz"
scp user@remoteserver:/tmp/dump.sql.gz /path/to/my/dump.sql.gz
ssh user@remoteserver "rm -f /tmp/dump.sql.gz"

Esta é uma abordagem um pouco mais demorada e irá descarregar / compactar todo o banco de dados primeiro, depois copiá-lo pela rede via scp e, finalmente, remover a cópia remota.

    
por 01.10.2013 / 21:56
1

Ok, eu compartilho meu método pessoal que eu usava para fazer backup de todos os bancos de dados mysql diariamente com arquivo.

  1. Crie um arquivo mysqlbackup.sh em / bin ou qualquer outro lugar que você goste com o seguinte código

    #!/bin/bash
    # modify the following to suit your environment
    export DAYS="3"
    export DB_BACKUP="/backup/"
    export DB_USER="root"
    export DB_PASSWD="<you root password>"
    # title and version
    echo ""
    echo "mySQL_backup"
    echo "----------------------"
    echo "* Deleting OLD Backup ..."
    # this will delete old file older than DAYS
    find $DB_BACKUP -mtime +$DAYS -exec rm -rf {} \; 
    echo "* Creating new backup..."
    # Next command take backup compressed with bzip2 save in directory DB_BACKUP
    mysqldump --all-databases | bzip2 > $DB_BACKUP/mysql-'date +%Y-%m-%d-%H:%M'.bz2
    echo "----------------------"
    echo "Done"
    exit 0
    
  2. Salve esse arquivo
  3. Marque esse script como executável usando chmod + x filename
  4. Configure esse script no cron para execução diária 0 0 * * * /bin/mysqlbackup.sh que será criado de volta às 12 da meia-noite todos os dias.
  5. Rsync / backup para você diariamente usando o cron. Para configurar o rsync, você pode usar o link abaixo. link link

OR

  1. Você pode modificar o script original que inclui rsync sua pasta também nesse caso você não precisa configurar o segundo cron.

Boa sorte ...

    
por 01.10.2013 / 23:44
0

Isso é possível - eu costumava fazer algo muito parecido. Use o SSH para executar o mysql_dump (ou seu equivalente favorito) e edite com gzip , depois use scp para transferir e, em seguida, o SSH novamente para rm do arquivo de despejo.

    
por 01.10.2013 / 21:49