前一篇文章关于 SQL Server on Linux 的安装,地址: http://www.linuxidc.com/Linux/2017-12/149607.htm ,现在测试把 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)
在 Windows 下使用 SSMS 完整备份数据库
- BACKUP DATABASE db1 TO DISK = 'D:\sql_bak\db1\db1.bak'
- WITH
- COMPRESSION, INIT, SKIP, NAME = 'full_backup',STATS = 1
- GO
code-1: 备份数据库
把备份文件复制到 Linux,如放到 / tmp / 下。可以用 FTP,或 rz 等工具。
使用终端(如 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 查询:
Figure-1: sqlcmd 下的查询
Figure-2: SSMS 下 db1 数据库的属性(Files)
在 Windows 的 SSMS 连接到 Linux 下的数据库,发现数据库文件的路径不是 Linux 的正斜杠,而是 Windows 的反斜杠;Compatibility level 也无法修改。
Figure-2: SSMS 下 db1 数据库的属性(Options)
Figure-2: SSMS 下的查询
来源: http://www.linuxidc.com/Linux/2017-12/149608.htm