2017-08-29 144 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