Memigrasikan database SQL Server dari Windows ke Linux menggunakan pencadangan dan pemulihan

Berlaku untuk:SQL Server - Linux

Fitur pencadangan dan pemulihan SQL Server adalah cara yang disarankan untuk memigrasikan database dari SQL Server di Windows ke SQL Server di Linux. Dalam tutorial ini, Anda akan menelusuri langkah-langkah yang diperlukan untuk memindahkan database ke Linux dengan teknik pencadangan dan pemulihan.

  • Membuat file cadangan di Windows dengan SSMS
  • Menginstal shell Bash di Windows
  • Memindahkan file cadangan ke Linux dari shell Bash
  • Memulihkan file cadangan di Linux dengan Transact-SQL
  • Menjalankan kueri untuk memverifikasi migrasi

Anda juga dapat membuat Grup Ketersediaan AlwaysOn SQL Server untuk memigrasikan database SQL Server dari Windows ke Linux. Lihat sql-server-linux-availability-group-cross-platform.

Prasyarat

Prasyarat berikut diperlukan untuk menyelesaikan tutorial ini:

Membuat cadangan di Windows

Ada beberapa cara untuk membuat file cadangan database di Windows. Langkah-langkah berikut menggunakan SQL Server Management Studio (SSMS).

  1. Mulai SQL Server Management Studio di komputer Windows Anda.

  2. Dalam dialog koneksi, masukkan localhost.

  3. Di Object Explorer, perluas Database.

  4. Klik kanan database target Anda, pilih Tugas, lalu klik Cadangkan....

    Use SSMS to create a backup file

  5. Dalam dialog Pencadangan Database, verifikasi bahwa Jeniscadangan penuh dan Cadangkan ke adalah Disk. Nama catatan dan lokasi file. Misalnya, database bernama YourDB di SQL Server 2016 memiliki jalur C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\YourDB.bakcadangan default .

  6. Pilih OK untuk mencadangkan database Anda.

Catatan

Opsi lain adalah menjalankan kueri Transact-SQL untuk membuat file cadangan. Perintah Transact-SQL berikut melakukan tindakan yang sama dengan langkah-langkah sebelumnya untuk database yang disebut 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

Menginstal shell Bash di Windows

Untuk memulihkan database, Anda harus terlebih dahulu mentransfer file cadangan dari komputer Windows ke komputer Linux target. Dalam tutorial ini, kita memindahkan file ke Linux dari shell Bash (jendela terminal) yang berjalan di Windows.

  1. Instal shell Bash di komputer Windows Anda yang mendukung perintah scp (salinan aman) dan ssh (masuk jarak jauh). Dua contoh meliputi:

  2. Buka sesi Bash di Windows.

Menyalin file cadangan ke Linux

  1. Di sesi Bash Anda, navigasikan ke direktori yang berisi file cadangan Anda. Contohnya:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup\'
    
  2. Gunakan perintah scp untuk mentransfer file ke komputer Linux target. Contoh berikut mentransfer YourDB.bak ke direktori beranda pengguna1 di server Linux dengan alamat IP 192.0.2.9:

    scp YourDB.bak user1@192.0.2.9:./
    

    scp command

Tip

Ada alternatif untuk menggunakan scp untuk transfer file. Salah satunya adalah menggunakan Samba untuk mengonfigurasi berbagi jaringan SMB antara Windows dan Linux. Untuk panduan tentang Ubuntu, lihat Cara Membuat Berbagi Jaringan Via Samba. Setelah ditetapkan, Anda dapat mengaksesnya sebagai berbagi file jaringan dari Windows, seperti \\machinenameorip\share.

Memindahkan file cadangan sebelum memulihkan

