Clona una base de datos MySQL en Compute Engine

Last reviewed 2019-10-08 UTC

En este instructivo, se muestran dos maneras de clonar una base de datos MySQL que se ejecuta en Compute Engine. En uno de los métodos, se usan instantáneas de disco persistente. El otro método usa la importación y exportación nativas de MySQL y transfiere el archivo de exportación con Cloud Storage. Cloud Storage es el servicio de almacenamiento de objetos de Google Cloud. Ofrece una manera sencilla, duradera, más segura y con alta disponibilidad de almacenar archivos.

La clonación es el proceso mediante el cual se copia una base de datos a otro servidor. La copia es independiente de la base de datos de origen y se conserva como una instantánea de un momento determinado. Puedes usar una base de datos clonada para varios fines, sin cargar el servidor de producción ni poner en riesgo la integridad de los datos de producción. Algunos de estos fines son los siguientes:

  • Realizar consultas estadísticas
  • Llevar a cabo una prueba de carga o de integración de tus aplicaciones
  • Extraer datos para propagar almacenes de datos
  • Ejecutar experimentos en los datos

Cada método de clonación que se describe en este instructivo tiene ventajas y desventajas. El método ideal para ti depende de tu situación. En la siguiente tabla, se destacan algunos problemas clave.

Problema Método 1: instantáneas de disco Método 2: exportar y, luego, importar con Cloud Storage
Se requiere espacio de disco adicional en las instancias de MySQL No se necesita espacio de disco adicional Espacio adicional necesario para almacenar el archivo de exportación durante la creación y el restablecimiento
Carga adicional en instancias de MySQL de origen durante la clonación Sin carga adicional Carga adicional en CPU y E/S cuando se crea y se sube el archivo de exportación
Duración de la clonación Relativamente rápida para bases de datos grandes Relativamente lenta para bases de datos grandes
Se puede clonar desde instancias de MySQL externas a Google Cloud No
Complejidad Una secuencia de comandos compleja para conectar discos clonados Un conjunto de comandos relativamente sencillo para la clonación
Aprovechamiento de sistemas de copia de seguridad existentes Sí, si el sistema de copia de seguridad usa instantáneas de disco de Google Cloud Sí, si el sistema de copia de seguridad exporta archivos a Cloud Storage
Nivel de detalle de la clonación Puede clonar solo discos completos Puede clonar solo la base de datos especificada
Coherencia de los datos Coherente en el punto de la instantánea Coherente en el punto de exportación
Puede usar Cloud SQL como origen No Sí, si se usa la misma versión
Puede usar Cloud SQL como destino No

En este instructivo, se supone que conoces la línea de comandos de Linux y la administración de la base de datos MySQL.

Objetivos

  • Aprender cómo ejecutar una base de datos MySQL en Google Cloud
  • Aprender a crear una base de datos de demostración en un disco secundario
  • Aprender cómo clonar una base de datos MySQL con las instantáneas de disco de Compute Engine.
  • Aprender cómo clonar una base de datos MySQL mediante la transferencia de un archivo de exportación con Cloud Storage.
  • Aprender cómo clonar una base de datos MySQL en Cloud SQL mediante la transferencia de un archivo de exportación con Cloud Storage.

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios. Es posible que los usuarios nuevos de Google Cloud califiquen para obtener una prueba gratuita.

Cuando finalices las tareas que se describen en este documento, puedes borrar los recursos que creaste para evitar que continúe la facturación. Para obtener más información, consulta Cómo realizar una limpieza.

Antes de comenzar

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Habilita la API de Compute Engine.
  7. Habilita la API

Configura el entorno

Para completar este instructivo, debes configurar el entorno de computación con lo siguiente:

  • Una instancia de MySQL en Compute Engine (llamada mysql-prod) para representar tu servidor de base de datos de producción.
  • Un disco adicional (llamado mysql-prod-data) que esté conectado al servidor de producción para almacenar la base de datos de producción
  • Una copia de la base de datos Employees importada en mysql-prod para simular la base de datos de producción que deseas clonar
  • Una instancia de MySQL en Compute Engine (denominada mysql-test) para representar el servidor de base de datos de prueba. Clonarás tu base de datos en este servidor.

