1

我想每天备份 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,请问我做错了什么?

4

1 回答 1

1

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

  1. 总是引用你的变量扩展。不加引号,如果为空,它们将完全消失,如果它们包含空格,则会做一些讨厌的事情
  2. 不要使用反引号 - bash 有一个非常好的$(command)语法,你真的应该使用它。(也引用这些。)
  3. 当你的变量名与其他东西混合时要小心——其他东西可能看起来像变量名的扩展并导致有趣的行为。

您的脚本,重新访问:

#!/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至少修复了一个其他错误 - 外壳尝试插入$DB_,而不是$DB后跟下划线。

引用有合理的机会解决随机换行问题;如果没有,请发表评论。

于 2013-06-30T12:38:16.137 回答