Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用mysqldump时引发意外运算符的脚本_Mysql_Shell_Scripting_Openssl_Mysqldump - Fatal编程技术网

使用mysqldump时引发意外运算符的脚本

使用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

在将Debian box升级到6.0之后,我用来备份MySQL数据库的脚本的一部分已经停止正常工作。我已经通过CLI测试了备份代码,效果很好。我相信这是在备份发生之前选择数据库,可能与$skipdb变量有关。如果有更好的方法来执行该功能,那么我将尝试一些新的东西。如有任何见解,将不胜感激

$ 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" ]