En algunas situaciones debido al gran impacto de un cambio, especialmente en producción, es necesario realizar un backup de base de datos, pero ¿cómo se haría si esa base de datos se encuentra en un contenedor de Docker? bueno aquí te explico cómo.

Precondiciones y asunciones

Este post ha sido construido con las siguientes precondiciones y asunciones:

  • El lector cuenta con una base de datos de SQL Server 2019 en un contenedor de Docker.
    • Si no cuentas con una, ¡no te preocupes! puedes aprender hacerlo en este post, creado por mí, obvio.
  • El contenedor de Docker se encuentra alojado en una máquina con Windows 10 o superior.
  • Se tiene conocimiento de contraseña del usuario SA.

Preparando el terreno

Vamos a crear una pequeña base de datos en nuestra instancia de SQL Server 2019 dentro de Docker, si ya cuentas con una puedes saltarte este paso.

Conéctate a tu instancia de SQL Server 2019 y ejecuta el siguiente script:

CREATE DATABASE [GameLibrary];
GO

USE [GameLibrary];
GO

CREATE TABLE Titles (
	id int primary key identity,
	title nvarchar(60) not null,
	description nvarchar(500),
	available bit not null default 1
);
GO

INSERT INTO Titles (title, description, available) values
	(N'League of Legends', N'MOBA game', 1)
	,(N'Halo: Master Chief Collection', N'Halo <3', 1)
	,(N'Life is Strange', N'Save the bay or the bae', 1)
	,(N'My personal game', N'A game made by me xd', 0);
Creando base de datos de pruebas

Ya con esto, estamos listos para empezar 🙂

Empezamos

Vamos a crear una carpeta en la ruta D:\backups de nuestra máquina para guardar el backup, para ello abrimos PowerShell y ejecutamos el siguiente comando:

New-Item D:\backups -ItemType Directory -Force

Si deseas guardar el backup en otra ruta, cambia la parte resaltada por la ruta deseada.

Creando la carpeta para guardar los backups

Ahora vamos a definir unas cuantas variables para que la ejecución del comando final sea más concreta.

Primero vamos a definir una variable llamada $CONTAINER_NAME para indicar el nombre del contenedor donde se encuentra la instancia de SQL Server 2019, en mi caso se llama infallible_colden, esto lo hacemos con el siguiente comando:

$CONTAINER_NAME = 'infallible_colden'

Cambia la parte resaltada por el nombre de tu contenedor.

Ahora, vamos a definir una variable llamada $DATABASE_NAME para indicar el nombre de la base de datos a la cual queremos sacar el backup, en mi caso, es GameLibrary:

$DATABASE_NAME = 'GameLibrary'

Cambia la parte resaltada por el nombre de tu base de datos.

Luego, definiremos otra variable llamada $FILE_NAME para indicar cómo se debe llamar el archivo con extensión .bak donde quedará el backup, en mi caso, pondré GameLibrary.bak:

$FILE_NAME = 'GameLibrary.bak'

Cambia la parte resaltada por el nombre de archivo deseado. ¡No olvides la extensión .bak!

Esta última variable llamada $HOST_BACKUP_PATH es para indicar la ruta completa donde vamos a dejar nuestro backup en nuestra máquina local, es un poco especial la construcción, pero básicamente es la combinación de nuestra carpeta de backup que creamos más arriba contra la variable $FILE_NAME que ya hemos definido. El comando es el siguiente:

$HOST_BACKUP_PATH = "D:\backups\${FILE_NAME}"

Cambia la parte resaltada por la ruta a la carpeta de backup que creaste.

Realizar el backup

Listo, ya que tenemos todas esas variables definidas, necesitamos ejecutar el siguiente comando para realizar el backup:

docker exec -it "$CONTAINER_NAME" /opt/mssql-tools/bin/sqlcmd -b -V16 -S localhost -U SA -Q "BACKUP DATABASE [${DATABASE_NAME}] TO DISK = N'/var/opt/mssql/backups/${FILE_NAME}' with NOFORMAT, NOINIT, NAME = '${DATABASE_NAME}-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

El comando te va a solicitar la contraseña para el usuario SA, por favor escríbela y dale Enter para continuar:

Ingresar contraseña de usuario SA para proceder con backup

Finalmente, sólo necesitamos sacar el backup que está dentro del contenedor a nuestra máquina local, para ello ejecutamos el siguiente comando:

docker cp "${CONTAINER_NAME}:/var/opt/mssql/backups/${FILE_NAME}" "${HOST_BACKUP_PATH}"

¡y listo!, puedes ir a tu carpeta de backup a comprobar el archivo .bak creado 😉

Backup creado en nuestra máquina local

La ejecución completa de todos los comandos debería de ver más o menos así:

Ejecución completa de todos los comandos

Eso es todo por el momento, luego volveré creando un post complementario para poder restaurar un backup de SQL Server 2019 en una instancia que se encuentra dentro de un contenedor de Docker, así que quedamos pendientes.

Enlaces de interés

Te invito a visitar los siguientes enlaces, gran parte de la información mostrada en este post ha sido recopilada de estas.

One thought on “Realizar backup a base de datos SQL Server 2019 en contenedor de Docker

  1. Jorge dice:

    Gracias 🙂

Deja un comentario

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

Lo siento, debo validar que eres un humano *Time limit exceeded. Please complete the captcha once again.