Como clonar um banco de dados MySQL no Compute Engine

Last reviewed 2019-10-08 UTC

Neste tutorial, mostramos duas maneiras de clonar um banco de dados MySQL em execução no Compute Engine. Um desses métodos usa snapshots do disco permanente. O outro método usa a exportação e a importação nativas do MySQL, transferindo o arquivo de exportação usando o Cloud Storage. O Cloud Storage é o serviço de armazenamento de objetos do Google Cloud. Ele oferece um armazenamento de arquivos simples, durável, mais seguro e altamente disponível.

Clonar é o processo de copiar um banco de dados para outro servidor. A cópia não depende do banco de dados de origem e é preservada como um snapshot pontual. Um banco de dados clonado pode ser usado com diversos objetivos sem sobrecarregar o servidor de produção ou comprometer a integridade dos dados de produção. Alguns desses objetivos são:

  • realização de consultas analíticas;
  • teste de carga ou de integração dos apps;
  • extração de dados para preencher o armazenamento de dados;
  • realização de experimentos nos dados.

Cada método de clonagem descrito neste tutorial tem vantagens e desvantagens. O método ideal depende da situação. A tabela a seguir destaca alguns dos principais problemas.

Problema Método 1: snapshots do disco Método 2: exportar e importar usando o Cloud Storage
É preciso maior espaço de disco nas instâncias do MySQL Não há necessidade de maior espaço de disco Na criação e restauração, é preciso maior espaço de disco para armazenamento do arquivo exportado
Carga extra em instâncias de origem do MySQL durante a clonagem Sem carga extra Carga extra na CPU e na E/S ao criar e fazer upload do arquivo de exportação
Duração da clonagem Relativamente rápida para bancos de dados grandes Relativamente lenta para bancos de dados grandes
Pode clonar de instâncias do MySQL externas ao Google Cloud Não Sim
Complexidade Uma sequência complexa de comandos para anexar discos clonados Um conjunto relativamente simples de comandos para clonagem
É possível aproveitar sistemas de backup atuais Sim, se o sistema de backup usar snapshots de disco do Google Cloud Sim, se o sistema de backup exportar arquivos para o Cloud Storage
Granularidade da clonagem É possível clonar apenas discos inteiros É possível clonar apenas o banco de dados especificado
Consistência de dados Consistente no momento do snapshot Consistente no ponto de exportação
Pode usar o Cloud SQL como origem Não Sim, se a mesma versão for usada
Pode usar o Cloud SQL como destino Não Sim

Neste tutorial, presumimos que você esteja familiarizado com a linha de comando do Linux e a administração do banco de dados MySQL.

Objetivos

  • Saiba como executar um banco de dados MySQL no Google Cloud.
  • Aprenda a criar um banco de dados de demonstração em um disco secundário.
  • Saiba como clonar um banco de dados MySQL usando snapshots de disco do Compute Engine.
  • Saiba como clonar um banco de dados MySQL transferindo um arquivo de exportação usando o Cloud Storage.
  • Saiba como clonar um banco de dados MySQL para o Cloud SQL transferindo um arquivo de exportação usando o Cloud Storage.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative a API Compute Engine.
  7. Ativar a API

Como configurar o ambiente

Para concluir este tutorial, é preciso configurar o ambiente de computação com o seguinte:

  • Uma instância do MySQL no Compute Engine (chamada mysql-prod) para representar o servidor de banco de dados de produção.
  • Um outro disco (chamado mysql-prod-data) anexado ao servidor de produção para armazenar o banco de dados de produção.
  • Uma cópia do banco de dados Employees importado para mysql-prod para simular o banco de dados de produção que você quer clonar.
  • Uma instância do MySQL no Compute Engine (chamada mysql-test) para representar o servidor de banco de dados de teste. Clone seu banco de dados neste servidor.

O diagrama a seguir ilustra essa arquitetura.

Diagrama que mostra a configuração para clonar um banco de dados MySQL neste tutorial.

Criar a instância de VM de produção

Para simular um ambiente de produção, configure uma instância de VM do Compute Engine executando o MySQL no Debian Linux.

A instância de VM deste tutorial usa dois discos: um de 50 GB para o SO e as contas de usuário e um de 100 GB para armazenamento de banco de dados.

