Esportazione di un database MySQL con mysqldump

Puoi eseguire l'utilità mysqldump direttamente sul tuo database MySQL, utilizzando le opzioni di cui hai bisogno. Tuttavia, se esegui l'esportazione per importare i dati in un database Cloud SQL, utilizza l'utilità mysqldump con i seguenti flag:

  • --databases Specifica un elenco esplicito dei database da esportare. Questo elenco non deve contenere i database di sistema (sys, mysql, performance_schema e information_schema).
  • --hex-blob Se il tuo database contiene campi binari, devi utilizzare questo flag per assicurarti che vengano importati correttamente.
  • --single-transaction Avvia una transazione prima dell'esecuzione. Invece di bloccare l'intero database, questo consente a mysqldump di leggere il database nello stato corrente, generando un dump dei dati coerente.
  • --routines Per includere funzioni e stored procedure.
  • Quando utilizzi mysqldump versione 8 o successive per esportare database MySQL precedenti alla versione 8:
    --column-statistics=0

    Questo flag rimuove la tabella COLUMN_STATISTICS dall'esportazione del database per evitare l'errore Unknown table 'COLUMN_STATISTICS' in information_schema (1109). Per ulteriori informazioni, vedi Risolvere i problemi.

Ti consigliamo inoltre di utilizzare i seguenti flag:

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

Da una macchina con connettività di rete al server MySQL, esegui il seguente 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

Se l'origine della migrazione è un servizio Relational Database Service (RDS) per MySQL:

  • La proprietà master-data non è supportata.
  • Se il server del database di origine supporta GTID, utilizza la proprietà --set-gtid-purged=on; in caso contrario, non utilizzarla.
  • Se utilizzi un dump manuale per eseguire la migrazione dei dati, esegui la migrazione con il GTID abilitato.

Questo comando potrebbe essere simile al seguente esempio:

    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

Inoltre, devi configurare le istanze RDS in modo che conservino i file binlog più a lungo. Questo comando potrebbe essere simile al seguente esempio:

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

Sostituisci [PROPERTIES_IN_BRACKETS] con i seguenti valori:

Proprietà Valore
[SOURCE_ADDR] L'indirizzo IPv4 o il nome host del server del database di origine.
[SOURCE_PORT] La porta per il server del database di origine.
[USERNAME] L'account utente MySQL.
[DBS] Un elenco separato da spazi dei database sul server del database di origine da includere nel dump. Utilizza il comando MySQL SHOW DATABASES per elencare i tuoi database.
[BUCKET_NAME] Il bucket in Cloud Storage creato dall'utente e utilizzato per archiviare il file dump (ad esempio replica-bucket).
[DUMP_FILENAME] Il nome del file del dump, che termina con un'estensione di file .gz (ad es. source-database.sql.gz).