Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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 makinesinde:
- SQL Server yüklendi.
- SQL Server Management Studio yüklendi.
- Taşınacak veritabanı.
Linux makinesinde:
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Serverveya Ubuntu) komut satırı araçlarıyla.
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.
Windows makinenizde SQL Server Management Studio başlatın.
Bağlantı iletişim kutusunda localhostgirin.
Nesne Gezgini'nde Veritabanlarıgenişletin.
Hedef veritabanınıza sağ tıklayın, Görevler'i seçin ve ardından Yedekle...seçin.
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)
YourDBadlı bir veritabanının varsayılan yedekleme yoluC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.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.
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:
- Linux için Windows Alt Sistemi (Windows 10)
- Git bash kabuğu (https://git-scm.com/downloads)
Windows'da bir bash oturumu açın.
Yedekleme dosyasını Linux'a kopyalama
Bash oturumunuzda yedekleme dosyanızı içeren dizine gidin. Örneğin:
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'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.
Aynı Windows bash oturumunda, sshile hedef Linux makinenize uzaktan bağlanın. Aşağıdaki örnek, kullanıcı
192.168.2.9olarak Linux makineuser1'a bağlanır.ssh user1@192.168.2.9Şimdi uzak Linux sunucusunda komutlar çalıştırıyorsunuz.
Süper kullanıcı moduna girin.
sudo suYeni bir yedekleme dizini oluşturun. dizin zaten varsa
-pparametresi hiçbir şey yapmaz.mkdir -p /var/opt/mssql/backupYedekleme 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/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.
Aynı terminalde sqlcmdbaşlatın. Aşağıdaki örnek,
sahesabıyla yerel SQL Server örneğine bağlanır. İstendiğinde parolayı girin veya-Pparametresini ekleyerek parolayı belirtin.sqlcmd -S localhost -U sa>1isteminde, her satırdan sonra ENTER tuşuna basarak aşağıdakiRESTORE DATABASEkomutunu 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'; GOVeritabanının başarıyla geri yükleneceğine ilişkin bir ileti almalısınız.
RESTORE DATABASEaş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 DATABASEyan 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'; GOAş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
MOVEcümleleri oluşturmak üzere bu listeyi kullanabilirsiniz. Bu örnekteRESTORE 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'; GOSunucudaki tüm veritabanlarını listeleyerek geri yüklemeyi doğrulayın. Geri yüklenen veritabanı listelenmelidir.
SELECT name FROM sys.databases; GOGeçirilen veritabanınızda diğer sorguları çalıştırın. Aşağıdaki komut bağlamı
YourDBveritabanına geçirir ve tablolarından birinden satırları seçer.USE YourDB; SELECT * FROM YourTable; GOsqlcmdkullanmayı bitirdiğinizde
exityazın.Uzak ssh oturumunda çalışmayı bitirdiğinizde yeniden
exityazı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 DATABASEkomutuyla 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.