Clonar una base de datos MySQL en Compute Engine

En este tutorial se muestran dos formas de clonar una base de datos MySQL que se ejecuta en Compute Engine. Un método usa capturas de disco persistente. El otro método usa la exportación e importación nativas de MySQL, transfiriendo el archivo de exportación mediante Cloud Storage. Cloud Storage es el Google Cloud servicio de almacenamiento de objetos. Ofrece una forma sencilla, segura, duradera y de alta disponibilidad de almacenar archivos.

La clonación es el proceso de copiar una base de datos en otro servidor. La copia es independiente de la base de datos de origen y se conserva como una copia de un momento concreto. Puedes usar una base de datos clonada para varios fines sin sobrecargar el servidor de producción ni poner en riesgo la integridad de los datos de producción. Algunas de estas finalidades son las siguientes:

  • Realizar consultas analíticas.
  • Pruebas de carga o de integración de tus aplicaciones.
  • Extraer datos para rellenar almacenes de datos.
  • Realizar experimentos con los datos.

Cada método de clonación descrito en este tutorial tiene ventajas e inconvenientes. El método ideal para ti depende de tu situación. En la siguiente tabla se destacan algunos aspectos clave.

Problema Método 1: Capturas de disco Método 2: Exportar e importar mediante Cloud Storage
Espacio en disco adicional necesario en instancias de MySQL No se necesita espacio en disco adicional Espacio adicional necesario para almacenar el archivo de exportación al crear y restaurar
Carga adicional en las instancias de MySQL de origen durante la clonación Sin carga adicional Carga adicional en la CPU y las E/S al crear y subir el archivo de exportación
Duración de la clonación Relativamente rápido para bases de datos grandes Relativamente lento para bases de datos grandes
Puede clonar instancias de MySQL externas aGoogle Cloud No
complejidad Una secuencia compleja de comandos para adjuntar discos clonados Un conjunto de comandos relativamente sencillo para clonar
Puede aprovechar los sistemas de copias de seguridad que ya tenga Sí, si el sistema de copias de seguridad usa Google Cloud capturas de disco Sí, si el sistema de copia de seguridad exporta archivos a Cloud Storage
Granularidad de la clonación Solo se pueden clonar discos completos Solo se puede clonar la base de datos especificada
Coherencia de datos Coherente en el momento de la captura Coherente en el momento de la 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 tutorial se da por hecho que conoces la línea de comandos de Linux y la administración de bases de datos MySQL.

Configuración del entorno

Para completar este tutorial, debes configurar tu entorno de computación con lo siguiente:

  • Una instancia de MySQL en Compute Engine (llamada mysql-prod) que representa tu servidor de base de datos de producción.
  • Un disco adicional (llamado mysql-prod-data) conectado a tu servidor de producción para almacenar tu base de datos de producción.
  • Una copia de la base de datos Employeesimportada en mysql-prod para simular la base de datos de producción que quieres clonar.
  • Una instancia de MySQL en Compute Engine (llamada mysql-test) que represente tu servidor de base de datos de pruebas. Clonas tu base de datos en este servidor.

En el siguiente diagrama se muestra esta arquitectura.

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

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.

La instancia de máquina virtual de este tutorial usa dos discos: un disco de 50 GB para el SO y las cuentas de usuario, y un disco de 100 GB para el almacenamiento de la base de datos.

En Compute Engine, usar discos independientes no ofrece ninguna ventaja de rendimiento. El rendimiento del disco se determina en función de la capacidad de almacenamiento total de todos los discos conectados a una instancia y del número total de vCPUs de la instancia de la máquina virtual. Por lo tanto, la base de datos y el archivo de registro pueden residir en el mismo disco.

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Selecciona la zona que prefieras:

    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"
    

    Este comando otorga a la instancia acceso completo a las Google Cloud APIs, crea un disco secundario de 100 GB y lo asocia a la instancia. Ignora la advertencia de rendimiento del disco porque no necesitas un rendimiento alto para este tutorial.

Configurar el disco adicional

El segundo disco conectado a la instancia de producción se usa para almacenar tu base de datos de producción. Este disco está vacío, por lo que debes particionarlo, formatearlo y montarlo.

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

    Ve a la página Instancias de VM.

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

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

  4. En la ventana del terminal, muestra una lista de los 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 llamado 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 montaje del disco de datos:

    sudo mkdir -p /var/lib/mysql
    
  7. Para montar automáticamente el disco en el punto de montaje que has creado, añade 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. Monta el disco:

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

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

Instalar el servidor MySQL

Debes descargar e 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 e 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 pida, selecciona la opción MySQL Server & Cluster y, a continuación, 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 e 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 avise de que el directorio de datos ya existe, selecciona Aceptar.

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

