como é que o meu script de backup falha para construir o ficheiro tar.gz e enviá-lo através do scp?

0

Estou tentando criar um script para automatizar os backups do MySQL e transferir o arquivo gerado para outro servidor.

Eu consegui criar o arquivo de despejo, mas não fiz muito progresso a partir desse ponto. O roteiro até agora é colado abaixo.

#!/bin/bash

# database credentials
DATABASEHOST="<url>"
DATABASEUSER="<user>"
DATABASEPASSWORD="<password>"
DATABASESCHEMA="<schema>"
DATABASEENV="<env>"

# Local directory of mysqldump file
LOCALDIR=/home/<user>/db-bkp

# Temporary directory for compressed file
TEMPDIR=/home/<user>/tmp

# Remote Directory for backups.
REMOTEDIR=/home/<user>/db-bkp

# Backup host to login to
BACKUPHOST=<backup-host>
#--- end config


echo $(date +%H:%M)
echo "Creating the MySQL dump" 
mysqldump --host="$DATABASEHOST" --user="$DATABASEUSER" --password="$DATABASEPASSWORD" --single-transaction "$DATABASESCHEMA" > "$LOCALDIR"/"$(date +%Y%m%d)_bkp_$DATABASESCHEMA.sql"

#echo "Generating md5sum"
md5sum "$LOCALDIR"/* > "$LOCALDIR"/checklist.chk

#echo "Compressing the dump and checklist"
tar -cvzf "$TEMPDIR"/"$(date +%Y%m%d"_"$DATABASEENV"_"$DATABASESCHEMA".tar.gz "$LOCALDIR"/*

#echo "Sending the compressed file to d2"
scp "$TEMPDIR"/"$DATABASESCHEMA".tar.gz "$BACKUPHOST":"$REMOTEDIR"

#echo "Removing generated files"
#rm "$LOCALDIR"/checklist.chk > /dev/null 2>&1

#rm "$LOCALDIR"/"$(date +%Y%m%d)_bkp_$DATABASESCHEMA.sql" > /dev/null 2>&1

#rm "$TEMPDIR"/"$DATABASESCHEMA".tar.gz > /dev/null 2>&1

echo $(date +%H:%M)

Como ainda estou testando, faço várias execuções manuais, mas nas últimas execuções ele conseguiu criar o arquivo de despejo e o hash md5sum, mas parou lá.

<user>@<host>:~/db-bkp$ ./dev_backup.sh 
10:45
Creating the MySQL dump
./dev_backup.sh: line 48: unexpected EOF while looking for matching '"'
./dev_backup.sh: line 51: syntax error: unexpected end of file

O engraçado é que as linhas 48 e 51 ar comentaram. O que está acontecendo aqui?

    
por gtludwig 20.02.2017 / 12:19

3 respostas

1

Para o código acima, executar "bash -n" fornece a seguinte saída:

line 42: unexpected EOF while looking for matching '"'
line 45: syntax error: unexpected end of file

Então altere o comando de criação do tarball para o seguinte:

tar -cvzf "$TEMPDIR"/$(date +%Y%m%d)"_"$DATABASEENV"_"$DATABASESCHEMA".tar.gz" "$LOCALDIR"/*

Suponho que isso funcione.

    
por 20.02.2017 / 12:47
1

Você pode fazer isso minimizando o número de cotações em uso:

tar -cvzf \
    "$TEMPDIR/$(date '+%Y%m%d')_$DATABASEENV\_$DATABASESCHEMA.tar.gz" \
    "$LOCALDIR"/* \
;

Observe que você estava perdendo o fechamento dos parens para o comando $(date.. que não foi facilmente localizado devido à densidade de citações.

    
por 21.02.2017 / 01:26
-1

isso é mais bonito

tar czvf ${TEMPDIR}/$(date +%Y%m%d)_${DATABASEENV}_${DATABASESCHEMA}.tar.gz ${LOCALDIR}/*
    
por 20.02.2017 / 18:10