美文网首页
SQLServer从Windows迁移到Linux

SQLServer从Windows迁移到Linux

作者: 这货不是王马勺 | 来源:发表于2024-01-14 17:34 被阅读0次

上传备份文件

首先将windows上的sqlserver备份文件上传至linux服务器。
(注:备份不要透明加密)
将数据库还原到 SQL Server 之前,必须将备份放入“/var/opt/mssql”的子目录中,因为这属于用户 mssql 和组 mssql。 如果想要更改默认备份位置,请查看使用 mssql-conf 进行配置一文。

创建新的备份目录。 如果目录已存在,-p 参数不会执行任何操作。

mkdir -p /var/opt/mssql/backup
chown mssql:mssql /var/opt/mssql/backup

将备份文件移动到该目录。 在下面的示例中,备份文件位于 user1 的主目录。 更改命令,使其与你的备份文件的位置和文件名相匹配。

mv /home/user1/YourDB.bak /var/opt/mssql/backup/

在 Linux 上还原数据库

要还原数据库备份,可以使用 RESTORE DATABASE Transact-SQL (TQL) 命令。

首先需要安装 SQL Server 工具,请参阅在 Linux 上安装 SQL Server 命令行工具

在同一终端中,启动 sqlcmd。 下面的示例以 SA 用户身份连接到本地 SQL Server。 出现提示时输入密码,或使用 -P 参数指定密码。

sqlcmd -S localhost -U SA

在 >1 提示符下,输入以下 RESTORE DATABASE 命令,并在每行后按 Enter(无法同时复制和粘贴整个多行命令)。 将出现的所有 YourDB 替换为数据库的名称。

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO

应收到已成功还原数据库的消息。

RESTORE DATABASE 可能会返回类似于以下示例的错误:

File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf'. Use WITH MOVE to identify a valid location for the file.
Msg 5133, Level 16, State 1, Server servername, Line 1
Directory lookup for the file "Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf" failed with the operating system error 2(The system cannot find the file specified.).

在这种情况下,数据库包含辅助文件。 如果未在 RESTORE DATABASE 的 MOVE 子句中指定这些文件,则还原过程将尝试在与原始服务器相同的路径中创建这些文件。

可以列出备份中包含的所有文件

RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
GO

应会看到如下所示的列表(仅列出前两列):

LogicalName         PhysicalName                                                                 ..............
----------------------------------------------------------------------------------------------------------------------
YourDB              Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf          ..............
YourDB_Product      Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf  ..............
YourDB_Customer     Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
YourDB_log          Z:\Microsoft SQL Server\MSSQL11.GLOBAL\MSSQL\Data\YourDB\YourDB_Log.ldf      ..............

可使用此列表为其他文件创建 MOVE 子句。 在本示例中,RESTORE DATABASE 为:

RESTORE DATABASE YourDB
FROM DISK = '/var/opt/mssql/backup/YourDB.bak'
WITH MOVE 'YourDB' TO '/var/opt/mssql/data/YourDB.mdf',
MOVE 'YourDB_Product' TO '/var/opt/mssql/data/YourDB_Product.ndf',
MOVE 'YourDB_Customer' TO '/var/opt/mssql/data/YourDB_Customer.ndf',
MOVE 'YourDB_Log' TO '/var/opt/mssql/data/YourDB_Log.ldf'
GO

通过列出服务器上的所有数据库来验证还原。 应该会列出已还原的数据库。

SELECT Name FROM sys.Databases
GO

在已迁移的数据库上运行其他查询。 以下命令将上下文切换到 YourDB 数据库,并从其一个表中选择行。

USE YourDB
SELECT * FROM YourTable
GO

使用 sqlcmd 完成后,键入 exit。

使用SSMS还原

操作简单,与windows上类似。

参考官网:

https://learn.microsoft.com/zh-cn/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-ver15

相关文章

网友评论

      本文标题:SQLServer从Windows迁移到Linux

      本文链接:https://www.haomeiwen.com/subject/dihcodtx.html