Я пытаюсь создать сценарий для автоматизации резервного копирования MySQL и передачи сгенерированного файла на другой сервер.
Мне удалось создать файл дампа, но с этого момента я не добился особого прогресса. Скрипт пока вставлен ниже.
#!/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)
Поскольку я все еще тестирую его, я выполняю много запусков вручную, но в нескольких последних запусках ему удалось создать файл дампа и хеш md5sum, но на этом остановился.
<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
Забавно то, что строки 48 и 51 закомментированы. Что здесь происходит?
Для приведенного выше кода запуск "bash -n" дает следующий результат:
line 42: unexpected EOF while looking for matching `"'
line 45: syntax error: unexpected end of file
Итак, измените команду создания архива на следующее:
tar -cvzf "$TEMPDIR"/$(date +%Y%m%d)"_"$DATABASEENV"_"$DATABASESCHEMA".tar.gz" "$LOCALDIR"/*
Я полагаю, это должно сработать.
это красивее
tar czvf ${TEMPDIR}/$(date +%Y%m%d)_${DATABASEENV}_${DATABASESCHEMA}.tar.gz ${LOCALDIR}/*
Вы можете сделать это, минимизировав количество используемых кавычек:
tar -cvzf \
"$TEMPDIR/$(date '+%Y%m%d')_$DATABASEENV\_$DATABASESCHEMA.tar.gz" \
"$LOCALDIR"/* \
;
Обратите внимание, что вам не хватало закрывающих скобок для $ ( date ..
команда, которую было нелегко обнаружить из-за плотности кавычек.