En el siguiente diagrama, se ilustra esta arquitectura.

Diagrama que muestra la configuración para clonar una base de datos MySQL en este instructivo.

Crea la instancia de VM de producción

Para simular un entorno de producción, configura una instancia de VM de Compute Engine que ejecute MySQL en Debian Linux.

En la instancia de VM de este instructivo, se usan dos discos: uno de 50 GB para el SO y las cuentas de usuario, y otro de 100 GB para el almacenamiento de la base de datos.

En Compute Engine, el uso de discos independientes no ofrece beneficios en cuanto al rendimiento. El rendimiento del disco se determina por la capacidad de almacenamiento total de todos los discos conectados a una instancia y por la cantidad total de CPU virtuales en la instancia de VM. Por lo tanto, la base de datos y el archivo de registro pueden estar en el mismo disco.

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Establece tu zona preferida:

    ZONE=us-east1-b
    REGION=us-east1
    gcloud config set compute/zone "${ZONE}"
    
  3. Crea una instancia de Compute Engine:

    gcloud compute instances create mysql-prod \
        --machine-type=n1-standard-2 \
        --scopes=cloud-platform \
        --boot-disk-size=50GB \
        --boot-disk-device-name=mysql-prod \
        --create-disk="mode=rw,size=100,type=pd-standard,name=mysql-prod-data,device-name=mysql-prod-data"
    

    Con este comando, se le otorga a la instancia acceso completo a las API de Google Cloud, se crea un disco secundario de 100 GB y se conecta el disco a la instancia. Ignora la advertencia de rendimiento del disco porque no necesitas un rendimiento alto para este instructivo.

Configura el disco adicional

