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 Especifique uma lista explícita de bancos de dados para exportar. 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 tiver 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 funções e procedimentos armazenados.
  • Ao usar a versão 8 ou posterior do mysqldump para exportar bancos de dados MySQL de versões anteriores à 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 é recomendável usar as seguintes flags:

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

Em uma máquina com conectividade de rede com o 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 seus dados, faça 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 do dump, que termina com uma extensão de arquivo .gz (por exemplo, source-database.sql.gz).

A seguir

Para um tutorial completo e detalhado sobre migração, consulte Primeiros passos com as migrações do Cloud SQL para MySQL.