文章目录
一、需求
老的SQL server 2012之前部署在windows服务器上,现在服务器转Linux,准备装一个docker版本的SQL server 2017将数据迁移进去。
实现方案:官方教程
- 使用 SSMS 在 Windows 上创建备份文件
- Linux 安装SQL server
- 将备份文件上传到 Linux
- 在 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)