在脚本中运行时,mysqldump不会转储所有内容
我有一个mysql服务器运行在一个名为在脚本中运行时,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备份脚本中包含了这一
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命令创建的文件
对于所花费和失去的时间,我深表歉意