No Compute Engine, o uso de discos separados não oferece benefícios de desempenho. O desempenho do disco é determinado pela capacidade total de armazenamento de todos os discos anexados a uma instância e pelo número total de vCPUs na instância de VM. Portanto, o banco de dados e o arquivo de registros podem residir no mesmo disco.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Defina sua zona de preferência:

    ZONE=us-east1-b
    REGION=us-east1
    gcloud config set compute/zone "${ZONE}"
    
  3. Crie uma instância do 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"
    

    Esse comando concede à instância acesso total às APIs do Google Cloud, cria um disco secundário de 100 GB e anexa esse disco à instância. Ignore o aviso de desempenho do disco porque este tutorial não requer alto desempenho.

Configurar o disco extra

O segundo disco anexado à instância de produção serve para armazenar o banco de dados de produção. Esse disco está em branco, então é preciso particioná-lo, formatá-lo e montá-lo.

  1. No console do Google Cloud, acesse a página Instâncias de VMs.

    Acessar a página "Instâncias de VM"

  2. Verifique se uma marca de seleção verde é exibida ao lado do nome da sua instância mysql-prod, indicando que ela está pronta.

  3. Clique no botão SSH ao lado da instância mysql-prod. O navegador abre uma conexão de terminal com a instância.

  4. Na janela do terminal, exiba uma lista de discos anexados à instância:

    lsblk
    

    A saída é esta:

    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
    

    O disco chamado sdb (100 GB) é seu disco de dados.

  5. Formate o disco sdb e crie uma única partição com um sistema de arquivos ext4:

    sudo mkfs.ext4 -m 0 -F -E lazy_itable_init=0,lazy_journal_init=0,discard \
        /dev/sdb
    
  6. Crie o diretório de dados do MySQL para ser o ponto de montagem do disco de dados:

    sudo mkdir -p /var/lib/mysql
    
  7. Para montar o disco automaticamente no ponto de montagem que você criou, adicione uma entrada ao arquivo /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. Monte o disco.

    sudo mount -av
    
  9. Remova todos os arquivos do disco de dados para que ele fique livre para ser usado pelo MySQL como um diretório de dados:

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

Instalar o servidor MySQL

Você precisa fazer o download e instalar o MySQL Community Edition. O diretório de dados do MySQL é criado no disco adicional.

  1. Na sessão SSH conectada a mysql-prod, faça o download e instale o pacote de configuração do 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. Quando solicitado, selecione a opção MySQL Server & Cluster e, em seguida, selecione mysql-5.7.

  3. Na lista, selecione a opção Ok para concluir a configuração do pacote.

  4. Atualize o cache do repositório e instale os pacotes mysql-community:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Quando você receber um aviso de que o diretório de dados já existe, selecione Ok.

  6. Quando for solicitado que você forneça uma senha raiz, crie e digite uma senha. Anote a senha ou armazene-a temporariamente em um lugar seguro.

Fazer download e instalar o banco de dados de amostra

  1. Na sessão SSH conectada à instância mysql-prod, instale o git:

    sudo apt-get install -y git
    
  2. Clone o repositório do GitHub que contém os scripts do banco de dados Employees:

    git clone https://github.com/datacharmer/test_db.git
    
  3. Altere o diretório para o diretório do script de banco de dados Employees:

    cd test_db
    
  4. Execute o script de criação do banco de dados Employees:

    mysql -u root -p -q < employees.sql
    

    Quando solicitado, digite a senha raiz que você criou anteriormente.

  5. Para verificar se o banco de dados de amostra está funcionando, execute uma consulta que conta o número de linhas na tabela employees:

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

    Quando solicitado, digite a senha raiz que você criou anteriormente.

    A saída é esta:

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

Criar a instância de VM de teste

Nesta seção, você criará uma instância de VM do MySQL chamada mysql-test como o destino do banco de dados clonado. A configuração desta instância é idêntica à instância de produção. No entanto, um segundo disco de dados não será criado. Em vez disso, o disco de dados será anexado mais adiante neste tutorial.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie a instância de teste do MySQL:

    gcloud compute instances create mysql-test \
      --machine-type=n1-standard-2 \
      --scopes=cloud-platform \
      --boot-disk-size=50GB \
      --boot-disk-device-name=mysql-test
    

    Ignore o aviso de desempenho do disco porque este tutorial não requer alto desempenho.

Instalar o servidor MySQL na instância da VM de teste

