使用shell存储30天的MySQLDump

时间:2013-06-30 12:05:14

标签: shell

我想每天备份一个MySQL数据库(在另一台服务器上)。与此相关,我打算将这一天添加到转储文件名,以便每月重写,但存在一个关键问题。我不知道shell,我也无法访问测试环境。

我创建的代码是

#!/bin/bash
 CURR_DAY=`date +"%d"`
 echo "Commencing backup for today $CURR_DAY"
 DB_BACKUP="/hsphere/local/home/backup_account/backups/mysql_backups"
 DBUSER="user"
 DB_PASSWD="xxx"
 HN="123.456.789.001"    
 DB="maindb"
 # Create the backup directory
 mkdir -p $DB_BACKUP
 echo "---------------------"
 mysqldump -u $DBUSER -p$DB_PASSWD -h $HN $DB | gzip > $DB_BACKUP/mysqldump_$DB_$CURR_DAY.gz
 echo "---------------------"

我似乎在mySQLDump行中获得了一个CR或LF,其中的变量就是这样,我做错了吗?

1 个答案:

答案 0 :(得分:1)

您的shell脚本需要一些工作。

  1. 始终引用您的变量扩展。不加引号,他们将disappear altogether if empty, and do nasty things if they contain spaces
  2. 不要使用反引号 - bash有一个非常好的$(command)语法,你really should use instead。 (引用这些。)
  3. 当你将变量名称与其他东西混合时,请注意 - 其他东西看起来像是变量名称的扩展并导致有趣的行为。
  4. 您的脚本,重新访问:

    #!/bin/bash
    CURR_DAY="$(date +%d)"
    echo Commencing backup for today "$CURR_DAY"
    DB_BACKUP="/hsphere/local/home/backup_account/backups/mysql_backups"
    DBUSER=user
    DB_PASSWD=xxx
    HN=123.456.789.001
    DB=maindb
    
    # Create the backup directory
    mkdir -p "$DB_BACKUP"
    echo ---------------------
    mysqldump -u "$DBUSER" -p"$DB_PASSWD" -h "$HN" "$DB" | gzip > "$DB_BACKUP/mysqldump_${DB}_${CURR_DAY}.gz"
    echo ---------------------
    

    mysqldump行中添加大括号至少修复了一个其他错误 - shell尝试插入$DB_,而不是$DB后跟下划线。

    引用有合理的机会修复随机换行问题;如果没有,请评论。