2017-08-29 116 views
1

我正在絞一個腳本,我計劃通過cron爲每天早晨1AM安排備份mySql DB。命令被bash誤解了

通常我用它來轉儲數據庫:

mysqldump --no-create-db --single-transaction myDB | gzip > ~/my_backup.sql.gz 

在我的腦海我自己編寫應:

  • 轉儲數據庫,寫任何錯誤database.err
  • 管輸出到gzip,然後將其壓縮並寫入磁盤
  • 讀取返回碼,假設成功將文件寫入S3存儲桶
  • 出於測試的目的,寫入當前狀態殼

#!/bin/bash 

# This script will run each night to backup 
# the mySql DB then will upload to Amazon S3 

DB_NAME="myDB" 

S3_BUCKET="my.s3.bucket" 

BACKUP_PATH="~/backups/${DB_NAME}.sql.gz" 

mysqldump --no-create-db --single-transaction ${DB_NAME} 2> database.err | gzip > ${BACKUP_PATH} 
if [ "$?" -eq 0 ] 
then 
    echo "Database dump complted sucessuflly... wtiting to S3" 
    aws s3 cp ${BACKUP_PATH} s3://${S3_BUCKET}/ 
    if [ "$?" -eq 0 ] 
    then 
     echo "Backup sucessfully written to S3" 
    else 
     echo "Error writing to S3" 
    fi 
else 
    echo "Mysqldump encountered a problem look in database.err for information" 
fi 

是什麼樣子的腳本正在做的是越來越給mysqldump的線,但無法在那裏我的參數來區分指定DB和2>(我認爲是文件描述符的術語?)。這是錯誤:

./backup-script: line 12: ~/backups/myDB.sql.gz: No such file or directory 
mysqldump: Got error: 1049: Unknown database 'myDB 2' when selecting the database 
Mysqldump encountered a problem look in database.err for information 

任何人都可以提出這裏發生了什麼/我做錯了什麼。

+0

'〜'不變量或變量擴展擴展。 – Kevin

+0

換句話說,使用'BACKUP_PATH =〜/「備份/ $ {DB_NAME} .sql.gz」'或者更好的是'BACKUP_PATH =「$ HOME/backups/$ {DB_NAME} .sql.gz」' – John1024

+0

一個'未知數據庫'myDB 2'原因的可能性是'$ {DB_NAME}'和'2>'之間的空格,而非標準ASCII空格。如果在文字處理器中而不是程序員的編輯器中創建腳本,則會發生此類問題。這可能更常見,你可能會想。 – John1024

回答

1

嘗試把數據庫名第一

mysqldump "${DB_NAME}" --no-create-db --single-transaction 
+1

也要感謝Kevin和John1024爲解釋〜並建議$ HOME。現在惠特工作我已經意識到我已經捕獲了gzip的退出代碼,但發現這個https://stackoverflow.com/questions/1221833/pipe-output-and-capture-exit-status-in-bash幫助我。謝謝大家! – Craig