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

Berlaku untuk:SQL Server di 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 menelusuri langkah-langkah yang diperlukan untuk memindahkan database ke Linux dengan teknik pencadangan dan pemulihan.

  • Buat file cadangan di Windows dengan SQL Server Management Studio (SSMS)
  • Menginstal shell Bash di Windows
  • Memindahkan file cadangan ke Linux dari shell Bash
  • Pulihkan file cadangan di Linux dengan Transact-SQL (T-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 Konfigurasi grup ketersediaan Always On SQL Server di Windows dan Linux (lintas 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 pilih Cadangkan....

    Cuplikan layar menggunakan SSMS untuk membuat file cadangan.

  5. Di dialog Cadangan Database , pastikan opsi tipe Backup adalah Full, dan opsi Back up to adalah Disk. Catat nama dan lokasi file. Misalnya, database bernama YourDB di SQL Server 2019 (15.x) memiliki jalur cadangan default C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Pilih OK untuk mencadangkan database Anda.

Opsi lain adalah menjalankan query T-SQL untuk membuat file cadangan. Perintah T-SQL berikut melakukan tindakan yang sama seperti langkah sebelumnya untuk database bernama YourDB:

BACKUP DATABASE [YourDB]
    TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL15.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. Dalam sesi Bash Anda, navigasikan ke direktori yang berisi file cadangan Anda. Contohnya:

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

    scp YourDB.bak user1@192.168.2.9:./
    

    Berikut adalah output yang diharapkan:

    The authenticity of host '192.168.2.9 (192.168.2.9)' can't be established.
    ECDSA key fingerprint is SHA256: aB1cD2eF-3gH4iJ5kL6-mN7oP8qR=
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added '192.168.2.9' (ECDSA) to the list of known hosts.
    Password:
    YourDB.bak                                      100% 8960KB 7.4MB/s 00:01
    

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 Samba sebagai server berkas. 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/mssqlkarena direktori ini dimiliki oleh pengguna mssql dan grup mssql. Jika Anda ingin mengubah lokasi cadangan default, lihat artikel Mengonfigurasi dengan mssql-conf .

  1. Dalam sesi Bash Windows yang sama, hubungkan secara jarak jauh ke mesin Linux target Anda dengan ssh. Contoh berikut terhubung ke komputer 192.168.2.9 Linux sebagai pengguna user1.

    ssh user1@192.168.2.9
    

    Anda sekarang menjalankan perintah di server Linux jarak jauh.

  2. Masuk ke mode superuser.

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

    exit
    

Memulihkan database Anda di Linux

Untuk mengembalikan cadangan basis data, Anda dapat menggunakan RESTORE DATABASE perintah T-SQL.

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

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

    sqlcmd -S localhost -U sa
    
  2. >1 Pada perintah , masukkan perintah berikutRESTORE DATABASE, 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 seharusnya mendapatkan pesan bahwa database telah berhasil dipulihkan.

    RESTORE DATABASE mungkin mengembalikan kesalahan seperti contoh berikut:

    File 'YourDB_Product' cannot be restored to 'Z:\Microsoft SQL Server\MSSQL15.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\MSSQL15.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 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 seharusnya mendapatkan daftar seperti contoh berikut (hanya mencantumkan dua kolom pertama):

    LogicalName         PhysicalName                                                                 ..............
    ------------------- ---------------------------------------------------------------------------- ---------------
    YourDB              Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB.mdf          ..............
    YourDB_Product      Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Product.ndf  ..............
    YourDB_Customer     Z:\Microsoft SQL Server\MSSQL15.GLOBAL\MSSQL\Data\YourDB\YourDB_Customer.ndf ..............
    YourDB_Log          Z:\Microsoft SQL Server\MSSQL15.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 YourDB database dan memilih baris dari salah satu tabelnya.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. Setelah 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:

  • Gunakan SSMS dan T-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
  • Digunakan sqlcmd untuk menjalankan perintah T-SQL
  • Memulihkan cadangan database dengan RESTORE DATABASE perintah
  • Menjalankan kueri untuk memverifikasi migrasi

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