Você também precisa fazer o download e instalar o MySQL Community Edition na instância de VM mysql-test.

  1. Na sessão SSH conectada a mysql-test, faça o download e instale o pacote de configuração do 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. Quando solicitado, selecione a opção MySQL Server & Cluster e, em seguida, selecione mysql-5.7.

  3. Na lista, selecione a opção Ok para concluir a configuração do pacote.

  4. Atualize o cache do repositório e instale os pacotes mysql-community:

    sudo apt-get update
    sudo apt-get install -y mysql-community-server mysql-community-client
    
  5. Quando for solicitado que você forneça uma senha raiz, crie e digite uma senha. Anote a senha ou armazene-a temporariamente em um lugar seguro.

Como clonar o banco de dados usando snapshots de disco do Compute Engine

Uma maneira de clonar um banco de dados MySQL em execução no Compute Engine é armazená-lo em um disco de dados separado e usar snapshots de disco permanente para criar um clone desse disco.

Com os snapshots do disco permanente, é possível conseguir uma cópia pontual dos dados no disco. O agendamento de snapshots do disco é uma maneira de fazer backups automáticos dos dados.

Nesta seção do tutorial, siga as etapas abaixo.

  • Tire um snapshot do disco de dados do servidor de produção.
  • Crie um novo disco a partir do snapshot.
  • Monte o novo disco em um servidor de teste.
  • Reinicie o servidor MySQL na instância de teste para que o servidor use o novo disco como um disco de dados.

O diagrama a seguir mostra como um banco de dados é clonado usando snapshots de disco.

Diagrama que mostra a configuração para clonar um banco de dados MySQL usando snapshots de disco.

Criar o snapshot do disco

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um snapshot do seu disco de dados na mesma zona que a instância de VM:

    gcloud compute disks snapshot mysql-prod-data \
         --snapshot-names=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    

    Depois de alguns minutos, seu snapshot estará pronto.

Anexar o snapshot do disco à instância de teste

É preciso criar um novo disco de dados a partir do snapshot criado e, em seguida, anexá-lo à instância mysql-test.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um novo disco permanente usando o snapshot do disco de produção para os respectivos conteúdos:

    gcloud beta compute disks create mysql-test-data \
         --size=100GB \
         --source-snapshot=mysql-prod-data-snapshot \
         --zone="${ZONE}"
    
  3. Anexe o novo disco à instância mysql-test com permissões de leitura/gravação.

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

Ativar o novo disco de dados no Linux

Para usar o disco de dados clonado como o diretório de dados do MySQL, é necessário interromper a instância do MySQL e montar o disco.

  1. Na sessão SSH conectada a mysql-test, interrompa o serviço MySQL:

    sudo service mysql stop
    
  2. Na janela do terminal, exiba uma lista de discos anexados à instância:

    lsblk
    

    A saída é esta:

    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
    

    O disco chamado sdb (100 GB) é seu disco de dados.

  3. Monte o disco de dados do MySQL no diretório de dados do MySQL:

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

    Montar esse disco oculta todos os arquivos de configuração e espaços de tabela do MySQL, substituindo-os pelo conteúdo do disco.

    Com esse comando, o disco é montado temporariamente e não é desmontado na inicialização do sistema. Se você quiser montar o disco na inicialização do sistema, crie uma entrada fstab. Para mais informações, consulte Configurar o disco adicional anteriormente neste tutorial.

Iniciar o MySQL na instância de teste

  1. Na sessão SSH conectada a mysql-test, inicie o serviço MySQL:

    sudo service mysql start
    
  2. Para verificar se o banco de dados clonado está funcionando, execute uma consulta que conta o número de linhas na tabela employees:

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

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-prod. A senha raiz da instância de produção é obrigatória porque todo o diretório de dados do MySQL é um clone do diretório de dados da instância mysql-prod. Portanto, todos os bancos de dados, usuários do banco de dados e as senhas deles são copiados.

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

    O número de linhas é o mesmo da instância mysql-prod.

Agora que você já sabe como clonar um banco de dados usando snapshots de disco permanente, tente clonar um banco de dados usando a exportação e a importação. Para concluir o tutorial dessa segunda abordagem, é necessário desconectar o disco clonado.

Desmontar o disco clonado

Para desmontar o disco clonado que você criou usando snapshots de disco, siga estas etapas:

  1. Na sessão SSH conectada à instância mysql-test, interrompa o serviço MySQL:

    sudo service mysql stop
    
  2. Desmonte o disco de dados clonado do diretório de dados do MySQL:

    sudo umount /var/lib/mysql
    
  3. Reinicie o serviço do MySQL:

    sudo service mysql start
    

Como clonar usando exportação e importação

