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 :

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

  1. Démarrez SQL Server Management Studio sur votre machine Windows.

  2. Dans la boîte de dialogue connexion, entrez localhost.

  3. Dans l’Explorateur d’objets, développez Bases de données.

  4. Cliquez avec le bouton de droite sur la base de données cible, sélectionnez Tâches, puis sélectionner Sauvegarder....

    Capture d'écran de l'utilisation de SSMS pour créer un fichier de sauvegarde.

  5. 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 de C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Backup\YourDB.bak.

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

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

  2. Ouvrez une session Bash sur Windows.

Copier le fichier de sauvegarde sur Linux

  1. 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\'
    
  2. 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 de user1 sur le serveur Linux avec l’adresse IP 192.0.2.9 :

    scp YourDB.bak user1@192.0.2.9:./
    

    Capture d’écran de la commande scp.

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.

  1. 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’utilisateur user1.

    ssh user1@192.0.2.9
    

    Vous exécutez maintenant des commandes sur le serveur Linux distant.

  2. Entrez en mode super utilisateur.

    sudo su
    
  3. 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
    
  4. 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/
    
  5. 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.

  1. 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
    
  2. À l'invite >1, entrez la commande RESTORE 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 de YourDB 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 de RESTORE 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
    
  3. 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
    
  4. 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
    
  5. Quand vous avez fini d'utiliser sqlcmd, tapez exit.

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