Aracılığıyla paylaş


Yedekleme ve geri yükleme kullanarak SQL Server veritabanını Windows'tan Linux'a geçirme

Şunlar için geçerlidir:Linux üzerinde SQL Server

SQL Server'ın yedekleme ve geri yükleme özelliği, bir veritabanını Windows'ta SQL Server'dan Linux üzerinde SQL Server'a geçirmenin önerilen yoludur. Bu öğreticide, yedekleme ve geri yükleme teknikleriyle veritabanını Linux'a taşımak için gereken adımları adım adım inceleyeceksiniz.

  • SSMS ile Windows'ta yedekleme dosyası oluşturma
  • Windows'da bash kabuğu yükleyin
  • Yedekleme dosyasını bash kabuğundan Linux'a taşıma
  • Transact-SQL ile Linux'ta yedekleme dosyasını geri yükleme
  • Geçişi doğrulamak için sorgu çalıştırma

Sql Server veritabanını Windows'tan Linux'a geçirmek için bir SQL Server Always On Kullanılabilirlik Grubu da oluşturabilirsiniz. Bkz. sql-server-linux-availability-group-cross-platform.

Önkoşullar

Bu öğreticiyi tamamlamak için aşağıdaki önkoşullar gereklidir:

Windows'ta yedekleme oluşturma

Windows'da veritabanının yedek dosyasını oluşturmanın çeşitli yolları vardır. Aşağıdaki adımlarda SQL Server Management Studio (SSMS) kullanılır.

  1. Windows makinenizde SQL Server Management Studio başlatın.

  2. Bağlantı iletişim kutusunda localhostgirin.

  3. Nesne Gezgini'nde Veritabanlarıgenişletin.

  4. Hedef veritabanınıza sağ tıklayın, Görevler'i seçin ve ardından Yedekle...seçin.

    Yedekleme dosyası oluşturmak için SSMS kullanmanın ekran görüntüsü.

  5. Veritabanını Yedekle iletişim kutusunda Yedekleme türü seçeneğinin Tam ve Yedekle seçeneğinin Disk olduğunu doğrulayın. Dosyanın adını ve konumunu not edin. Örneğin, SQL Server 2019'da (15.x) YourDB adlı bir veritabanının varsayılan yedekleme yolu C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

  6. Veritabanınızı yedeklemek için Tamam'ı seçin.

Bir diğer seçenek de yedekleme dosyasını oluşturmak için bir Transact-SQL sorgusu çalıştırmaktır. Aşağıdaki Transact-SQL komutu, YourDBadlı bir veritabanı için önceki adımlarla aynı eylemleri gerçekleştirir:

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

Windows'da bash kabuğu yükleyin

Veritabanını geri yüklemek için önce yedekleme dosyasını Windows makinesinden hedef Linux makinesine aktarmanız gerekir. Bu öğreticide, dosyayı Windows üzerinde çalışan bir bash kabuğundan (terminal penceresi) Linux'a taşıyacağız.

  1. Windows makinenize scp (güvenli kopya) ve ssh (uzaktan oturum açma) komutlarını destekleyen bir bash kabuğu yükleyin. İki örnek şunlardır:

  2. Windows'da bir bash oturumu açın.

Yedekleme dosyasını Linux'a kopyalama

  1. Bash oturumunuzda yedekleme dosyanızı içeren dizine gidin. Örneğin:

    cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
    
  2. dosyayı hedef Linux makinesine aktarmak için scp komutunu kullanın. Aşağıdaki örnek, YourDB.bakuser1IP adresiyle Linux sunucusundaki giriş dizinine aktarır:

    scp YourDB.bak user1@192.168.2.9:./
    

    Beklenen çıkış şu şekildedir:

    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
    

Bahşiş

Dosya aktarımı için scp kullanmanın alternatifleri vardır. Bunlardan biri, Windows ve Linux arasında SMB ağ paylaşımı yapılandırmak için Samba kullanmaktır. Ubuntu'da izlenecek yol için bkz. dosya sunucusu olarak Samba. Oluşturulduktan sonra, Windows'tan \\machinenameorip\sharegibi bir ağ dosya paylaşımı olarak ona erişebilirsiniz.

Geri yüklemeden önce yedekleme dosyasını taşıma

