Bash恢复数据库到一个WordPress + Piwik解决scheme的docker容器

对于https://github.com/ellakcy/piwik-with-wordpress我做了一个恢复bash脚本,以恢复从https://github.com/ellakcy/piwik-with-wordpress/blob生成的备份/ master / scripts /预备份脚本

主要想法是用包含备份的tarball设置path,并重新创build卷所在的文件夹。

脚本如下:

#!/bin/bash # Printing functions black='\E[30;40m' red='\E[31;40m' green='\E[32;40m' yellow='\E[33;40m' blue='\E[34;40m' magenta='\E[35;40m' cyan='\E[36;40m' white='\E[37;40m' #Echo a string with color cecho () # Color-echo. # Argument $1 = message # Argument $2 = color { local default_msg="No message passed." # Doesn't really need to be a local variable. message=${1:-$default_msg} # Defaults to default message. color=${2:-$black} # Defaults to black, if not specified. echo -e "$color" echo "$message" tput sgr0 # Reset to normal. return } #Echo a string as error with color cecho_err () # Color-echo. # Argument $1 = message # Argument $2 = color { local default_msg="No message passed." # Doesn't really need to be a local variable. message=${1:-$default_msg} # Defaults to default message. color=${2:-$red} # Defaults to black, if not specified. echo >&2 -e "$color" echo >&2 "$message" tput sgr0 # Reset to normal. return } backup_file=${1} cecho "Creating the correct folders" $cyan cecho "Deleting data folder in order to recreate it" $red sudo rm -rf ./data mkdir ./data/ sudo chown root:root ./data/ sudo chmod 755 ./data/ if [ ! -f restore ]; then mkdir ./restore/ fi tar -xf ${backup_file} -C ./restore/ cecho "Restoring backup data for wordpress" $cyan sudo mkdir ./data/wordpress sudo chown root:root ./data/wordpress sudo chmod 755 ./data/wordpress sudo mv ./restore/wordpress/data/www ./data/wordpress/ sudo chown www-data:www-data ./data/wordpress/www cecho "Restoring environment" $cyan wordpress_env=$(tr '\n' ' ' <./restore/wordpress/env.txt) echo ${wordpress_env} cecho "Restoring database" $cyan sudo mkdir ./data/wordpress/db echo "sudo env ${wordpress_env} docker run --volume \"./data/wordpress/db\":/var/lib/mysql --volume ./restore/wordpress/db:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=\$WORDPRESS_MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE=\"wordpress\" -e MYSQL_USER=\$WORDPRESS_MYSQL_USER -e MYSQL_PASSWORD=\$WORDPRESS_MYSQL_PASSWORD mariadb" > ./restore_db.sh chmod +x ./restore_db.sh ./restore_db.sh # rm -rf ./restore_db.sh rm -rf ./restore 

当我尝试还原数据库时,出现此错误:

docker:来自守护进程的错误响应:create ./data/wordpress/db:“./data/wordpress/db”包含本地卷名的无效字符,只有“[a-zA-Z0-9] [a-zA- Z0-9 _.-]“是允许的。 参见“docker运行 – 帮助”。

正如你所看到的,它会生成一个临时脚本(稍后将被删除),生成脚本的一个示例是:

 sudo env WORDPRESS_MYSQL_ROOT_PASSWORD=passwd WORDPRESS_MYSQL_USER=wordpress WORDPRESS_MYSQL_PASSWORD=wordpress WORDPRESS_ADMIN_USER=admin WORDPRESS_ADMIN_PASSWORD=admin WORDPRESS_URL=http://0.0.0.0:8080 docker run --volume "./data/wordpress/db":/var/lib/mysql --volume ./restore/wordpress/db:/docker-entrypoint-initdb.d -e MYSQL_ROOT_PASSWORD=$WORDPRESS_MYSQL_ROOT_PASSWORD -e MYSQL_DATABASE="wordpress" -e MYSQL_USER=$WORDPRESS_MYSQL_USER -e MYSQL_PASSWORD=$WORDPRESS_MYSQL_PASSWORD mariadb 

为了在./data/wordpress/db中生成正确的卷数据,在容器的/ var / lib / mysql上挂载什么是最好的select?

当我们指定--volume <host_dir>:<container_dir>host_dir必须是绝对path。 如果不是绝对path,那么它就是卷的名字。 因此, invalid characters for a local volume name的消息invalid characters for a local volume name 。 尝试提供主机目录的绝对path。