从Windows迁移SQL Server到Linux 1. 环境 2. 在Windows下创建备份 3. 复制备份文件到Liunx 4. 在Linux下还原数据库 5. 查询验证 6. 参考

从Windows迁移SQL Server到Linux
1. 环境
2. 在Windows下创建备份
3. 复制备份文件到Liunx
4. 在Linux下还原数据库
5. 查询验证
6. 参考

前一篇博客关于SQL Server on Linux的安装,地址:http://www.cnblogs.com/fishparadise/p/8057650.html,现在测试把Windows平台下的一个数据库迁移到Linux平台下。

Windows: Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)
Linux: CentOS 7.4,SQL Server 2017 (RC2) - 14.0.900.75 (X64)

2. 在Windows下创建备份

在Windows下使用SSMS完整备份数据库

BACKUP DATABASE db1 TO DISK = 'D:sql_bakdb1db1.bak'
WITH
COMPRESSION, INIT, SKIP, NAME = 'full_backup',STATS = 1
GO

code-1: 备份数据库

3. 复制备份文件到Liunx

把备份文件复制到Linux,如放到/tmp/下。可以用FTP,或rz等工具。


4. 在Linux下还原数据库

使用终端(如Xshell)连接到Linux。默认数据文件目录在/var/opt/mssql/data/下,如果要指定数据目录的话,可创建自定义目录并赋予相应权限。

mkdir -p /data/mssql_data
chown -R mssql:mssql /data/mssql_data

code-2: 创建目录并修改权限



使用sqlcmd连接到数据库

sqlcmd -S localhost -U sa

code-3: 连接到数据库

RESTORE DATABASE db1 FROM DISK = '/tmp/db1.bak'
WITH
MOVE 'db1' TO '/data/mssql_data/db1.mdf',
MOVE 'db1_log' TO '/data/mssql_data/db1_log.ldf',
STATS = 1, REPLACE, RECOVERY
GO

code-4: 还原数据库


注意:不能复制并粘贴整个多行命令一次,只能复制每个行后按 enter 键。最后以GO结束,回车后执行。

当然,也可以把上面的还原数据库的命令写到一个文件,再使用sqlcmd执行脚本方式来还原数据库。

sqlcmd -S localhost -U sa -i '/data/mssql_data/restore_db.txt'

code-5: 执行脚本文件还原数据库


5. 查询验证

在Linux下的sqlcmd查询:

从Windows迁移SQL Server到Linux
1. 环境
2. 在Windows下创建备份
3. 复制备份文件到Liunx
4. 在Linux下还原数据库
5. 查询验证
6. 参考

 Figure-1: sqlcmd下的查询

从Windows迁移SQL Server到Linux
1. 环境
2. 在Windows下创建备份
3. 复制备份文件到Liunx
4. 在Linux下还原数据库
5. 查询验证
6. 参考

 Figure-2: SSMS下db1数据库的属性(Files)

在Windows的SSMS连接到Linux下的数据库,发现数据库文件的路径不是Linux的正斜杠,而是Windows的反斜杠;Compatibility level也无法修改。

从Windows迁移SQL Server到Linux
1. 环境
2. 在Windows下创建备份
3. 复制备份文件到Liunx
4. 在Linux下还原数据库
5. 查询验证
6. 参考

 Figure-2: SSMS下db1数据库的属性(Options)

从Windows迁移SQL Server到Linux
1. 环境
2. 在Windows下创建备份
3. 复制备份文件到Liunx
4. 在Linux下还原数据库
5. 查询验证
6. 参考

Figure-2: SSMS下的查询



6. 参考

https://docs.microsoft.com/zh-cn/sql/linux/sql-server-linux-migrate-restore-database