Bu noktada yedekleme dosyası, kullanıcınızın giriş dizinindeki Linux sunucunuzdadır. Veritabanını SQL Server'a geri yüklemeden önce, bu dizin kullanıcıya /var/opt/mssql ve gruba mssqlait olduğundan yedeklemeyi alt dizinine mssqlyerleştirmeniz gerekir. Varsayılan yedekleme konumunu değiştirmek istiyorsanız mssql-conf ile yapılandırma makalesine bakın.

  1. Aynı Windows bash oturumunda, sshile hedef Linux makinenize uzaktan bağlanın. Aşağıdaki örnek, kullanıcı 192.168.2.9olarak Linux makine user1'a bağlanır.

    ssh user1@192.168.2.9
    

    Şimdi uzak Linux sunucusunda komutlar çalıştırıyorsunuz.

  2. Süper kullanıcı moduna girin.

    sudo su
    
  3. Yeni bir yedekleme dizini oluşturun. dizin zaten varsa -p parametresi hiçbir şey yapmaz.

    mkdir -p /var/opt/mssql/backup
    
  4. Yedekleme dosyasını bu dizine taşıyın. Aşağıdaki örnekte, yedekleme dosyası user1giriş dizininde bulunur. Komutunu yedekleme dosyanızın konumu ve dosya adıyla eşleşecek şekilde değiştirin.

    mv /home/user1/YourDB.bak /var/opt/mssql/backup/
    
  5. Süper kullanıcı modundan çıkın.

    exit
    

Linux'ta veritabanınızı geri yükleme

Veritabanı yedeklemesini geri yüklemek için RESTORE DATABASE Transact-SQL (TQL) komutunu kullanabilirsiniz.

Aşağıdaki adımlarda sqlcmd aracı kullanılır. SQL Server araçlarını yüklemediyseniz bkz. Linux'ta sqlcmd ve bcp SQL Server komut satırı araçlarını yükleme.

  1. Aynı terminalde sqlcmdbaşlatın. Aşağıdaki örnek, sa hesabıyla yerel SQL Server örneğine bağlanır. İstendiğinde parolayı girin veya -P parametresini ekleyerek parolayı belirtin.

    sqlcmd -S localhost -U sa
    
  2. >1 isteminde, her satırdan sonra ENTER tuşuna basarak aşağıdaki RESTORE DATABASE komutunu girin (çok satırlı komutun tamamını aynı anda kopyalayıp yapıştıramazsınız). YourDB'ın tüm oluşumlarını veritabanınızın ismiyle değiştirin.

    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
    

    Veritabanının başarıyla geri yükleneceğine ilişkin bir ileti almalısınız.

    RESTORE DATABASE aşağıdaki örneğe benzer bir hata döndürebilir:

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

    Bu durumda veritabanı ikincil dosyalar içerir. Bu dosyalar MOVERESTORE DATABASE yan tümcesinde belirtilmezse, geri yükleme yordamı bunları özgün sunucuyla aynı yolda oluşturmaya çalışır.

    Yedeklemeye dahil olan tüm dosyaları listeleyebilirsiniz:

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

    Aşağıdaki örneğe benzer bir liste almalısınız (yalnızca ilk iki sütunu listelemelisiniz):

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

    Ek dosyalar için MOVE cümleleri oluşturmak üzere bu listeyi kullanabilirsiniz. Bu örnekte RESTORE DATABASE şu şekildedir:

    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. Sunucudaki tüm veritabanlarını listeleyerek geri yüklemeyi doğrulayın. Geri yüklenen veritabanı listelenmelidir.

    SELECT name
    FROM sys.databases;
    GO
    
  4. Geçirilen veritabanınızda diğer sorguları çalıştırın. Aşağıdaki komut bağlamı YourDB veritabanına geçirir ve tablolarından birinden satırları seçer.

    USE YourDB;
    
    SELECT *
    FROM YourTable;
    GO
    
  5. sqlcmdkullanmayı bitirdiğinizde exityazın.

  6. Uzak ssh oturumunda çalışmayı bitirdiğinizde yeniden exit yazın.

Sonraki adım

Bu öğreticide, Windows'ta bir veritabanını yedeklemeyi ve SQL Server çalıştıran bir Linux sunucusuna taşımayı öğrendiniz. Nasıl yapılacağını öğrendinsiniz:

  • Windows'da yedekleme dosyası oluşturmak için SSMS ve Transact-SQL kullanma
  • Windows'da Bash yükleme
  • Yedekleme dosyalarını Windows'tan Linux'a taşımak için scp kullanma
  • Linux makinenize uzaktan bağlanmak için ssh kullanma
  • Geri yüklemeye hazırlanmak için yedekleme dosyasını yeniden yer değiştirme
  • Transact-SQL komutlarını çalıştırmak için sqlcmd kullanma
  • RESTORE DATABASE komutuyla veritabanı yedeklemesini geri yükleme
  • Geçişi doğrulamak için sorguyu çalıştırın

Ardından, Linux üzerinde SQL Server için diğer geçiş senaryolarını keşfedin.