Como exportar um banco de dados MySQL usando mysqldump

É possível executar o utilitário mysqldump diretamente no banco de dados MySQL, usando as opções necessárias. No entanto, se você estiver exportando para importar os dados para um banco de dados do Cloud SQL, use o utilitário mysqldump com as seguintes flags:

  • --databases Especifica uma lista explícita de bancos de dados a serem exportados. Essa lista não pode conter os bancos de dados do sistema (sys, mysql, performance_schema e information_schema).
  • --hex-blob Se o banco de dados contiver campos binários, use essa flag para garantir que eles sejam importados corretamente.
  • --single-transaction Inicia uma transação antes de executar. Em vez de bloquear todo o banco de dados, isso permite que o mysqldump leia o banco de dados no estado atual, criando um despejo de dados consistente.
  • --routines Para incluir procedimentos e funções armazenados.
  • Ao usar a versão 8 ou mais recente do mysqldump para exportar bancos de dados MySQL de versões anteriores a 8:
    --column-statistics=0

    Essa flag remove a tabela COLUMN_STATISTICS da exportação do banco de dados para evitar o erro Unknown table 'COLUMN_STATISTICS' in information_schema (1109). Para mais informações, consulte Diagnosticar problemas.

Também recomendamos usar as seguintes flags:

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

Em uma máquina com conectividade de rede ao servidor MySQL, execute o seguinte 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 a origem da migração for um Relational Database Service (RDS) para MySQL:

  • A propriedade master-data não é compatível.
  • Se o servidor de banco de dados de origem for compatível com GTID, use a propriedade --set-gtid-purged=on. Caso contrário, não use essa propriedade.
  • Se você estiver usando um despejo manual para migrar os dados, execute a migração com o GTID ativado.

Esse comando pode se parecer com o seguinte exemplo:

    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

Além disso, configure instâncias RDS para reter binlogs por mais tempo. Esse comando pode se parecer com o seguinte exemplo:

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

Substitua [PROPERTIES_IN_BRACKETS] pelos seguintes valores:

Propriedade Valor
[SOURCE_ADDR] O endereço IPv4 ou o nome do host do servidor de banco de dados de origem.
[SOURCE_PORT] A porta do servidor de banco de dados de origem.
[USERNAME] A conta de usuário do MySQL.
[DBS] Uma lista separada por espaços dos bancos de dados no servidor de banco de dados de origem a serem incluídos no despejo. Use o comando SHOW DATABASES do MySQL para listar seus bancos de dados.
[BUCKET_NAME] O bucket no Cloud Storage criado pelo usuário e usado para armazenar o arquivo dump (por exemplo, replica-bucket).
[DUMP_FILENAME] O nome do arquivo de despejo, que termina com uma extensão de arquivo .gz (por exemplo, source-database.sql.gz).

A seguir

Para conferir um tutorial completo e detalhado da migração, consulte Introdução às migrações do Cloud SQL para MySQL.