使用mysqldump时引发意外运算符的脚本
在将Debian box升级到6.0之后,我用来备份MySQL数据库的脚本的一部分已经停止正常工作。我已经通过CLI测试了备份代码,效果很好。我相信这是在备份发生之前选择数据库,可能与$skipdb变量有关。如果有更好的方法来执行该功能,那么我将尝试一些新的东西。如有任何见解,将不胜感激使用mysqldump时引发意外运算符的脚本,mysql,shell,scripting,openssl,mysqldump,Mysql,Shell,Scripting,Openssl,Mysqldump,在将Debian box升级到6.0之后,我用来备份MySQL数据库的脚本的一部分已经停止正常工作。我已经通过CLI测试了备份代码,效果很好。我相信这是在备份发生之前选择数据库,可能与$skipdb变量有关。如果有更好的方法来执行该功能,那么我将尝试一些新的东西。如有任何见解,将不胜感激 $ sudo ./script.sh [: 138: information_schema: unexpected operator [: 138: -1: unexpected operator [: 138
$ sudo ./script.sh
[: 138: information_schema: unexpected operator
[: 138: -1: unexpected operator
[: 138: mysql: unexpected operator
[: 138: -1: unexpected operator
使用bash-x脚本这里是一个迭代:
+ for db in '$DBS'
+ skipdb=-1
+ '[' test '!=' '' ']'
+ for i in '$IGGY'
+ '[' mysql == test ']'
+ :
+ '[' -1 == -1 ']'
++ /bin/date +%F
+ FILE=/backups/hostname.2011-03-20.mysql.mysql.tar.gz
+ '[' no = yes ']'
+ /usr/bin/mysqldump --single-transaction -u root -h localhost '-ppassword' mysql
+ /bin/tar -czvf /backups/hostname.2011-03-20.mysql.mysql.tar.gz mysql.sql
mysql.sql
+ rm -f mysql.sql
这是代码
if [ $MYSQL_UP = "yes" ]; then
echo "MySQL DUMP" >> /tmp/update.log
echo "--------------------------------" >> /tmp/update.log
DBS="$($MYSQL -u $MyUSER -h $MyHOST -p"$MyPASS" -Bse 'show databases')"
for db in $DBS
do
skipdb=-1
if [ "$IGGY" != "" ] ;
then
for i in $IGGY
do
[ "$db" == "$i" ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ] ;
then
FILE="$DEST$HOST.`$DATE +"%F"`.$db.mysql.tar.gz"
if [ $ENCRYPT = "yes" ]; then
$MYSQLDUMP -u $MyUSER -h $MyHOST -p"$MyPASS" $db > $db.sql && $TAR -czvf - $db.sql | $OPENSSL enc -aes-256-cbc -salt -out $FILE.enc -k $ENC_PASS && rm -f $db.sql
else
$MYSQLDUMP --single-transaction -u $MyUSER -h $MyHOST -p"$MyPASS" $db > $db.sql && $TAR -czvf $FILE $db.sql && rm -f $db.sql
fi
fi
done
fi我猜您的
$MYSQL
没有返回您期望的值,而是打印了一些错误消息,您在中使用for db in$DBS对其进行了迭代;做完成
尝试手动运行$MYSQL-u$MyUSER-h$MyHOST-p“$MyPASS”-Bse'show databases'
命令
另外,
bash-x脚本
是您的朋友。我最好的猜测是您没有shebang行,或者默认shell已经更改。您的问题在这一行:
[ "$db" == "$i" ] && skipdb=1 || :
和/或这个:
if [ "$skipdb" == "-1" ]
Bash对单方括号内的=
非常满意,但Dash就不是这样了。将这些行更改为使用单个等号:
[ "$db" = "$i" ] && skipdb=1 || :
以及:
或者将您的shebang更改为
#/bin/bash
如果,你最上面的的fi
在哪里?你应该在你的shebang中添加-x
选项,以查看你的shell试图运行什么。编辑了问题,添加了我在原始帖子中忘记的fi以及调试输出。我手动运行了该命令,它返回了正确的数据库名称。
if [ "$skipdb" = "-1" ]