Descargar e instalar la base de datos de ejemplo

  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 el directorio al directorio del script 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, introduce la contraseña raíz que creaste anteriormente.

  5. Para verificar que la base de datos de muestra funciona, puedes ejecutar una consulta que cuente el número de filas de la tabla employees:

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

    Cuando se te solicite, introduce la contraseña raíz que creaste anteriormente.

    El resultado es el siguiente:

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

Crear la instancia de VM de prueba

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

  1. Abre Cloud Shell.

    Abrir 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 tutorial.

Instalar el servidor MySQL en la instancia de VM de prueba

También debes descargar e instalar MySQL Community Edition en la instancia de máquina virtual mysql-test.

  1. En la sesión SSH conectada a mysql-test, descarga e 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 pida, selecciona la opción MySQL Server & Cluster y, a continuación, 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 e 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 e introduce una contraseña. Anota la contraseña o guárdala temporalmente en un lugar seguro.

Clonar la base de datos mediante capturas de disco de Compute Engine

Una forma de clonar una base de datos MySQL que se ejecuta en Compute Engine es almacenar la base de datos en un disco de datos independiente y usar capturas de disco persistente para crear un clon de ese disco.

Las capturas de discos persistentes te permiten obtener una copia de los datos del disco en un momento determinado. Programar capturas de disco es una forma de crear copias de seguridad de tus datos automáticamente.

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

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

En el siguiente diagrama se muestra cómo se clona una base de datos mediante copias de disco.

Diagrama que muestra la configuración para clonar una base de datos MySQL mediante capturas de disco.

Crear la captura del disco

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea una captura 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}"
    

    Al cabo de unos minutos, se creará la captura.

Adjunta la instantánea del disco a la instancia de prueba

Debes crear un disco de datos a partir de la captura que has creado y, a continuación, adjuntarlo a la instancia mysql-test.

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Crea un disco persistente con el contenido de la captura del disco de producción:

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

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

Montar el nuevo disco de datos en Linux

Para usar el disco de datos clonado como directorio de datos de MySQL, debes detener la instancia de MySQL y montar 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 del terminal, muestra una lista de los 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 llamado sdb (100 GB) es tu disco de datos.

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

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

    Si montas este disco, se ocultarán los archivos de configuración y los espacios de tablas de MySQL, y se sustituirán por el contenido del disco.

    Con este comando, el disco se monta temporalmente y no se vuelve a montar al iniciar el sistema. Si quieres montar el disco al arrancar el sistema, crea una entrada fstab. Para obtener más información, consulta la sección Configurar el disco adicional de este tutorial.

Iniciar MySQL en la instancia de prueba

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

    sudo service mysql start
    
  2. Para verificar que la base de datos clonada funciona, ejecuta una consulta que cuente el número de filas de la tabla employees:

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

    Cuando se te solicite, introduce la contraseña raíz del servidor de la 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 un clon del directorio de datos de la instancia mysql-prod, por lo que se copian todas las bases de datos, los usuarios de las bases de datos y sus contraseñas.

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

    El número de filas es el mismo que en la instancia de mysql-prod.

Ahora que has visto cómo clonar una base de datos mediante copias de referencia de discos persistentes, puedes probar a clonar una base de datos mediante la exportación y la importación. Para completar el tutorial de este segundo método, debes desmontar el disco clonado.

Desmonta el disco clonado

Para desmontar el disco clonado que has creado mediante capturas de disco, sigue estos pasos:

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

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

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

    sudo service mysql start
    

Clonar mediante la exportación y la importación

Otro método para clonar una base de datos de MySQL que se ejecuta en Compute Engine es usar las funciones de exportación (con mysqldump) e importación integradas de MySQL. Con este método, se transfiere el archivo de exportación mediante Cloud Storage.

En esta sección del tutorial se usan recursos que has creado en la sección Clonar la base de datos con copias de disco de Compute Engine de este tutorial. Si no has completado esa sección, debes hacerlo antes de continuar.

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

  • Crea un segmento de Cloud Storage.
  • Exporta la base de datos de la instancia de producción y escríbela en Cloud Storage.
  • Importa el archivo de exportación a la instancia de prueba leyéndolo desde Cloud Storage.

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

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

Como se puede dar acceso a Cloud Storage a sistemas externos a Google Cloud , puedes usar este método para clonar bases de datos de instancias de MySQL externas.

Crea un segmento de Cloud Storage

Debes crear un segmento 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.

    Abrir Cloud Shell

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

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

Exportar la base de datos

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

En este tutorial, crearás un archivo de exportación con mysqldump, que no afectará a ninguna programación de copias de seguridad completas o incrementales.

  • 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 segmento que has creado anteriormente:

    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, introduce la contraseña raíz del servidor de bases de datos mysql-prod.

    Utiliza el conjunto de caracteres utf8mb4 en la exportación para evitar problemas de codificación de caracteres.

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

