Migrez une base de données SQL Server de Windows vers Linux à l’aide de la sauvegarde et de la restauration
S’applique à : SQL Server - Linux
La fonctionnalité de sauvegarde et de restauration de SQL Server est la méthode recommandée pour migrer une base de données de SQL Server sur Windows vers SQL Server sur Linux. Dans ce didacticiel, vous découvrirez les étapes requises pour déplacer une base de données vers Linux avec des techniques de sauvegarde et de restauration.
- Créer un fichier de sauvegarde sur Windows avec SSMS
- Installer un interpréteur de commandes Bash sur Windows
- Déplacer le fichier de sauvegarde vers Linux à partir de l’interpréteur de commandes Bash
- Restaurer le fichier de sauvegarde sur Linux avec Transact-SQL
- Exécuter une requête pour vérifier la migration
Vous pouvez également créer un groupe de disponibilité Always On SQL Server pour migrer une base de données SQL Server de Windows vers Linux. Consultez sql-server-linux-availability-group-cross-platform.
Conditions préalables requises
Pour exécuter ce didacticiel, vous devez réunir les conditions préalables suivantes :
Sur une machine Windows :
- SQL Server installé.
- SQL Server Management Studio installé.
- Base de données cible à migrer.
Sur une machine Linux :
- SQL Server (Red Hat Enterprise Linux, SUSE Linux Enterprise Server ou Ubuntu) avec des outils de ligne de commande.
Créer une sauvegarde sur Windows
Il existe plusieurs façons de créer un fichier de sauvegarde d’une base de données sur Windows. Les étapes suivantes utilisent SQL Server Management Studio (SSMS).
Démarrez SQL Server Management Studio sur votre machine Windows.
Dans la boîte de dialogue connexion, entrez localhost.
Dans l’Explorateur d’objets, développez Bases de données.
Cliquez avec le bouton de droite sur la base de données cible, sélectionnez Tâches, puis sélectionner Sauvegarder....
Dans la boîte de dialogue Sauvegarder la base de données, vérifiez que Type de sauvegarde est défini sur Complet et Sauvegarder sur sur Disque. Notez le nom et l’emplacement du fichier. Par exemple, une base de données nommée
YourDB
sur SQL Server 2019 (15.x) a un chemin de sauvegarde par défaut deC:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak
.Sélectionnez OK pour sauvegarder votre base de données.
Une autre option consiste à exécuter une requête Transact-SQL pour créer le fichier de sauvegarde. La commande Transact-SQL suivante effectue les mêmes actions que les étapes précédentes pour une base de données appelée 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
Installer un interpréteur de commandes Bash sur Windows
Pour restaurer la base de données, vous devez d’abord transférer le fichier de sauvegarde de la machine Windows vers la machine Linux cible. Dans ce didacticiel, nous allons déplacer le fichier vers Linux à partir d’un interpréteur de commandes Bash (fenêtre du terminal) exécuté sur Windows.
Installez un interpréteur de commandes Bash sur votre machine Windows qui prend en charge les commandes scp (copier sécurisée) et ssh (ouverture de session à distance). Les deux exemples comprennent :
- Le Sous-système Windows pour Linux (Windows 10)
- L’interpréteur de commandes Git Bash (https://git-scm.com/downloads)
Ouvrez une session Bash sur Windows.
Copier le fichier de sauvegarde sur Linux
Dans votre session Bash, accédez au répertoire contenant votre fichier de sauvegarde. Par exemple :
cd 'C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\'
Utilisez la commande scp pour transférer le fichier vers la machine Linux cible. L’exemple suivant transfère
YourDB.bak
dans le répertoire de départ deuser1
sur le serveur Linux avec l’adresse IP 192.0.2.9 :scp YourDB.bak user1@192.0.2.9:./
Conseil
Il existe des alternatives à l’utilisation de scp pour le transfert de fichiers. La première consiste à utiliser Samba pour configurer un partage réseau SMB entre Windows et Linux. Pour obtenir une procédure pas à pas sur Ubuntu, consultez Samba en tant que serveur de fichiers. Une fois la connexion établie, vous pouvez y accéder en tant que partage de fichiers réseau à partir de Windows, par exemple le \\machinenameorip\share
.
Déplacer le fichier de sauvegarde avant la restauration
À ce stade, le fichier de sauvegarde se trouve sur votre serveur Linux dans le répertoire de départ de votre utilisateur. Avant de restaurer la base de données vers SQL Server, vous devez placer la sauvegarde dans un sous-répertoire de /var/opt/mssql
car elle appartient à l’utilisateur mssql
et au groupe mssql
. Si vous souhaitez changer l’emplacement de sauvegarde par défaut, consultez l’article Configurer avec mssql-conf.
Dans la même session Bash Windows, connectez-vous à distance à votre machine Linux cible avec ssh. L’exemple suivant se connecte à la machine Linux
192.0.2.9
en tant qu’utilisateuruser1
.ssh user1@192.0.2.9
Vous exécutez maintenant des commandes sur le serveur Linux distant.
Entrez en mode super utilisateur.
sudo su
Créez un nouveau répertoire de sauvegarde. Le paramètre
-p
ne fait rien si le répertoire existe déjà.mkdir -p /var/opt/mssql/backup
Déplacez le fichier de sauvegarde vers ce répertoire. Dans l’exemple suivant, le fichier de sauvegarde se trouve dans le répertoire de départ de
user1
. Modifiez la commande pour qu’elle corresponde à l’emplacement et au nom de fichier de votre fichier de sauvegarde.mv /home/user1/YourDB.bak /var/opt/mssql/backup/
Quittez le mode super utilisateur.
exit
Restaurer votre base de données sur Linux
Pour restaurer la sauvegarde de la base de données, vous pouvez utiliser la commande RESTORE DATABASE
Transact-SQL (TQL).
Les étapes suivantes utilisent l'outil sqlcmd. Si vous n'avez pas installé les outils SQL Server, voir Installer les outils de ligne de commande SQL Server sqlcmd et bcp sous Linux.
Dans le même terminal, lancez sqlcmd. L’exemple suivant se connecte à l’instance de SQL Server locale avec l’utilisateur
SA
. Entrez le mot de passe lorsque vous y êtes invité, ou spécifiez le mot de passe en ajoutant le paramètre-P
.sqlcmd -S localhost -U SA
À l'invite
>1
, entrez la commandeRESTORE DATABASE
suivante, en appuyant sur ENTRÉE après chaque ligne (vous ne pouvez pas copier et coller la totalité de la commande sur plusieurs lignes à la fois). Remplacez toutes les occurrences deYourDB
par le nom de votre base de données.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
Vous recevez un message indiquant que la base de données a été restaurée correctement.
RESTORE DATABASE
peut retourner une erreur comme dans l’exemple suivant :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.).
Dans ce cas, la base de données contient des fichiers secondaires. Si ces fichiers ne sont pas spécifiés dans la clause
MOVE
deRESTORE DATABASE
, la procédure de restauration essaie de les créer dans le même chemin d’accès que le serveur d’origine.Vous pouvez répertorier tous les fichiers inclus dans la sauvegarde :
RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/YourDB.bak'; GO
Vous devriez obtenir une liste comme celle de l'exemple suivant (ne reprenant que les deux premières colonnes) :
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 ..............
Vous pouvez utiliser cette liste pour créer des clauses
MOVE
pour les fichiers supplémentaires. Dans cet exemple,RESTORE DATABASE
est :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
Vérifiez la restauration en répertoriant toutes les bases de données sur le serveur. La base de données restaurée doit être répertoriée.
SELECT Name FROM sys.Databases GO
Exécutez d’autres requêtes sur votre base de données migrée. La commande suivante bascule le contexte dans la base de données
YourDB
et sélectionne les lignes de l’une de ses tables.USE YourDB SELECT * FROM YourTable GO
Quand vous avez fini d'utiliser sqlcmd, tapez
exit
.Une fois que vous avez fini de travailler dans la session ssh à distance, tapez à nouveau
exit
.
Étape suivante
Dans ce didacticiel, vous avez appris à sauvegarder une base de données sur Windows et à la déplacer vers un serveur Linux exécutant SQL Server. Vous avez appris à :
- utiliser SSMS et Transact-SQL pour créer un fichier de sauvegarde sur Windows
- Installer un interpréteur de commandes Bash sur Windows
- utiliser scp pour déplacer des fichiers de sauvegarde de Windows vers Linux
- utiliser ssh pour se connecter à distance à votre machine Linux
- déplacer le fichier de sauvegarde pour préparer la restauration
- utiliser sqlcmd pour exécuter les commandes Transact-SQL
- restaurer la sauvegarde de base de données avec la commande
RESTORE DATABASE
- exécuter une requête pour vérifier la migration
Explorez ensuite d’autres scénarios de migration pour SQL Server sur Linux.