Docker中Microsoft SQL Server容器如何带数据迁移到新主机
MSSQL Docker实例跨主机最快迁移方案
你当前部署架构下所有实例数据(含系统库、用户库、账号密码、配置、作业)全部持久化在外部命名卷MSSQL中,不需要做传统的数据库备份还原,直接迁移Docker卷是速度最快、完整性最高的方案,停机窗口仅为卷数据传输耗时。
1. 旧主机停服保证数据一致性
进入旧主机存放docker-compose.yml的目录,执行停服命令,禁止传输过程中有新数据写入造成文件损坏:
docker compose down
注意:绝对不要加-v参数,否则会直接删除本地存储的MSSQL数据卷。
2. 导出卷数据并传输到新主机
不需要手动找WSL2里Docker卷的底层存储路径,直接用临时容器打包卷数据,规避WSL2跨文件系统的权限问题:
在旧主机执行以下命令,会在当前目录生成全量数据压缩包:
docker run --rm -v MSSQL:/source -v $(pwd):/backup alpine tar czf /backup/mssql_migrate.tar.gz -C /source .
两台主机网络连通的前提下,直接用scp传输压缩包到新主机即可:
scp mssql_migrate.tar.gz <新主机登录用户>@<新主机IP>:<新主机存放压缩包的路径>
3. 新主机导入数据启动服务
- 先在新主机安装和旧主机大版本一致的Docker、Docker Compose环境,不需要提前拉取MSSQL镜像,启动服务时会自动拉取对应版本。
- 在新主机创建同名的外部Docker卷:
docker volume create MSSQL
- 进入新主机存放压缩包的目录,执行命令把备份数据导入新卷:
docker run --rm -v MSSQL:/target -v $(pwd):/backup alpine tar xzf /backup/mssql_migrate.tar.gz -C /target
- 把旧主机上原有的docker-compose.yml原封不动复制到新主机的任意工作目录,执行启动命令:
docker compose up -d
异常处理
如果容器启动失败,先执行docker logs <mssql容器ID>查看日志,若报目录权限错误,执行以下命令修复卷内文件归属后重启容器即可:
docker run --rm -v MSSQL:/var/opt/mssql mcr.microsoft.com/mssql/server:2019-latest chown -R mssql:mssql /var/opt/mssql
验证
容器启动后等待10~15秒让数据库完成初始化,直接使用旧实例原有的SA密码、连接参数访问新主机1433端口即可,所有数据、配置、账号完全和旧实例停服时一致,不需要额外配置。
内容的提问来源于stack exchange,提问作者qkhanhpro
相关产品推荐
相关产品推荐

