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

时间:2016-02-02 11:48:24

标签: mysql bash docker

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

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命令时,我会获得users表的完整备份。

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

#!/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

1 个答案:

答案 0 :(得分:0)

不好的问题,之前的研究不好 无论是在脚本还是直接命令行中,Mysqldump都能正常工作

另一个容器中的某个地方还有一个旧文件,该文件应该已被清除,名为mysqldump.sql,我在脚本的#Other backup actions部分的问题中跳过的一个操作也是备份和删除一个由mysql docker run命令创建。

抱歉花了很多时间。