简介

公司项目用到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

https://download.microsoft.com/download/d/9/7/d9789173-aaa7-4f5b-91b0-a2a01f4ba3a6/SSMS-Setup-CHS.exe

2. 安装SSMS

3. 连接数据库

第一栏 服务器ip地址,端口号
在这里插入图片描述

4. 上传备份bak文件至Linux服务器

5. 选择Linux服务器上的备份bak文件

在这里插入图片描述

6. 还原

在这里插入图片描述

官网说明文档如下:
https://docs.microsoft.com/zh-cn/sql/relational-databases/backup-restore/quickstart-backup-restore-database?view=sql-server-2017

方法二、通过命令行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 客户端连接服务器查看是否有该数据库。

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