翻譯 - 從 Windows 遷移 SQL Server 數據庫到 Linux

翻譯自 https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-migrate-restore-database?view=sql-server-ver15

推薦使用 SQL Server 的備份和還原功能把數據庫從 Windows 遷移到 Linux 上。本教程中,你將會使用備份和還原技術通過需要的步驟移動一個數據庫到 Linux 上。

  • 在 Windows 使用 SSMS 創建一個備份文件
  • 在 Windows 上安裝一個 Bash shell
  • 從 Bash shell 移動備份文件到 Linux 上
  • 使用 Transact-SQL 還原備份文件
  • 運行一個查詢語句驗證遷移

開始之前,需要在 Windows 上安裝:

Linux 需要安裝:

  • 帶有命令行工具的 SQL Server

在 Windows 上創建一個備份

在 Windows 上有許多方法創建一個備份文件。下面的步驟使用 SQL Server Management Studio (SSMS)創建。

  1. 在你的 Windows 機器上啓動 SQL Server Management Studio
  2. 在連接對話框中,輸入 localhost
  3. 在對象瀏覽器中,展開 數據庫
  4. 右鍵你的目標數據庫,選擇 任務,然後點擊 備份

5. 在備份數據庫對話框中,確認 備份類型完整,並且 備份到磁盤。注意文件的名稱和位置。例如,你的一個在 SQL Server 2016 上的一個名稱爲 YourDB 的數據庫有一個默認的備份路徑 C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak。

6. 點擊 確定 備份你的數據庫

注意:

另外一種創建備份文件的選擇是運行一個 Transact-SQL 語句。下面的 Transact-SQL 命令爲名稱爲 YourDB 的數據庫執行和前面步驟相同的操作:

BACKUP DATABASE [YourDB] TO  DISK =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bak'
WITH NOFORMAT, NOINIT, NAME = N'YourDB-Full Database Backup',
SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO

在 Windows 上安裝一個 Bash shell

爲了還原數據庫,你必須把備份文件從 Windows 傳輸到目標 Linux 上。在本教程中,我們通過運行在 Windows 上的 Bash shell 移動備份文件到 Linux 上:

  1. 在你的 Windows 機器上安裝 Bash shell,以支持 scp (secure copy) 和 ssh (遠程登錄) 命令。兩個示例包含:
    Windows Subsystem for Linux (Windows 10)
    - Git Bash Shell (https://git-scm.com/downloads)
  2. 在 Windows 上打開一個 Bash 會話

複製備份文件到 Linux

1. 在你的 Bash 會話中,導航到包含你的備份文件的目錄中。例如:

cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'

2. 使用 scp 命令傳輸文件到目標 Linux 機器。下面的示例傳輸 YourDB.bak 到 IP 地址爲 192.0.2.9 的 Linux 上用戶 User1 的 home 目錄:

scp YourDB.bak user1@192.0.2.9:./

 

 

 提示:

對於使用 scp 傳輸文件,也存在替代的方法。一個是使用  Samba 在 Windows 和 Linux 之間配置一個 SMB 網絡共享。在 Ubuntu 上的演練,查看  How to Create a Network Share Via Samba。一旦建立共享網絡,你可以從 Windows 上作爲一個網絡文件訪問它,例如 \\machinenameorip\share。

在還原之前轉移備份文件

此時,備份文件在你的 Linux 服務器的用戶的 home 目錄中。在還原數據庫到 SQL Server 之前,你必須把備份文件放到 /var/opt/mssql 的子目錄中,由於它是用戶 mssql 和 組 mssql 擁有的。如果你想改變默認的備份位置,查看文章 Configure with mssql-conf

  1. 在同一個 Windows Bash 會話中,使用 ssh 遠程連接你的目標 Linux 機器。下面的示例使用用戶 user1 連接到 Linux 機器 192.0.2.9:
    ssh user1@192.0.2.9
    你現在是在遠程 Linux 服務器上運行命令
  2. 進入超級用戶模式
    sudo su
  3. 創建一個新的備份目錄。-p 參數表示如果目錄已經存在的話,不會做任何操作
    mkdir -p /var/opt/mssql/backup
  4. 移動備份文件到這個目錄中。在下面的示例中,備份文件在 user1 的 home 目錄中。修改命令匹配你的備份文件的位置和文件名:
    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
  5. 退出超級用戶模式
    exit

在 Linux 上還原你的數據庫

爲了還原數據庫備份,你可以使用 RESTORE DATABASE Transact-SQL(TQL)命令:

注意:

下面的步驟使用了 sqlcmd 工具。如果你沒有安裝 SQL Server Tools,查看 Install SQL Server command-line tools on Linux

  1. 在同一個終端中,啓動 sqlcmd。下面的示例使用 SA 用戶連接到本地 SQL Server 實例。當出現提示符時輸入密碼,或者通過添加 -P 參數指定密碼。
    sqlcmd -S localhost -U SA
  2. 在 >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
  3. 通過列出服務器上所有的數據庫來驗證還原。被還原的數據庫應該被列出來:
    SELECT Name FROM sys.Databases
    GO
  4. 在你遷移的數據庫上運行另外的查詢。下面的命令切換上下文到 YourDB 數據庫,選擇了它的一個表的行:
    USE YourDB
    SELECT * FROM YourTable
    GO
  5. 當你使用完 sqlcmd 後,輸入 exit 退出
  6. 當你在遠程 ssh 會話完成工作後,再次輸入 exit
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章