Backup automático en SQL Server 2017 Express Edition en Linux

Vamos a crear backups de forma automática de nuestras bases de datos SQL Server 2017 en Linux.

Usaremos un script que lanzaremos desde el crontab. Así de sencillo.

Preparación del script de backup

El script de backup se compone de un lanzador, por ejemplo Launch_Backup.sh y de un script sql para el backup, por ejemplo, Backup.sql

Preparación del lanzador

Éste lanzador no es estrictamente necesario, vamos a ver que no se trata más que de la invocación a «sqlcmd» para la ejecución del script de sql de backup.

En esta entrada creamos un archivo llamado Launch_Backup.sh con el siguiente contenido:


#!/bin/bash
sqlcmd -S localhost -i Backup.sql -U BackupUser -P BackupPassword

Como puede verse, se necesitan las credenciales de conexión con la instancia de base de datos, en el ejemplo, BackupUser y su contraseña BackupPassword.

Puedes crear, si así lo deseas, un usuario especializado en backup.

Creación de un usuario (Login) en SQL Server para realizar backups

Podemos crear un usuario especializado para hacer backups. Por supuesto, valdrá un usuario con el rol de «sysadmin» otorgado, pero podemos realizar uno específico para las tareas de respaldo.

Para crear un login personalizado, hay que crear dicho login y darle rol de «db_backupoperator» en cada una de las bases de datos de las que necesitamos hacer backup.

Preparación del script sql

Ahora crearemos el script de backup, Backup.sql.

Como se puede ver más adelante, es un script bastante completo, donde podemos especificar la ruta de los backup, el nombre del archivo/dispositivo de backup, los días de retención del backup, etc.


DECLARE @name VARCHAR(50) -- database name
DECLARE @path VARCHAR(256) -- path for backup files
DECLARE @fileName VARCHAR(256) -- filename for backup
DECLARE @fileDate VARCHAR(20) -- used for file name

-- specify database backup directory
SET @path = '\\Backups\'

-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE(CONVERT(VARCHAR(20),GETDATE(),108),':','')

DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN ('tempdb') -- exclude these databases

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + '_' + @fileDate + '_FULL' + '.BAK'
BACKUP DATABASE @name TO DISK = @fileName WITH RETAINDAYS = 40
FETCH NEXT FROM db_cursor INTO @name
END

CLOSE db_cursor
DEALLOCATE db_cursor

Cualquier duda sobre el script podéis preguntarla en los comentarios.

Programación en crontab

Nada particular en este apartado. Abre el crontab como habitualmente con «crontab -e» y añade la ejecución del backup que hemos preparado.


10 7 * * * /paht/to/LaunchBackup.sh

En este caso, el backup se ejecutará todos los días a las 07:10.

4 opiniones en “Backup automático en SQL Server 2017 Express Edition en Linux”

    1. Hola Mercedes,

      En el ejemplo usamos 2 scripts, uno el script de SQL «Backup.sql» y otro BASH «Launch_Backup.sh» que solo vale para lanzar dicho backup.

      El primero contiene las sentencias sql, y el segundo es solo la linea de sqlcmd que lanza el script de backup contra la instancia de base de datos desde la linea de comandos del sistema.

      Puedes revisar el artículo de nuevo, donde explicamos cada apartado.

      Para probar el script de sql puedes hacerlo desde el SQL Management Studio o la herramienta que utilices normalmente para conectar a la instancia, y luego crear el lanzador para automatizarlo, si así te resulta más sencillo.

  1. Hola disculpa el script esta super, una consulta como puedo hacer el backup de log tendria que crear otro script y agregar algo asi
    BEGIN
    SET @fileName = @path + @name + ‘_’ + @fileDate + ‘.TRN’
    BACKUP LOG @name TO DISK = @fileName
    FETCH NEXT FROM db_cursor INTO @name
    END

    ???

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *