MIC

[Azure] Backup automatique de SQL Azure et restauration

Publié par ADA le

Si vous utilisez Azure, et les bases de données SQL, vous savez que vos données sont en sécurités, et que vous pouvez par exemple utiliser la géo-réplication pour vous assurer que même en cas de défaillance technique d’un datacenter tout entier, vos données soient toujours disponibles dans un autre datacenter (par exemple sur un autre continent), dans une base de données synchronisée avec celle en production.

Toutefois, cela ne vous met pas à l’abris d’une erreur humaine. Si vous effacez des données importantes, après synchronisation, vous n’aurez aucun moyen de les récupérer. Voici donc un moyen simple de faire des backup régulièrements pour pouvoir, en cas de pépin, restaurer votre base de données dans un état acceptable.

Si vous vous connectez au portail et que vous vous rendez dans la section des bases de données, vous pourrez voir dans la barre d’action en bas qu’il vous est possible d’exporter et d’importer des bases de données.

image

Regardons déjà ce que cela nous permet:

Export manuel

L’export permet de créer un fichier BACPAC à partir d’une base de données en production. Qu’est-ce qu’un BACPAC? Il s’agit d’un fichier contenant des informations décrivant le schéma d’une base de données, ainsi que son contenu.

Ce fichier est généralement utilisé dans deux cas de figure:

  • migrer une base de données d’un serveur vers un autre;
  • archiver une base de données (faire un backup).

Globalement, ce fichier nous permettra par la suite d’être importé pour créer une nouvelle base de données à l’identique sur le serveur de notre choix.

En sélectionnant la base qui nous intéresse et en cliquant sur Exporter, une fenêtre s’ouvre pour nous demander où stocker le fichier de backup. En fait, Azure attends de vous que vous lui indiquiez un conteneur d’un stockage Azure. Le fichier .bacpac va en effet être stocké dans un blob.

image (1)

Si ce n’est pas déjà fait, créez donc un compte. Sinon sélectionnez celui qui vous convient. Choisissez le conteneur (ici sqlbackup) et entrez les informations de connexion au SQL Server sur lequel se trouve la base de données. Confirmez, patientez quelques secondes, et vous pourrez finalement retrouver votre fichier sauvegardé dans votre compte de stockage:

image (2)

Import manuel via le portail

Pour réutiliser maintenant ce fichier via le portail, c’est très simple: on va utiliser le bouton d’import vue précédemment.

Il suffit alors de fournir le fichier BACPAC créé juste avant, donner un nom à la nouvelle base de données et choisir un serveur sur lequel déployer cette base de données.

image (3)

Validez, et vous pourrez voir votre nouvelle base de données dans le dashboard:

image (4)

Automatiser l’export

Il existe une API qui permet de faire des exports automatiquement. Vous pourrez trouver ici les sources de SQLDatabaseBackup. Cet outil fait appel à l’API de Azure pour créer un BACPAC d’un DB et le stocker dans un Blob. La procédure utilisée est celle recommandée sur MSDN (cf: Windows Azure SQL Database Backup and Restore / Recommended Backup Strategy):

Recommended Backup Strategy

Creating a database copy and then exporting a BACPAC file gives you a transactionally consistent backup file of the database that is portable and can be stored in Windows Azure storage or on-premises locations. This file then can be used for a rollback plan to protect against user or application errors, or in the event of loss of the entire region.

Bref, téléchargez les sources, compilez-les et ouvrez une console pour exécuter l’application en ligne de commande. Voici la liste des paramètres que vous pouvez utiliser:

    -server [SQL Database server (sans .database.windows.net)]
    -database [la db à backuper]
    -databasecopy (facultatif) [Le nom de la db temporaire, par défaut: database_copy]
    -user [nom d'utilisateur]
    -pwd [mot de passe]
    -storagename [nom du compte de stockage pour les blob]
    -storagekey [clé secrète du blob storage]
    -container (facultatif) [le conteneur de blob à utiliser, par défaut: sqlbackup]
    -datacenter [le datacenter dans lequel se trouve la db (et non pas le blob storage)]
        (westeurope | southeastasia | eastasia | northcentralus | northeurope | southcentralus | eastus | westus)
    -cleanup

Par exemple, ceci pourrait être une commande valide:

SQLDatabaseBackup.exeserver tfde53dsedatabase mydatabaseuser admindbpwd passwordstoragename storageaccountstoragekey yUfnVH+iIrO4sgS+Sr60PRzIMUQv5tFPpKYtr03QTKDxl9ZLr4Y7IkxPkQRJrarqnDX5mWCoA==container backupfolderdatacenter westeurope

Pour automatiser cette tâche, nous allons tout simplement utiliser un fichier Batch et le Task Scheduler de Windows.

Voici le script .bat qui va lancer l’exécution de l’outil: on ouvre une console, on se déplace jusqu’à l’exécutable et on lance la commande:

START cmd.exe /k « cd C:Userspathtotoolfolder & SQLDatabaseBackup.exe -server tfde53dse -database mydatabase -user admindb -pwd password -storagename storageaccount -storagekey yUfnVH+iIrO4sgS+Sr60PRzIMUQv5tFPpKYtr03QTKDxl9ZLr4Y7IkxPkQRJrarqnDX5mWCoA== -container backupfolder -datacenter westeurope« 

Ouvrez ensuite le Task Scheduler, et créez une nouvelle tâche (Create Basic Task): un wizard s’ouvre, qui vous permet de configurer la tâche:

  • Son nom
  • Sa récurrence (par exemple, tous les jours à midi)
  • Le type d’action: « Start a program »
    • Sélectionnez alors le fichier .bat que vous venez de créer.

Pour finir, allez dans les propriétés de cette tâche et faites les modifications suivantes:

  • Dans l’onglet Conditions, décochez Démarrer la tâche seulement si l’alimentation est branchée. En effet, ce qui compte c’est de demander à Azure de faire le boulot. Ensuite, peu importe que votre PC reste en ligne ou pas, et donc pas de raison de s’inquiéter d’une éventuelle panne de batterie.
  • Dans l’onglet Settings, cochez Run task as soon as possible after a sceduled start is missed. Avec cette option, si votre ordinateur était éteint au moment où un backup aurait dû avoir lieu, ou si pour toute autre raison une tâche n’a pas pu être lancée, le Task Scheduler exécutera la tâche dès que possible.

A priori, comme j’allume rarement mon laptop moins d’une fois par jour, je suis sûr grâce à cette config d’avoir un backup quotidien de mes bases de données!

Restaurer une DB avec SQL Server Management Studio

Pour finir, si vous n’avez pas envie de passer par le portail de Windows Azure pour restaurer un fichier BACPAC, vous pouvez également le faire depuis SQL Server Management Studio (version express, version complète d’évaluation, ou sur MSDN).

Connectez-vous à votre SQL Server Azure, et faites un clique droit sur le dossier Databases dans l’Object Explorer. Sélectionnez Import Data-tier Application…

image (5)

Suivez le wizard, qui vous permet également de récupérer le fichier BACPAC directement depuis un compte de Blob Storage. Choisissez les settings de la DB (édition Web 1Go pour les db standard de WebSite) et lancez l’opération. Et voilà votre nouvelle base de données créées sur le serveur!

Print Friendly, PDF & Email