我有一个名为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
答案 0 :(得分:0)
不好的问题,之前的研究不好 无论是在脚本还是直接命令行中,Mysqldump都能正常工作
另一个容器中的某个地方还有一个旧文件,该文件应该已被清除,名为mysqldump.sql
,我在脚本的#Other backup actions
部分的问题中跳过的一个操作也是备份和删除一个由mysql docker run命令创建。
抱歉花了很多时间。