Docker环境下SqlServer数据库使用bak文件还原
目录简介还原步骤1. 拷贝bak文件至Linux系统中2. 拷贝bak文件至Docker容器中3. 进入Docker容器中4. 使用RESTORE FILELISTONLY命令列出备份数据文件的逻辑名5. 使用RESTORE DATABASE命令还原数据库简介公司项目用到Sqlserver,开发环境在云主机 Linux系统Docker环境下,有时候项目调试copy客户数据库数据BAK文件,项目经理
目录
简介
公司项目用到Sqlserver,开发环境在云主机 Linux系统Docker环境下,有时候项目调试copy客户数据库数据BAK文件,项目经理希望将bak文件还原到开发环境中的Sqlserver中。
之前通过 Navicat 导出导入sql文件进行,数据量大会很慢,有可能超时中断,好在官网有docker环境下的bak文件还原说明:
https://docs.microsoft.com/zh-cn/sql/linux/tutorial-restore-backup-in-sql-server-container?view=sql-server-ver15
不过官网有点看着累, 稍微记录一下简单步骤:
这里说下有主要两种方法:
- 通过工具还原,需要安装 ssms程序,目前好像只有windows版本的
- 通过sqlcmd命令行还原,无需安装任何工具程序
方法一,通过SSMS可视化工具还原步骤
SQL Server Management Studio (SSMS) 是一个 **【免费】**的 集成环境,用它可以轻松备份还原数据库。
1. 下载 SSMS
2. 安装SSMS
3. 连接数据库
第一栏 服务器ip地址,端口号
4. 上传备份bak文件至Linux服务器
5. 选择Linux服务器上的备份bak文件
6. 还原
方法二、通过命令行sqlcmd还原步骤
1. 拷贝bak文件至Linux系统中
我这边使用的是filezilla 工具,
假设文件名称为:BIQS_XY20200806.bak
拷贝到 根目录 /下
2. 拷贝bak文件至Docker容器中
shell命令行下:
docker cp /BIQS_XY20200806.bak mssql2017:/
mssql2017 是 Sqlserver 2017 Docker容器的名称, 将BIQS_XY20200806.bak文件拷贝至容器中根目录下。
3. 进入Docker容器中
docker exec -i -t mssql2017 /bin/bash
4. 使用RESTORE FILELISTONLY命令列出备份数据文件的逻辑名
/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'Middol123.' -Q 'RESTORE FILELISTONLY FROM DISK = "/BIQS_XY20200806.bak"' | tr -s ' ' | cut -d ' ' -f 1-2
列出的数据文件逻辑名称为:
middol_biqs_test_xingyu 和 middol_biqs_test_xingyu_log
5. 使用RESTORE DATABASE命令还原数据库
这里注意一下,建议还原到一个新数据库下,原数据库可能有开发同事还在用,即便没有人用也不建议被覆盖还原,另外如果真要还原到原来数据库可以先kill所有的客户端连接进程后再还原!
这里我们还原到一个新数据库中,名称叫 middol_biqs_test3_xingyu ,这个数据库可以不用手动创建,bak文件自动创建。
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'Middol123.' -Q 'RESTORE DATABASE middol_biqs_test3_xingyu FROM DISK = "/BIQS_XY20200806.bak" WITH MOVE "middol_biqs_test_xingyu" TO "/var/opt/mssql/data/middol_biqs_test3_xingyu.mdf" , MOVE "middol_biqs_test_xingyu_log" TO "/var/opt/mssql/data/middol_biqs_test3_xingyu.ldf"'
出现类似下面图片显示信息,表示还原成功。
使用 Navicat 客户端连接服务器查看是否有该数据库。
更多推荐
所有评论(0)