Crear copias de seguridad de bases de datos de SQL Server en un segmento de Cloud Storage

En este tutorial se describe cómo crear una copia de seguridad de una base de datos de Microsoft SQL Server 2022 directamente en un bucket de Cloud Storage y restaurarla más adelante. La función nativa de copias de seguridad de SQL Server, introducida en SQL Server 2022, ofrece una estrategia sencilla y rentable para la recuperación tras desastres y la migración de datos basadas en la nube.

La función nativa de copia de seguridad de SQL Server utiliza los comandos BACKUP TO URL y RESTORE FROM URL, que admiten el almacenamiento de objetos compatible con S3, incluido Cloud Storage. De esta forma, no es necesario usar almacenamiento local intermedio, lo que simplifica el flujo de trabajo de las copias de seguridad y reduce la sobrecarga operativa.

Este tutorial está dirigido a administradores e ingenieros de bases de datos.

Crea un segmento de Cloud Storage

Puedes crear un segmento de Cloud Storage mediante la consola o con el comando gcloud storage. Google Cloud

Para crear un segmento de Cloud Storage con el comando gcloud storage, sigue estos pasos.

  1. Selecciona tu proyecto de Google Cloud .

    gcloud config set project PROJECT_ID
    
  2. Crea el segmento. Para crear el segmento, ejecuta el comando gcloud storage buckets create de la siguiente manera.

      gcloud storage buckets create gs://BUCKET_NAME --location=BUCKET_LOCATION
    

    Haz los cambios siguientes:

  • BUCKET_NAME: con un nombre único para tu contenedor.
  • BUCKET_LOCATION: con la ubicación de tu contenedor.

Configurar la interoperabilidad de S3 y crear una clave de acceso

Para permitir que SQL Server se comunique con Cloud Storage mediante el protocolo S3, debes habilitar la interoperabilidad y generar una clave de acceso siguiendo estos pasos:

  1. Ve a la configuración de Cloud Storage en la Google Cloud consola.

    Ir a la configuración de Cloud Storage

  2. Selecciona la pestaña Interoperabilidad.

  3. En Claves de acceso de tu cuenta de usuario, haz clic en Crear una clave.

    Claves de acceso de cubos

  4. Guarda de forma segura la clave de acceso y el secreto generados. Los necesitarás en el siguiente paso.

En los entornos de producción, te recomendamos que uses una clave de código de autenticación de mensajes basado en hash (HMAC) de cuenta de servicio para mejorar la seguridad y la gestión.

Añadir credenciales a SQL Server

Para permitir que SQL Server se autentique con tu segmento de Cloud Storage, debes crear un objeto de credencial en SQL Server para almacenar la clave de acceso y el secreto de Cloud Storage. Para ello, ejecuta el siguiente comando de T-SQL en SQL Server Management Studio (SSMS).

CREATE CREDENTIAL CREDENTIAL_NAME
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'ACCESS_KEY:SECRET';

Haz los cambios siguientes:

  • CREDENTIAL_NAME: con un nombre para tus credenciales.
  • ACCESS_KEY: con la clave de acceso que has creado en la sección anterior.
  • SECRET: con el secreto que has creado en la sección anterior.

IDENTITY = 'S3 Access Key' es fundamental, ya que indica a SQL Server que use el nuevo conector de S3. El secreto debe tener el formato de la clave de acceso, seguido de dos puntos y, a continuación, la clave secreta.

Ejemplo:

CREATE CREDENTIAL sql_backup_credentials
WITH
    IDENTITY = 'S3 Access Key',
    SECRET = 'GOOGGE3SVF7OQE5JRMLQ7KWB:b31Pl8Tx1ARJfdGOsbgMFQNbk3nPdlT2UCYzs1iC';

Crear copias de seguridad de tus datos en Cloud Storage

Una vez que tengas las credenciales, podrás crear una copia de seguridad de tu base de datos directamente en el segmento de Cloud Storage mediante el comando BACKUP DATABASE con la opción TO URL. Añade el prefijo s3://storage.googleapis.com a la URL para usar el conector de S3, tal como se indica a continuación.

BACKUP DATABASE DATABASE_NAME
TO URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

Haz los cambios siguientes:

  • CREDENTIAL_NAME El nombre de la credencial que has creado en el paso 3. Por ejemplo, sql_backup_credentials.
  • BUCKET_NAME El nombre del contenedor que has creado en el paso 1.
  • FOLDER_NAME El nombre de la carpeta en la que quieras almacenar el archivo de copia de seguridad.
  • BACKUP_FILE_NAME El nombre del archivo de copia de seguridad.

A continuación, se describen los parámetros de copia de seguridad que se usan en el comando:

  • FORMAT: sobrescribe los archivos de copia de seguridad y crea un nuevo conjunto de medios.
  • STATS: informa del progreso de la copia de seguridad.
  • COMPRESSION: comprime la copia de seguridad, lo que puede reducir el tamaño del archivo y el tiempo de subida.
  • MAXTRANSFERSIZE: se recomienda para evitar errores de E/S con archivos de copia de seguridad grandes.

Para obtener más información, consulta Copia de seguridad de SQL Server en una URL de almacenamiento de objetos compatible con S3.

En el caso de bases de datos muy grandes, puedes dividir la copia de seguridad en varios archivos de la siguiente forma.

BACKUP DATABASE DATABASE_NAME
TO
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_0.bak',
    URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME_1.bak'
    -- ... more files
WITH
    CREDENTIAL = 'CREDENTIAL_NAME',
    FORMAT,
    STATS = 10,
    MAXTRANSFERSIZE = 10485760,
    COMPRESSION;

Restaurar datos de Cloud Storage

Puedes restaurar tu base de datos directamente desde un archivo de copia de seguridad almacenado en Cloud Storage mediante el comando RESTORE DATABASE, tal como se indica a continuación.

RESTORE DATABASE DATABASE_NAME
FROM URL = 's3://storage.googleapis.com/BUCKET_NAME/FOLDER_NAME/BACKUP_FILE_NAME.bak'
WITH
    CREDENTIAL = 'CREDENTIAL_NAME';

Haz los cambios siguientes:

  • CREDENTIAL_NAME El nombre de la credencial que has creado en el paso 3. Por ejemplo, sql_backup_credentials.
  • BUCKET_NAME El nombre del contenedor que has creado en el paso 1.
  • FOLDER_NAME El nombre de la carpeta en la que quieras almacenar el archivo de copia de seguridad.
  • BACKUP_FILE_NAME El nombre del archivo de copia de seguridad.