lunes, 7 de mayo de 2018

Azure Tip: Backup base de datos SQL dentro de cuenta de almacenamiento

Hace un tiempo en un cliente que cuenta con una arquitectura 100 % maquinas virtuales en Microsoft Azure, tuvimos la necesidad de hacer Backup de las bases de datos SQL que se alojaban en ellas.
Un primer acercamiento fue hacer el Backup y dejar los archivos en el mismo Servidor, pero el metodo no servia debido a que si algo le pasaba a la maquina en cuestion el Backup no era posible de restaurar (no al menos de una manera rapida)

La version utilizada de SQL Server fue la 2014 y para hacer el procedimiento tuvimos que configurar lo siguiente:

* Una cuenta de almacenamiento dentro de la misma region donde se encuentra el Servidor

* Un plan de mantenimiento dentro de SQL Server con la configuracion de las bases de datos a reguardar, el horario para el Backup y el destino del mismo

* Una cuenta de automatizacion para borrar cada 15 dias los Backups viejos, de esta manera no mantenemos Backups no necesarios y ahorramos costos en el almacenamiento.


Definicion del plan de mantenimiento dentro de SQL Server:

















En este plan se indica que haga un tipo de Backup full a una URL (que es la URL de la cuenta de almacenamiento con el path a la ubicacion de Backup) y luego se indica que utilice una compresion por default.

Luego si vamos a la configuracion del job dentro de SQL Server Agent podremos ver en detalle la configuracion del dia y horario en el cual se ejecuta la tarea:





























Podemos observar que los Backups se estan ejecutando correctamente a la hora deseada:












Ahora debemos asegurarnos que solo queden disponibles en la cuenta de almacenamiento los ultimos 15 dias (Esta cantidad de dias obviamente esta determinada por el negocio), para esto vamos a necesitar ejecutar un script dentro de cuentas de automatizacion de Microsoft Azure:












El contenido del script que borra los archivos con mas de 15 dias es este:


$CleanupTime = [DateTime]::UtcNow.AddHours(-360)
$context = New-AzureStorageContext -StorageAccountName grupontg -StorageAccountKey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Get-AzureStorageBlob -Container "backups" -Context $context | Where-Object { $_.LastModified.UtcDateTime -lt $CleanupTime -and $_.BlobType -eq "PageBlob" -and $_.Name -like "*.bak"} |Remove-AzureStorageBlob

(*) Donde xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx es nuestra account key para acceder a la cuenta de almacenamiento


Con esto tendremos un Backup altamente disponible y que se rota cada 15 (o los dia que eligamos)
Podremos ver el status de la ejecucion de los jobs omo parte del dashboard de cuentas de automatizacion:

















Espero que les sirva :)

No hay comentarios.:

Publicar un comentario