El segundo disco conectado a la instancia de producción es para almacenar la base de datos de producción. Este disco está en blanco, por lo que debes particionarlo, formatearlo y activarlo.

  1. En la consola de Google Cloud, ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Asegúrate de que aparezca una marca de verificación verde  junto al nombre de la instancia mysql-prod, lo cual indica que la instancia está lista.

  3. Haz clic en el botón SSH junto a la instancia mysql-prod. El navegador abrirá una conexión de terminal a la instancia.

  4. En la ventana de la terminal, muestra una lista de discos conectados a tu instancia:

    lsblk
    

    El resultado es el siguiente:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk
    └─sda1   8:1    0   50G  0 part /
    sdb      8:16   0  100G  0 disk
    

    El disco con el nombre sdb (100 GB) es tu disco de datos.

  5. Formatea el disco sdb y crea una sola partición con un sistema de archivos ext4:

    sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard \
        /dev/sdb
    
  6. Crea el directorio de datos de MySQL para que sea el punto de activación del disco de datos:

    sudo mkdir -p /var/lib/mysql
    
  7. Para activar el disco de forma automática en el punto de activación que creaste, agrega una entrada al archivo /etc/fstab:

    echo "UUID=`sudo blkid -s UUID -o value /dev/sdb` /var/lib/mysql ext4 discard,defaults,nofail 0 2" \
       | sudo tee -a /etc/fstab
    
  8. Activa el disco:

    sudo mount -av
    
  9. Quita todos los archivos del disco de datos para que MySQL pueda usarlos como directorio de datos:

    sudo rm -rf /var/lib/mysql/*
    

Instala el servidor MySQL

Debes descargar y, luego, instalar MySQL Community Edition. El directorio de datos de MySQL se crea en el disco adicional.

  1. En la sesión SSH conectada a mysql-prod, descarga y, luego, instala el paquete de configuración de MySQL:

    wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
    
  2. Cuando se te solicite, selecciona la opción Servidor MySQL y clúster y, luego, mysql-5.7.

  3. En la lista, selecciona la opción Aceptar para completar la configuración del paquete.

  4. Actualiza la caché del repositorio y, luego, instala los paquetes de mysql-community:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Cuando se te advierta que el directorio de datos ya existe, selecciona Aceptar.

  6. Cuando se te pida que proporciones una contraseña raíz, crea una contraseña y, luego, ingrésala. Anota la contraseña o guárdala temporalmente en un lugar seguro.

Descargar y, luego, instalar la base de datos de muestra

  1. En la sesión SSH conectada a la instancia mysql-prod, instala git:

    sudo apt-get install -y git
    
  2. Clona el repositorio de GitHub que contiene las secuencias de comandos de la base de datos Employees:

    git clone https://github.com/datacharmer/test_db.git
    
  3. Cambia al directorio para la secuencia de comandos de la base de datos Employees:

    cd test_db
    
  4. Ejecuta la secuencia de comandos de creación de la base de datos Employees:

    mysql -u root -p -q < employees.sql
    

    Cuando se te solicite, ingresa la contraseña raíz que creaste antes.

  5. Para verificar si la base de datos de muestra funciona, puedes ejecutar una consulta que recuente la cantidad de filas en la tabla employees:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Cuando se te solicite, ingresa la contraseña raíz que creaste antes.

    Este es el resultado:

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

Crea la instancia de VM de prueba

En esta sección, crearás una instancia de VM de MySQL llamada mysql-test como destino para la base de datos clonada. La configuración de esta instancia es idéntica a la instancia de producción. Sin embargo, no crearás un segundo disco de datos, en cambio, conectarás el disco de datos más adelante en este instructivo.

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Crea la instancia de MySQL de prueba:

    gcloud compute instances create mysql-test \
      --machine-type=n1-standard-2 \
      --scopes=cloud-platform \
      --boot-disk-size=50GB \
      --boot-disk-device-name=mysql-test
    

    Puedes ignorar la advertencia de rendimiento del disco porque no necesitas un rendimiento alto para este instructivo.

Instala el servidor MySQL en la instancia de VM de prueba

También debes descargar y, luego, instalar MySQL Community Edition en la instancia de VM mysql-test.

  1. En la sesión SSH conectada a mysql-test, descarga y, luego, instala el paquete de configuración de MySQL:

    wget http://repo.mysql.com/mysql-apt-config_0.8.13-1_all.deb
    sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb
    
  2. Cuando se te solicite, selecciona la opción Servidor MySQL y clúster y, luego, mysql-5.7.

  3. En la lista, selecciona la opción Aceptar para completar la configuración del paquete.

  4. Actualiza la caché del repositorio y, luego, instala los paquetes de mysql-community:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Cuando se te pida que proporciones una contraseña raíz, crea una contraseña y, luego, ingrésala. Anota la contraseña o guárdala temporalmente en un lugar seguro.

Clona la base de datos con instantáneas de disco de Compute Engine

Una forma de clonar una base de datos MySQL que se ejecuta en Compute Engine es almacenarla en un disco de datos independiente y usar instantáneas de disco persistente para crear una clonación de ese disco.

Las instantáneas de disco persistente te permiten obtener una copia de un momento determinado de los datos en el disco. La programación de instantáneas de disco es una forma de crear copias de seguridad automáticas de los datos.

En esta sección del instructivo, harás lo siguiente:

  • Tomarás una instantánea del disco de datos del servidor de producción.
  • Crearás un disco nuevo a partir de la instantánea.
  • Activarás el disco nuevo en el servidor de prueba.
  • Reinicia el servidor MySQL en la instancia de prueba para que el servidor use el disco nuevo como un disco de datos.

En el siguiente diagrama, se muestra cómo se clona una base de datos mediante instantáneas de disco.

Diagrama que muestra la configuración para clonar una base de datos MySQL con instantáneas de disco.

Crea la instantánea de disco

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Crea una instantánea de tu disco de datos en la misma zona que la instancia de VM:

    gcloud compute disks snapshot mysql-prod-data \
         --snapshot-names=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    

    Luego de unos minutos, se creará la instantánea.

Conecta la instantánea de disco a la instancia de prueba

Debes crear un disco de datos nuevo a partir de la instantánea que creaste y, luego, conectarlo a la instancia mysql-test.

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Crea un disco persistente nuevo con la instantánea del disco de producción para el contenido:

    gcloud beta compute disks create mysql-test-data \
         --size=100GB \
         --source-snapshot=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Conecta el disco nuevo a la instancia mysql-test con permisos de lectura y escritura:

    gcloud compute instances attach-disk mysql-test \
        --disk=mysql-test-data --mode=rw
    

Activa el disco de datos nuevo en Linux

Para usar el disco de datos clonado como el directorio de datos de MySQL, debes detener la instancia de MySQL y activar el disco.

  1. En la sesión SSH conectada a mysql-test, detén el servicio MySQL:

    sudo service mysql stop
    
  2. En la ventana de la terminal, muestra una lista de discos conectados a tu instancia:

    lsblk
    

    El resultado es el siguiente:

    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   50G  0 disk
    └─sda1   8:1    0   50G  0 part /
    sdb      8:16   0  100G  0 disk
    

    El disco sdb (100 GB) es tu disco de datos.

  3. Activa el disco de datos de MySQL en el directorio de datos de MySQL:

    sudo mount -o discard,defaults /dev/sdb /var/lib/mysql
    

    Activar este disco oculta los archivos de configuración y los espacios de tabla de MySQL, y los reemplaza por el contenido del disco.

    Con este comando, el disco se activará de forma temporal y no se volverá a activar durante el arranque del sistema. Si deseas activar el disco en el arranque del sistema, crea una entrada fstab. Para obtener más información, consulta la sección anterior de este instructivo: Configura el disco adicional.

Inicia MySQL en la instancia de prueba

  1. En la sesión SSH conectada a mysql-test, inicia el servicio de MySQL:

    sudo service mysql start
    
  2. Para verificar si la base de datos clonada funciona, ejecuta una consulta que cuente la cantidad de filas en la tabla employees:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-prod. La contraseña raíz de la instancia de producción es obligatoria porque todo el directorio de datos de MySQL es una clonación del directorio de datos de la instancia mysql-prod, por lo que se copian todas las bases de datos, los usuarios de base de datos y sus contraseñas.

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

    La cantidad de filas es la misma que en la instancia mysql-prod.

Ahora que aprendiste a clonar una base de datos mediante instantáneas de disco persistente, puedes intentar hacerlo con la exportación y la importación. Para completar el segundo enfoque de este instructivo, debes desactivar el disco clonado.

Desactiva el disco clonado

Para desactivar el disco clonado que creaste mediante las instantáneas de disco, realiza los siguientes pasos:

  1. En la sesión SSH conectada a tu instancia mysql-test, detén el servicio de MySQL:

    sudo service mysql stop
    
  2. Desactiva el disco de datos clonado del directorio de datos de MySQL:

    sudo umount /var/lib/mysql
    
  3. Reinicia el servicio de MySQL:

    sudo service mysql start
    

Clona con el método exportación/importación

Un segundo método para clonar una base de datos MySQL que se ejecuta en Compute Engine es usar la exportación nativa de MySQL (mediante mysqldump) y la importación. Con este enfoque, transfieres el archivo de exportación mediante Cloud Storage.

En esta sección del instructivo, se usan los recursos que creaste en la sección Clona la base de datos mediante instantáneas de disco de Compute Engine de este instructivo. Si no completaste esa sección, debes hacerlo antes de continuar.

En esta sección del instructivo, harás lo siguiente:

  • Crear un bucket de Cloud Storage
  • Exportar la base de datos en la instancia de producción y escribirla en Cloud Storage
  • Importar el archivo de exportación a la instancia de prueba y leerlo desde Cloud Storage

En el siguiente diagrama, se muestra cómo se clona una base de datos mediante la transferencia de una exportación con Cloud Storage.

Diagrama que muestra la configuración para clonar una base de datos de MySQL con Cloud Storage.

Debido a que los sistemas fuera de Google Cloud pueden tener acceso a Cloud Storage, puedes usar este enfoque para clonar bases de datos desde instancias de MySQL externas.

Crea un bucket de Cloud Storage

Debes crear un bucket de Cloud Storage que almacene los archivos de exportación mientras los transfieres de la instancia mysql-prod a la instancia mysql-test.

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Crea un bucket de Cloud Storage en la misma región que las instancias de VM:

    gcloud storage buckets create "gs://$(gcloud config get-value project)-bucket" --location="${REGION}"
    

Exporta la base de datos

En el entorno de producción, es posible que ya realices copias de seguridad mediante archivos de exportación mysqldump. Puedes usar estas copias de seguridad como base para clonar tu base de datos.

En este instructivo, crearás un archivo de exportación nuevo mediante mysqldump, que no afectará ninguna programación de copia de seguridad completa o incremental existente.

  • En la sesión SSH, conectada a la instancia mysql-prod, exporta la base de datos Employees y transmítela a un objeto de Cloud Storage en el bucket que creaste antes:

    mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose  --hex_blob \
        --databases employees |\
         gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-dump.sql"
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-prod.

    Usa el grupo de caracteres utf8mb4 en la exportación para evitar cualquier problema de codificación de caracteres.

    La opción --add-drop-database se usa para que las declaraciones DROP DATABASE y CREATE DATABASE se incluyan en la exportación.

Importa el archivo exportado

  1. En la sesión SSH conectada a la instancia mysql-test, transmite el archivo exportado desde tu bucket de Cloud Storage a la aplicación de línea de comandos de mysql:

    gcloud storage cat "gs://$(gcloud config get-value project)-bucket/employees-dump.sql" |\
        mysql --user=root -p --default-character-set=utf8mb4
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-test.

    Usa el grupo de caracteres utf8mb4 en la importación para evitar cualquier problema de codificación de caracteres.

  2. Para verificar si la base de datos clonada funciona, ejecuta una consulta que cuente la cantidad de filas en la tabla employees:

    mysql -u root -p -e "select count(*) from employees.employees;"
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-test.

    +----------+
    | count(*) |
    +----------+
    |   300024 |
    +----------+
    

    La cantidad de filas es la misma que en la instancia mysql-prod.

Usa Cloud SQL como destino de clonación

Si la base de datos de destino está alojada en Cloud SQL y la base de datos de origen se encuentra en Compute Engine, el único mecanismo admitido para realizar la clonación es exportar la base de datos a Cloud Storage y, luego, importarla a Cloud SQL.

Como se explica en la documentación de Cloud SQL, Cloud SQL solo puede importar el archivo exportado cuando no contiene activadores, procedimientos almacenados, vistas ni funciones.

Si tu base de datos se basa en cualquiera de estos elementos, debes excluirlos de la exportación mediante los argumentos de línea de comandos --skip-triggers y --ignore-table [VIEW_NAME] y, luego, volver a crearlos de forma manual después de la importación.

Crea una instancia de Cloud SQL para MySQL

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Crea una instancia de Cloud SQL para MySQL que ejecute la misma versión de la base de datos que tu instancia mysql-prod:

    gcloud sql instances create mysql-cloudsql \
        --tier=db-n1-standard-2 --region=${REGION} --database-version MYSQL_5_7
    

    Luego de unos minutos, se creará la base de datos de Cloud SQL.

  3. Restablece la contraseña del usuario raíz a un valor conocido:

    gcloud sql users set-password root \
        --host=% --instance=mysql-cloudsql  --prompt-for-password
    

    Cuando se te pida que proporciones una contraseña raíz, crea una contraseña y, luego, ingrésala. Anota la contraseña o guárdala temporalmente en un lugar seguro.

Exporta la base de datos

Con el fin de exportar la base de datos en un formato adecuado para la importación a Cloud SQL, debes excluir cualquier vista en la base de datos.

  1. En la sesión SSH conectada a la instancia mysql-prod, configura una variable de entorno que contenga un conjunto de argumentos de línea de comandos para el comando mysqldump a fin de que ignore las vistas en la base de datos Employees:

    DATABASE_NAME=employees
    IGNORE_TABLES_ARGS="`mysql -u root -p -s -s -e \"
        SELECT CONCAT('--ignore-table ${DATABASE_NAME}.',TABLE_NAME)
        FROM information_schema.TABLES
        WHERE TABLE_TYPE LIKE 'VIEW' AND TABLE_SCHEMA = '${DATABASE_NAME}';
        \"`"
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-prod.

  2. Ve los contenidos de las variables para comprobar que se hayan configurado correctamente:

    echo "${IGNORE_TABLES_ARGS}"
    
    --ignore-table employees.current_dept_emp
    --ignore-table employees.dept_emp_latest_date
    
  3. Exporta la base de datos Employees, sin incluir los activadores ni las vistas, y transmítela directamente a un objeto de Cloud Storage en el bucket que creaste antes:

    mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose \
        --hex-blob --skip-triggers --set-gtid-purged=OFF \
        $IGNORE_TABLES_ARGS \
        --databases employees |\
        gcloud storage cp - "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-prod.

Actualiza permisos de objetos

Los permisos correctos deben configurarse en el bucket de Cloud Storage y en el objeto de exportación para que la cuenta de servicio de Cloud SQL pueda leerlos. Estos permisos se configuran de forma automática cuando usas la consola de Google Cloud para importar el objeto o pueden configurarse mediante comandos de gcloud.

  1. Abra Cloud Shell.

    Abra Cloud Shell

  2. Configura una variable de entorno que contenga la dirección de la cuenta de servicio de la instancia de Cloud SQL:

    CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Agrega la cuenta de servicio a la política de IAM del bucket como lector y escritor:

    gcloud storage buckets add-iam-policy-binding "gs://$(gcloud config get-value project)-bucket/" \
        --member=user:"${CLOUDSQL_SA}" --role=roles/storage.objectUser
    

Importa la base de datos exportada

  1. Abre Cloud Shell

    Abra Cloud Shell

  2. Importa el archivo exportado a tu instancia de Cloud SQL:

    gcloud sql import sql mysql-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Cuando se te solicite, ingresa y.

  3. Para verificar si la base de datos clonada funciona, ejecuta una consulta que cuente la cantidad de filas en la tabla employees:

    echo "select count(*) from employees.employees;" |\
        gcloud sql connect mysql-cloudsql --user=root
    

    Cuando se te solicite, ingresa la contraseña raíz del servidor de base de datos mysql-cloudsql.

    Este es el resultado:

    Connecting to database with SQL user [root].Enter password:
    count(*)
    300024
    

    La cantidad de filas es la misma que en la instancia mysql-prod.

Información adicional para sistemas de producción

Usa instantáneas de disco

Para las copias de seguridad físicas (como las instantáneas de disco), la documentación de MySQL recomienda detener las escrituras en la base de datos antes de tomar una instantánea. Para ello, usa el comando FLUSH TABLES WITH READ LOCK. Cuando se completa la instantánea, puedes usar UNLOCK TABLES para reiniciar las escrituras.

Para las bases de datos que usan tablas InnoDB, recomendamos que tomes la instantánea directamente sin ejecutar primero el comando FLUSH TABLES WITH READ LOCK. Esto permite que la base de datos permanezca en ejecución sin efectos negativos, pero es posible que el estado de la instantánea sea incoherente. Sin embargo, si esto ocurre, el motor de InnoDB puede volver a compilar las tablas para que su estado sea coherente al momento de iniciar la clonación.

Para las bases de datos que usan tablas MyISAM, la ejecución del comando FLUSH TABLES WITH READ LOCK bloquea todas las escrituras en las tablas, lo que hace que tu base de datos sea de solo lectura hasta que ejecutes el comando UNLOCK TABLES.

Si tomas una instantánea sin primero vaciar y bloquear las tablas, existe el riesgo de que la base de datos recién clonada contenga datos incoherentes o se dañe.

Por lo tanto, para obtener una instantánea coherente en las bases de datos con tablas MyISAM, te recomendamos ejecutar FLUSH TABLES WITH READ LOCK en una réplica de lectura y tomar una instantánea de esa réplica para que el rendimiento de la base de datos principal no se vea afectado.

Usa el comando mysqldump

Para crear un archivo de exportación que sea coherente con la base de datos de origen, el comando mysqldump bloquea todas las tablas durante la operación de exportación. Esto significa que las escrituras en la base de datos se bloquean mientras se exporta la base de datos.

Por lo tanto, te recomendamos que ejecutes el comando mysqldump en una réplica de lectura de la base de datos principal para que esta no se bloquee.

Limpia

Para evitar que se apliquen cargos a la cuenta de Google Cloud por los recursos que se usaron en este instructivo, puedes borrar el proyecto de Google Cloud que creaste para este instructivo.

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

¿Qué sigue?