Exportar una base de datos de MySQL con mysqldump

Puedes ejecutar la utilidad mysqldump directamente en tu base de datos MySQL con las opciones que necesites. Sin embargo, si vas a exportar los datos para importarlos en una base de datos de Cloud SQL, utiliza la utilidad mysqldump con las siguientes marcas:

  • --databases Especifica una lista explícita de bases de datos que se van a exportar. Esta lista no debe contener las bases de datos del sistema (sys, mysql, performance_schema y information_schema).
  • --hex-blob Si tu base de datos contiene campos binarios, debes usar esta marca para asegurarte de que los campos binarios se importan correctamente.
  • --single-transaction Inicia una transacción antes de ejecutarla. En lugar de bloquear toda la base de datos, permite que mysqldump lea la base de datos en el estado actual, lo que da como resultado un volcado de datos coherente.
  • --routines Para incluir procedimientos y funciones almacenados.
  • Si usas la versión 8 o posterior de mysqldump para exportar bases de datos MySQL con versiones anteriores a la 8,
    --column-statistics=0

    Esta marca elimina la tabla COLUMN_STATISTICS de la exportación de la base de datos para evitar el error Unknown table 'COLUMN_STATISTICS' in information_schema (1109). Para obtener más información, consulta Diagnosticar problemas.

También se recomienda usar las siguientes marcas:

  • --no-autocommit
  • --default-character-set=utf8mb4
  • --master-data

En un equipo con conectividad de red a tu servidor MySQL, ejecuta el siguiente comando:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --master-data=1  \
        --single-transaction \
        --routines \
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

Si la fuente de la migración es Relational Database Service (RDS) para MySQL:

  • La propiedad master-data no se admite.
  • Si el servidor de la base de datos de origen admite GTID, usa la propiedad --set-gtid-purged=on. De lo contrario, no la uses.
  • Si vas a usar un volcado manual para migrar tus datos, realiza la migración con GTID habilitado.

Este comando podría ser similar al siguiente ejemplo:

    mysqldump \
        -h [SOURCE_ADDR] -P [SOURCE_PORT] -u [USERNAME] -p \
        --databases [DBS]  \
        --hex-blob  \
        --no-autocommit \
        --default-character-set=utf8mb4 \
        --set-gtid-purged=on \
        --single-transaction \
        --routines \ 
        | gzip \
        | gcloud storage cp - gs://[BUCKET_NAME]/[DUMP_FILENAME].gz

Además, debe configurar las instancias de RDS para que conserven los archivos de registro binarios durante más tiempo. Este comando podría ser similar al siguiente ejemplo:

    # Sets the retention period to one week.
    call mysql.rds_set_configuration('binlog retention hours', 168);

Sustituye [PROPERTIES_IN_BRACKETS] por los siguientes valores:

Propiedad Valor
[SOURCE_ADDR] La dirección IPv4 o el nombre de host del servidor de la base de datos de origen.
[SOURCE_PORT] El puerto del servidor de la base de datos de origen.
[USERNAME] La cuenta de usuario de MySQL.
[DBS] Lista separada por espacios de las bases de datos del servidor de bases de datos de origen que se incluirán en el volcado. Usa el comando SHOW DATABASES de MySQL para listar tus bases de datos.
[BUCKET_NAME] El segmento de Cloud Storage que crea el usuario y que se usa para almacenar el archivo de volcado (por ejemplo, replica-bucket).
[DUMP_FILENAME] El nombre del archivo de volcado, que termina con la extensión .gz (por ejemplo, source-database.sql.gz).