使用备份和还原将 SQL Server 数据库从 Windows 迁移到 Linux

一、需求

老的SQL server 2012之前部署在windows服务器上,现在服务器转Linux,准备装一个docker版本的SQL server 2017将数据迁移进去。

实现方案官方教程

  1. 使用 SSMS 在 Windows 上创建备份文件
  2. Linux 安装SQL server
  3. 将备份文件上传到 Linux
  4. 在 Linux 上通过 Transact-SQL 还原备份文件

二、备份老SQL server数据

1、安装SQL Server Management Studio

官网下载地址在这里插入图片描述

2、老SQL server服务器创建备份文件

官方备份教程
在这里插入图片描述

三、安装docker版本的SQL server

官方教程

1、拉取SQL server 2017镜像

docker pull mcr.microsoft.com/mssql/server:2017-latest

2、运行镜像

<YourStrong@Passw0rd>换成自定义密码就行

docker run \
-e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \
-p 1433:1433 --name sql1 \
-d mcr.microsoft.com/mssql/server:2017-latest

在这里插入图片描述

3、查看运行的容器

docker ps 

在这里插入图片描述

4、连接到 SQL Server

docker exec -it sql1 bash
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"

如果成功,应会显示 sqlcmd 命令提示符:1>

5、查看当前库

1> SELECT Name from sys.Databases
2> go

显示

Name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            

(4 rows affected)

四、还原备份文件

官方教程

1、将备份文件上传至SQL server备份文件夹

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

很多方法

1.2 创建SQL server备份文件夹

docker exec -it sql1 mkdir /var/opt/mssql/backup

1.3 使用 docker cp 将备份文件移到SQL server备份文件夹中

docker cp portal.bak sql1:/var/opt/mssql/backup/

2、还原数据库

1.1 在容器中运行 sqlcmd,列出备份中的逻辑文件名和路径

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
-Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/portal.bak"' | tr -s ' ' | cut -d ' ' -f 1-2

输出:

LogicalName PhysicalName
-------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
PORTAL_HIS D:\dbdata\ceshi\PORTAL_HIS.mdf
PORTAL_HIS_log D:\dbdata\ceshi\PORTAL_HIS_log.ldf

1.2 调用 RESTORE DATABASE 命令,还原容器中的数据库 。 为上一步中的每个文件指定新路径。

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
-Q 'RESTORE DATABASE PORTAL_HIS FROM DISK = "/var/opt/mssql/backup/portal.bak" WITH MOVE "PORTAL_HIS" TO "/var/opt/mssql/data/PORTAL_HIS.mdf",MOVE "PORTAL_HIS_log" TO "/var/opt/mssql/data/PORTAL_HIS_log.ldf"'

输出:

Processed 14893912 pages for database 'PORTAL_HIS', file 'PORTAL_HIS' on file 1.
Processed 3 pages for database 'PORTAL_HIS', file 'PORTAL_HIS_log' on file 1.
Converting database 'PORTAL_HIS' from version 706 to the current version 869.
Database 'PORTAL_HIS' running the upgrade step from version 706 to version 770.
Database 'PORTAL_HIS' running the upgrade step from version 770 to version 771.
Database 'PORTAL_HIS' running the upgrade step from version 771 to version 772.
Database 'PORTAL_HIS' running the upgrade step from version 772 to version 773.
Database 'PORTAL_HIS' running the upgrade step from version 773 to version 774.
RESTORE DATABASE successfully processed 14893915 pages in 678.312 seconds (171.541 MB/sec).

1.3 验证还原的数据库

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
-S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
-Q 'SELECT Name FROM sys.Databases'

输出:数据库已经导入

Name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            
PORTAL_HIS                                                                                                                      

(5 rows affected)
发布了146 篇原创文章 · 获赞 25 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39680564/article/details/102515250