Importar el archivo exportado

  1. En la sesión SSH conectada a la instancia mysql-test, transmite el archivo exportado desde tu segmento de Cloud Storage a la aplicación de línea de comandos 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, introduce la contraseña raíz del servidor de bases de datos mysql-test.

    Utiliza el conjunto de caracteres utf8mb4 en la importación para evitar problemas de codificación de caracteres.

  2. Para verificar que la base de datos clonada funciona, ejecuta una consulta que cuente el número de filas de la tabla employees:

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

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

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

    El número de filas es el mismo que en la instancia de mysql-prod.

Usar Cloud SQL como destino de la clonación

Si tu base de datos de destino está alojada en Cloud SQL y la base de datos de origen está en Compute Engine, el único mecanismo admitido para clonar es exportar la base de datos a Cloud Storage y, a continuación, importarla en Cloud SQL.

Como se explica en la documentación de Cloud SQL, Cloud SQL solo puede importar el archivo exportado si no contiene ningún activador, procedimiento almacenado, vista o función.

Si tu base de datos depende de alguno de estos elementos, debes excluirlo de la exportación mediante los argumentos de línea de comandos --skip-triggers y --ignore-table [VIEW_NAME] y, a continuación, volver a crearlo manualmente después de la importación.

Crear una instancia de Cloud SQL para MySQL

  1. Abre Cloud Shell.

    Abrir Cloud Shell

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

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

    Al cabo de unos minutos, se creará tu base de datos de Cloud SQL.

  3. Cambia la contraseña del usuario raíz por 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 e introduce una contraseña. Anota la contraseña o guárdala temporalmente en un lugar seguro.

Exportar la base de datos

Para exportar la base de datos en un formato adecuado para importarla en Cloud SQL, debes excluir las vistas de la base de datos.

  1. En la sesión SSH conectada a la instancia mysql-prod, define una variable de entorno que contenga un conjunto de argumentos de línea de comandos para el comando mysqldump de forma que ignore las vistas de 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, introduce la contraseña raíz del servidor de bases de datos mysql-prod.

  2. Consulta el contenido de las variables para comprobar que se han definido 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, excluyendo los activadores y las vistas, y transmítela directamente a un objeto de Cloud Storage en el segmento que has creado anteriormente:

    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, introduce la contraseña raíz del servidor de bases de datos mysql-prod.

Actualizar los permisos de un objeto

Deben definirse los permisos correctos en el segmento de Cloud Storage y en el objeto de exportación para que la cuenta de servicio de Cloud SQL pueda leerlos. Estos permisos se definen automáticamente cuando se usa la consola de Google Cloud para importar el objeto, o bien se pueden definir mediante comandos de gcloud.

  1. Abre Cloud Shell.

    Abrir Cloud Shell

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

    CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Añade la cuenta de servicio a la política de gestión de identidades y accesos (IAM) del segmento 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
    

Importar la base de datos exportada

  1. Abre Cloud Shell.

    Abrir Cloud Shell

  2. Importa el archivo exportado en 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, introduce y.

  3. Para verificar que la base de datos clonada funciona, ejecuta una consulta que cuente el número de filas de la tabla employees:

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

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

    El resultado es el siguiente:

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

    El número de filas es el mismo que en la instancia de mysql-prod.

Información adicional para sistemas de producción

Las siguientes categorías ofrecen prácticas recomendadas adicionales para sus sistemas de producción.

Usar capturas de disco

En el caso de las copias de seguridad físicas (como las capturas de disco), la documentación de MySQL recomienda que pauses las escrituras en la base de datos antes de hacer una captura. Para ello, usa el comando FLUSH TABLES WITH READ LOCK. Cuando se haya completado la captura, puedes usar UNLOCK TABLES para reiniciar las escrituras.

En el caso de las bases de datos que usan tablas InnoDB, te recomendamos que hagas la instantánea directamente sin ejecutar primero el comando FLUSH TABLES WITH READ LOCK. De esta forma, la base de datos puede seguir funcionando sin que se produzcan efectos negativos, pero es posible que la instantánea se encuentre en un estado incoherente. Sin embargo, si esto ocurre, el motor InnoDB puede volver a compilar las tablas a un estado coherente cuando se inicie el clon.

En las bases de datos que usan tablas MyISAM, al ejecutar el comando FLUSH TABLES WITH READ LOCK se bloquean 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 haces una captura sin vaciar y bloquear primero las tablas, existe el riesgo de que la base de datos recién clonada contenga datos incoherentes o esté dañada.

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

Usar 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.

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.