Um segundo método de clonagem de um banco de dados MySQL em execução no Compute Engine é usar a exportação nativa do MySQL (usando mysqldump) e a importação. Com essa abordagem, você transfere o arquivo de exportação usando o Cloud Storage.

Nesta seção do tutorial, você usará os recursos criados na seção Como clonar o banco de dados usando snapshots de disco do Compute Engine. Se você não concluiu essa seção, faça isso antes de continuar.

Nesta seção do tutorial, siga as etapas abaixo.

  • Criar um bucket do Cloud Storage
  • Exporte o banco de dados na instância de produção, gravando-o no Cloud Storage.
  • Importe o arquivo de exportação para a instância de teste, lendo-o do Cloud Storage.

O diagrama a seguir mostra como um banco de dados é clonado transferindo uma exportação usando o Cloud Storage.

Diagrama que mostra a configuração para clonar um banco de dados MySQL usando o Cloud Storage.

Como os sistemas fora do Google Cloud podem receber acesso ao Cloud Storage, use essa abordagem para clonar bancos de dados de instâncias externas do MySQL.

Crie um bucket do Cloud Storage

Você precisa criar um intervalo do Cloud Storage que armazene os arquivos de exportação enquanto os transfere da instância mysql-prod para a instância mysql-test.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie um bucket do Cloud Storage na mesma região das instâncias de VM:

    gsutil mb -l "${REGION}" "gs://$(gcloud config get-value project)-bucket"
    

Exportar o banco de dados

No seu ambiente de produção, talvez você já faça backups usando arquivos de exportação mysqldump. Esses backups podem ser usados como base para clonar o banco de dados.

Neste tutorial, você cria um novo arquivo de exportação usando mysqldump, que não afeta as programações de backup completo ou incremental.

  • Na sessão SSH conectada à instância mysql-prod, exporte o banco de dados Employees, fazendo streaming dele para um objeto do Cloud Storage no intervalo criado anteriormente:

    mysqldump --user=root -p --default-character-set=utf8mb4 --add-drop-database --verbose  --hex_blob \
        --databases employees |\
         gsutil cp - "gs://$(gcloud config get-value project)-bucket/employees-dump.sql"
    

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-prod.

    Use o conjunto de caracteres utf8mb4 na exportação para evitar problemas de codificação de caracteres.

    A opção --add-drop-database é usada para que as instruções DROP DATABASE e CREATE DATABASE sejam incluídas na exportação.

Importar o arquivo exportado

  1. Na sessão SSH conectada à instância mysql-test, faça streaming do arquivo exportado do intervalo do Cloud Storage para o aplicativo de linha de comando mysql:

    gsutil cat "gs://$(gcloud config get-value project)-bucket/employees-dump.sql" |\
        mysql --user=root -p --default-character-set=utf8mb4
    

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-test.

    Use o conjunto de caracteres utf8mb4 na importação para evitar problemas de codificação de caracteres.

  2. Para verificar se o banco de dados clonado está funcionando, execute uma consulta que conta o número de linhas na tabela employees:

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

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-test.

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

    O número de linhas é o mesmo da instância mysql-prod.

Como usar o Cloud SQL como destino de clonagem

Se o banco de dados de destino estiver hospedado no Cloud SQL e o banco de dados de origem estiver no Compute Engine, o único mecanismo compatível com a clonagem será exportar o banco de dados para o Cloud Storage e importá-lo para o Cloud SQL.

Conforme explicado na documentação do Cloud SQL, o Cloud SQL só pode importar o arquivo exportado quando ele não contém acionadores, procedimentos armazenados, visualizações ou funções.

Se o banco de dados exigir esses elementos, exclua-os da exportação usando os argumentos de linha de comando --skip-triggers e --ignore-table [VIEW_NAME] e, em seguida, recrie-os manualmente após a importação.

Criar uma instância do Cloud SQL para MySQL

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Crie uma instância do Cloud SQL para MySQL executando a mesma versão do banco de dados da instância mysql-prod:

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

    Após alguns minutos, o banco de dados do Cloud SQL é criado.

  3. Redefina a senha do usuário raiz para um valor conhecido:

    gcloud sql users set-password root \
        --host=% --instance=mysql-cloudsql  --prompt-for-password
    

    Quando for solicitado que você forneça uma senha raiz, crie e digite uma senha. Anote a senha ou armazene-a temporariamente em um lugar seguro.

Exportar o banco de dados

