Sql server SQLServerDocker:如何备份&;还原数据*卷*?
我有一个运行Docker compose的MS SQLServer 2017 Linux Docker容器。(正在进行 (Windows主机。) 服务器正在运行,我添加了数据,这些数据在多个Sql server SQLServerDocker:如何备份&;还原数据*卷*?,sql-server,docker,docker-compose,docker-volume,Sql Server,Docker,Docker Compose,Docker Volume,我有一个运行Docker compose的MS SQLServer 2017 Linux Docker容器。(正在进行 (Windows主机。) 服务器正在运行,我添加了数据,这些数据在多个docker compose up/down 由于服务器使用的是docker卷。当我使用docker compose down-v时,数据消失。因此,这是预期的: 现在我正在尝试备份和恢复数据库。我知道直接使用SQLServer的“正常”方式这是有效的: 现在我在想,也许有一个比把SA密码放入BAT文件更好的
docker compose up/down
由于服务器使用的是docker卷。当我使用docker compose down-v
时,数据消失。因此,这是预期的:
现在我正在尝试备份和恢复数据库。我知道直接使用SQLServer的“正常”方式这是有效的:
现在我在想,也许有一个比把SA密码放入BAT文件更好的方法
并将其分发给我的客户和服务技术人员。只需抓取卷的副本
你应该做这个把戏
我发现:
# Make sure the SQLServer is not writing/blocking any files.
docker-compose stop sql
# Backup & Restore the sqldata volume.
docker run --rm -v sqldata -v $pwd\backup:/backup ubuntu bash -c "cd /whsqldata && tar xvf /backup/backup.tar --strip 1"
docker run --rm -v sqldata -v $pwd\backup:/backup ubuntu bash -c "cd /whsqldata && tar cvf /backup/backup.tar ."
# Restart the SQLServer.
docker-compose start sql
这将在我的用户目录中创建预期的backup.tar。。。但它小得令人怀疑!那之后呢
恢复时,SQLServer无法连接到数据库看起来backup.tar没有内容。
但仔细观察,我的sqldata卷也是如此!它是空的!?当我开始一个猛击的时候
同一卷,我可以看到目录,但其中没有任何内容:
docker run --rm -v sqldata -it ubuntu
/ # ls sqldata/ -a
. ..
/ #
SQLServer的数据仍然存在。所以它必须被保存在某个地方,对吗?我错过了什么 好的,在阅读了对的答案后,我发现我的错误在于如何安装卷。我必须编写
-vsqldata:/sqldata
,而不是-vsqldata
。还更改了我的命令中的一些路径
完成的命令包括:
# Backup the data volume
docker run --rm \
-v sqldata:/sqldata \
-v $pwd\:/backup \
ubuntu tar cvf /backup/backup.tar /sqldata
# Remove existing data volume (clear up old data, if exists)
docker volume rm sqldata
# Restore the data volume
docker run --rm \
-v sqldata:/sqldata \
-v $pwd\:/backup \
ubuntu tar xvf /backup/backup.tar -C sqldata --strip 1
docker run --rm -v sqldata -it ubuntu
/ # ls sqldata/ -a
. ..
/ #
# Backup the data volume
docker run --rm \
-v sqldata:/sqldata \
-v $pwd\:/backup \
ubuntu tar cvf /backup/backup.tar /sqldata
# Remove existing data volume (clear up old data, if exists)
docker volume rm sqldata
# Restore the data volume
docker run --rm \
-v sqldata:/sqldata \
-v $pwd\:/backup \
ubuntu tar xvf /backup/backup.tar -C sqldata --strip 1