Pada titik ini, file cadangan ada di server Linux Anda di direktori beranda pengguna Anda. Sebelum memulihkan database ke SQL Server, Anda harus menempatkan cadangan dalam subdirektori /var/opt/mssql, karena ini dimiliki oleh pengguna mssql dan grup mssql. Jika Anda ingin mengubah lokasi cadangan default, lihat artikel Mengonfigurasi dengan mssql-conf .

  1. Dalam sesi Windows Bash yang sama, sambungkan dari jarak jauh ke komputer Linux target Anda dengan ssh. Contoh berikut terhubung ke komputer Linux 192.0.2.9 sebagai pengguna1.

    ssh user1@192.0.2.9
    

    Anda sekarang menjalankan perintah di server Linux jarak jauh.

  2. Masukkan mode pengguna super.

    sudo su
    
  3. Buat direktori cadangan baru. Parameter -p tidak melakukan apa pun jika direktori sudah ada.

    mkdir -p /var/opt/mssql/backup
    
  4. Pindahkan file cadangan ke direktori tersebut. Dalam contoh berikut, file cadangan berada di direktori beranda pengguna1. Ubah perintah agar sesuai dengan lokasi dan nama file file cadangan Anda.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Keluar dari mode pengguna super.

    exit
    

Memulihkan database Anda di Linux

Untuk memulihkan cadangan database, Anda dapat menggunakan perintah RESTORE DATABASE Transact-SQL (TQL).

Catatan

Langkah-langkah berikut menggunakan alat sqlcmd . Jika Anda belum menginstal Alat SQL Server, lihat Menginstal alat baris perintah SQL Server di Linux.

  1. Di terminal yang sama, luncurkan sqlcmd. Contoh berikut terhubung ke instans SQL Server lokal dengan pengguna SA . Masukkan kata sandi saat diminta, atau tentukan kata sandi dengan menambahkan parameter -P .

    sqlcmd -S localhost -U SA
    
  2. >1 Pada perintah , masukkan perintah RESTORE DATABASE berikut, tekan ENTER setelah setiap baris (Anda tidak dapat menyalin dan menempelkan seluruh perintah multibaris sekaligus). Ganti semua kemunculan YourDB dengan nama database Anda.

    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
    

    Anda akan mendapatkan pesan bahwa database berhasil dipulihkan.

    RESTORE DATABASE mungkin mengembalikan kesalahan seperti contoh berikut:

    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.).
    

    Dalam hal ini, database berisi file sekunder. Jika file-file ini tidak ditentukan dalam MOVE klausul RESTORE DATABASE, prosedur pemulihan akan mencoba membuatnya di jalur yang sama dengan server asli.

    Anda dapat mencantumkan semua file yang disertakan dalam cadangan:

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

    Anda harus mendapatkan daftar seperti yang di bawah ini (hanya mencantumkan dua kolom pertama):

    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      ..............
    

    Anda dapat menggunakan daftar ini untuk membuat MOVE klausa untuk file tambahan. Dalam contoh ini, RESTORE DATABASE adalah:

    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. Verifikasi pemulihan dengan mencantumkan semua database di server. Database yang dipulihkan harus dicantumkan.

    SELECT Name FROM sys.Databases
    GO
    
  4. Jalankan kueri lain pada database anda yang dimigrasikan. Perintah berikut mengalihkan konteks ke database YourDB dan memilih baris dari salah satu tabelnya.

    USE YourDB
    SELECT * FROM YourTable
    GO
    
  5. Ketika Anda selesai menggunakan sqlcmd, ketik exit.

  6. Setelah selesai bekerja di sesi ssh jarak jauh, ketik exit lagi.

Langkah selanjutnya

Dalam tutorial ini, Anda mempelajari cara mencadangkan database di Windows dan memindahkannya ke server Linux yang menjalankan SQL Server. Anda mempelajari cara untuk:

  • Menggunakan SSMS dan Transact-SQL untuk membuat file cadangan di Windows
  • Menginstal shell Bash di Windows
  • Gunakan scp untuk memindahkan file cadangan dari Windows ke Linux
  • Menggunakan ssh untuk terhubung dari jarak jauh ke komputer Linux Anda
  • Merelokasi file cadangan untuk mempersiapkan pemulihan
  • Menggunakan sqlcmd untuk menjalankan perintah Transact-SQL
  • Memulihkan cadangan database dengan perintah RESTORE DATABASE
  • Menjalankan kueri untuk memverifikasi migrasi

Selanjutnya, jelajahi skenario migrasi lain untuk SQL Server di Linux.