Para exportar o banco de dados em um formato adequado para importação no Cloud SQL, exclua todas as visualizações no banco de dados.

  1. Na sessão SSH conectada à instância mysql-prod, defina uma variável de ambiente contendo um conjunto de argumentos de linha de comando para o comando mysqldump para que ele ignore as visualizações no banco de dados 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}';
        \"`"
    

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-prod.

  2. Veja o conteúdo da variável para verificar se eles foram definidos corretamente:

    echo "${IGNORE_TABLES_ARGS}"
    
    --ignore-table employees.current_dept_emp
    --ignore-table employees.dept_emp_latest_date
    
  3. Exporte o banco de dados Employees, excluindo acionadores e visualizações, fazendo streaming dele diretamente para um objeto do Cloud Storage no intervalo criado 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 |\
        gsutil cp - "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-prod.

Atualizar permissões do objeto

As permissões corretas precisam ser definidas no intervalo do Cloud Storage e no objeto de exportação para que a conta de serviço do Cloud SQL possa lê-las. Essas permissões são definidas automaticamente quando você usa o Console do Google Cloud para importar o objeto ou podem ser definidas usando comandos gcloud.

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Defina uma variável de ambiente contendo o endereço da conta de serviço da instância do Cloud SQL:

    CLOUDSQL_SA="$(gcloud sql instances describe mysql-cloudsql --format='get(serviceAccountEmailAddress)')"
    
  3. Adicione a conta de serviço à ACL do bucket como um gravador e ao objeto de exportação como um leitor:

    gsutil acl ch -u "${CLOUDSQL_SA}":W "gs://$(gcloud config get-value project)-bucket/"
    gsutil acl ch -u "${CLOUDSQL_SA}":R \
        "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

Importar o banco de dados exportado

  1. Abra o Cloud Shell.

    Abra o Cloud Shell

  2. Importe o arquivo exportado para sua instância do Cloud SQL:

    gcloud sql import sql mysql-cloudsql \
        "gs://$(gcloud config get-value project)-bucket/employees-cloudsql-import.sql"
    

    Quando solicitado, digite y.

  3. Para verificar se o banco de dados clonado está funcionando, execute uma consulta que conta o número de linhas na tabela employees:

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

    Quando solicitado, digite a senha raiz do servidor de banco de dados mysql-cloudsql.

    A saída é esta:

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

    O número de linhas é o mesmo da instância mysql-prod.

Informações adicionais para sistemas de produção

Como usar snapshots de disco

Para backups físicos (como snapshots de disco), a documentação do MySQL recomenda que você pause as gravações no banco de dados antes de tirar um snapshot. Para isso, use o comando FLUSH TABLES WITH READ LOCK. Quando o snapshot estiver concluído, você poderá usar UNLOCK TABLES para reiniciar as gravações.

Para bancos de dados que usam tabelas do InnoDB, recomendamos que você tire o snapshot diretamente sem executar primeiro o comando FLUSH TABLES WITH READ LOCK. Isso permite que o banco de dados permaneça em execução sem efeitos nocivos, mas o snapshot pode estar em um estado inconsistente. No entanto, se isso ocorrer, o mecanismo do InnoDB poderá recriar as tabelas para um estado consistente quando o clone for iniciado.

Para bancos de dados que usam tabelas MyISAM, a execução do comando FLUSH TABLES WITH READ LOCK bloqueia todas as gravações nas tabelas, tornando seu banco de dados somente leitura até que você execute o comando UNLOCK TABLES.

Se você tirar um snapshot sem liberar e bloquear as tabelas, há o risco de que o banco de dados recém-clonado tenha dados inconsistentes ou seja corrompido.

Portanto, para obter um instantâneo consistente nos bancos de dados usando as tabelas MyISAM, recomendamos que você execute FLUSH TABLES WITH READ LOCK em uma réplica de leitura e capturar um snapshot dessa réplica para que o desempenho do banco de dados primário (mestre) não seja afetado.

Como usar o comando mysqldump

Para criar um arquivo de exportação consistente com o banco de dados de origem, o comando mysqldump bloqueia todas as tabelas durante a operação de exportação. Isso significa que as gravações no banco de dados são bloqueadas enquanto o banco de dados está sendo exportado.

Portanto, recomendamos executar o comando mysqldump em uma réplica de leitura do banco de dados primário para que o primário não seja bloqueado.

Limpeza

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados neste tutorial, exclua o projeto do Google Cloud criado para este tutorial.

  1. No Console do Google Cloud, acesse a página Gerenciar recursos.

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

A seguir