在脚本中运行时,mysqldump不会转储所有内容

在脚本中运行时,mysqldump不会转储所有内容,mysql,bash,docker,Mysql,Bash,Docker,我有一个mysql服务器运行在一个名为dockersql的docker容器中。为了备份它,我使用 docker run -ti --rm --link dockersql:mysql -v $HOME/backups/20160202/:/hostbackup mysql /bin/bash -c "mysqldump -u user -p -h mysql database > /hostbackup/mysqldump.sql" 这个很好用。我已经在一个shell备份脚本中包含了这一

我有一个mysql服务器运行在一个名为
dockersql
的docker容器中。为了备份它,我使用

docker run -ti --rm --link dockersql:mysql -v $HOME/backups/20160202/:/hostbackup mysql /bin/bash -c "mysqldump -u user -p -h mysql database > /hostbackup/mysqldump.sql"
这个很好用。我已经在一个shell备份脚本中包含了这一行,它可以做其他事情。当我运行备份脚本时,我只得到USERS表的部分转储。当我直接在终端中运行docker run命令时,我确实得到了用户表的完整备份

以下是我的脚本的完整副本:

#!/bin/bash                                                                                                                                                                                                    


function usage
{
 echo "dockerBackup.sh [OPTIONS] <target directory>"
 echo "    full backup of currently running environment"
 echo "  OPTIONS"
 echo "    -n prefix : will use prefix in front of data container names"
 echo "    -h : help"

}



###################################                                                                                                                                                                            
#      Main Script Execution      #                                                                                                                                                                            
###################################                                                                                                                                                                            


# prefix to be used for naming containers                                                                                                                                                                      
prefix=''

# Option analysis                                                                                                                                                                                              
while getopts 'hn:' flag; do
  case "${flag}" in
    h)  usage ;
          exit 0;;
    n) prefix="${OPTARG}""_" ;
       argindex=$(($argindex+2));;
     *)
        error "Unexpected option ${flag}"
        usage
        ;;
  esac
done


echo "arguments total : $# argindex : $argindex"

if [ $(($#-1)) -ne $argindex ];then
    echo "Invalid argument number $#"
    usage
    exit 1

else

backupdir=${!#}
echo "backuping to $backupdir directory"

echo "backuping mysql database"
docker run -ti --rm --link "$prefix"dockersql:mysql -v "$backupdir":/hostbackup mysql /bin/bash -c "mysqldump -u user -p -h mysql database > /hostbackup/mysqldump.sql"

 #Other backup actions

fi
#/bin/bash
功能使用
{
echo“dockerBackup.sh[选项]”
回显“当前运行环境的完整备份”
回声“选项”
echo“-n前缀:将在数据容器名称前使用前缀”
回声“-h:帮助”
}
###################################                                                                                                                                                                            
#主脚本执行#
###################################                                                                                                                                                                            
#用于命名容器的前缀
前缀=“”
#期权分析
而getopts'hn:'标志;做
中的大小写“${flag}”
h) 用法;
退出0;;
n) 前缀=“${OPTARG}”“\”;
argindex=$($argindex+2));;
*)
错误“意外选项${flag}”
使用
;;
以撒
完成
echo“参数总数:$#argindex:$argindex”
如果[$($#-1))-ne$argindex];然后
echo“无效参数号$#”
使用
出口1
其他的
backupdir=${!#}
echo“备份到$backupdir目录”
echo“备份mysql数据库”
docker run-ti--rm--link“$prefix”dockersql:mysql-v“$backupdir”:/hostbackup mysql/bin/bash-c“mysqldump-u user-p-h mysql数据库>/hostbackup/mysqldump.sql”
#其他备份操作
fi

糟糕的问题,之前糟糕的研究
无论是在脚本还是直接命令行中,Mysqldump都可以正常工作

另一个容器中的某个地方还保留着一个旧文件,该文件名为
mysqldump.sql
,脚本的其他备份操作部分在我的问题中跳过了一个操作,该操作也备份和删除了mysql docker run命令创建的文件

对于所花费和失去的时间,我深表歉意