Como migrar usuários da Oracle para o Cloud SQL para MySQL: segurança, operações, monitoramento e geração de registros

Este documento faz parte de uma série que fornece informações importantes e orientações relacionadas ao planejamento e à execução de migrações de banco de dados Oracle® 11g/12c para Cloud SQL para MySQL versão 5.7, em instâncias de segunda geração. A série inclui as partes a seguir:

Segurança

Nesta seção, explicamos as diferenças na criptografia de dados entre o Oracle Cloud SQL para MySQL e falamos sobre a auditoria do controle de acesso do Cloud SQL para MySQL.

Criptografia de dados da Oracle

Além da autenticação básica de usuários e do gerenciamento de privilégios de usuário, a Oracle oferece o mecanismo de criptografia de dados transparente (TDE, na sigla em inglês) para adicionar uma camada de criptografia extra para segurança de dados em repouso no nível do sistema operacional. Depois de configurado, o Oracle TDE é implementado pelo sistema automaticamente e não requer nenhuma interação manual dos usuários. Para implementar o Oracle TDE, recomendamos configurá-lo explicitamente (por comando) nos objetos de banco de dados obrigatórios e compatíveis, que podem aceitar esse tipo de criptografia, por exemplo, tabelaspace, tabela ou coluna. Para lidar com a segurança de dados em trânsito, recomendamos que você implemente uma solução de segurança de rede.

Criptografia de dados do Cloud SQL para MySQL

O Google Cloud fornece várias camadas de criptografia para proteger os dados do cliente em repouso nos produtos do Google Cloud, incluindo o Cloud SQL. O Cloud SQL é criptografado usando o padrão AES-128 ou AES-256. Para mais informações, consulte o tópico a seguir sobre criptografia em repouso. Ao contrário da criptografia da Oracle (que precisa ser implementada por meio de ações de configuração), o Google Cloud criptografa os dados do cliente em repouso, sem nenhuma ação necessária. Do ponto de vista da conversão de esquema, nenhuma ação é necessária, e a criptografia permanece transparente para o usuário.

Para entender melhor como o Google Cloud lida com a criptografia de dados em trânsito, consulte Como a criptografia é gerenciada para dados em trânsito.

Auditoria

A Oracle fornece vários métodos de auditoria, como a padrão e a refinada. Por outro lado, por padrão, o MySQL não fornece soluções de auditoria equivalentes. Para superar essa limitação, use os painéis e o monitoramento do Google Cloud, mas, para capturar operações DML/DDL do banco de dados, use os registros de consulta lenta, geral e de erro como uma solução de auditoria mais robusta.

Para implementar essa solução, recomendamos que você use a instância FLAGS para ativar o registro de consulta lenta e o registro geral. Além disso, você precisa gerenciar a retenção desses registros de acordo com suas necessidades de negócios.

Use os registros de auditoria do Google Cloud para coletar informações de auditoria. Esses registros abrangem três níveis principais:

  • Registros de auditoria de atividade do administrador (ativados por padrão)
  • Registros de auditoria de acesso a dados (desativados por padrão)
    • Leia sobre como configurar registros de acesso a dados.
    • Os registros de auditoria de acesso a dados não registram operações desse tipo em recursos que podem ser acessados sem fazer login no Google Cloud.
  • Registros de auditoria de eventos do sistema (ativados por padrão)

Como visualizar registros de auditoria do Google Cloud

Este é o caminho de acesso para visualizar registros de auditoria: Console do Google Cloud > Início > Atividade

É possível filtrar a granularidade de informações entre os níveis de auditoria. A captura de tela a seguir mostra uma auditoria de atividade do administrador.

Granularidade de filtragem entre os níveis de auditoria.

Página do Cloud Logging

Este é o caminho de acesso para a página de geração de registros: Console do Google Cloud > Cloud Logging

É possível filtrar a granularidade de informações entre os tipos de registro. A captura de tela a seguir mostra uma auditoria de registro geral (dados de auditoria para usuário, host e instrução SQL).

Registro de auditoria geral.

Controle de acesso do Cloud SQL para MySQL

Os usuários podem se conectar à instância do Cloud SQL para MySQL usando um cliente MySQL com um endereço IP estático autorizado ou usando o Cloud SQL Proxy, de maneira semelhante a qualquer outra conexão de banco de dados. Para outras fontes de conexão, como o App Engine ou o Compute Engine, os usuários têm várias opções, como o Cloud SQL Proxy. Essas opções são descritas com mais detalhes em Controle de acesso à instância.

Operações

Nesta seção, falaremos sobre a exportação e importação, o backup e a restauração no nível da instância, o programador de eventos do MySQL (para jobs de banco de dados) e as instâncias em espera para operações somente leitura e recuperação de desastres.

Exportar e importar

O principal método da Oracle para executar operações lógicas de exportação e importação é o utilitário Data Pump, usando o método EXPDP/IMPDP. Uma versão mais antiga da funcionalidade de exportação/importação da Oracle incluía o exp e imp. Os comandos equivalentes do MySQL são os utilitários mysqldump e mysqlimport, que geram arquivos dump e realizam a importação no nível do banco de dados ou do objeto (incluindo a exportação e importação de metadados).

Não há uma solução equivalente direta do MySQL para o utilitário Oracle DBMS_DATAPUMP, o método Oracle para aplicar a funcionalidade EXPDP/IMPDP que interage diretamente com o pacote DBMS_DATAPUMP. Para converter do código Oracle DBMS_DATAPUMP PL/SQL, use um código alternativo (por exemplo, Bash ou Python) para implementar elementos lógicos e use MySQL mysqldump e mysqlimport para executar operações de exportação/importação.

Os utilitários mysqldump e mysqlimport do MySQL são executados no nível do cliente, como parte dos programas clientes do MySQL, conectando-se remotamente à instância do Cloud SQL para MySQL. Os arquivos dump são criados no lado do cliente.

mysqldump:

Um utilitário cliente executa backups lógicos e importações de dados (como sql). Isso produz um conjunto de instruções SQL que podem ser executadas para reproduzir as definições originais do objeto do banco de dados e os dados da tabela. O utilitário mysqldump também pode gerar saída no formato CSV, em outro texto delimitado ou em formato XML. A principal vantagem desse formato de saída é que ele permite que você visualize ou edite a saída de exportação antes de restaurar, porque é um arquivo de texto. A principal desvantagem é que ele não é uma solução rápida ou escalonável para fazer backup de quantidades significativas de dados.

Uso do mysqldump:

-- Single database backup & specific tables backup
# mysqldump database_name > outpitfile.sql
# mysqldump database_name tbl1 tbl2 > outpitfile.sql

-- Back up all databases
# mysqldump --all-databases > all_databases.sql

-- Ignore a given table
# mysqldump --databases db1 --ignore-table db1.tbl > outpitfile.sql

-- Back up metadata only - Schema only
# mysqldump --no-data db1 > bck.sql

-- Include stored procedures and functions (routines)
# mysqldump db1 --routines > db1.sql

-- Back up only rows by a given WHERE condition
# mysqldump db1 tbl1 --where="col1=1" > bck.sql

-- Include triggers for each dumped table (default)
# mysqldump db1 tbl1 —triggers > bck.sql

mysqlimport:

Este é um programa cliente que fornece uma interface de linha de comando para a instrução SQL LOAD DATA INFILE. mysqlimport é usado com frequência para importar dados de um arquivo de texto ou CSV para uma tabela MySQL com uma estrutura correspondente. O Carregador Oracle SQL*Loader pode ser convertido em mysqlimport porque ambos compartilham a mesma funcionalidade de carregamento de dados de um arquivo externo.

Uso do mysqlimport:

-- Example of loading data from a CSV file into a table:
-- Create a table named csv_file
mysql> create table file(col1 int, col2 varchar(10));

-- Create a CSV file (delimited by tab)
# echo 1    A > file.csv
# echo 2    B >> file.csv
# echo 3    C >> file.csv

-- Import the CSV file into the csv_file table
-- Note that the file and table name must be named identically
# mysqlimport -u USER -p -h HOSTNAME/IP DB_NAME --local file.csv
csv_file: Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

-- Verify
# mysql -u USER -p -h HOSTNAME/IP DB_NAME -e "SELECT * FROM file"
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

-- Example of using LOAD DATA INFILE to load a CSV file (using the same
   table from the previous example, with the CSV delimiter defined by
   comma)
mysql> LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE file
       FIELDS TERMINATED BY ','
       LINES TERMINATED BY '\n' (col1, col2);

mysql> SELECT * FROM file;
+------+------+
| col1 | col2 |
+------+------+
|    1 | A    |
|    2 | B    |
|    3 | C    |
+------+------+

Exportação/importação do Cloud SQL para MySQL:

Os links da documentação a seguir ilustram como usar o gsutil/gcloud para interagir com a instância do Cloud SQL e com o Cloud Storage para aplicar as operações de exportação e importação.

Backup e restauração no nível da instância

É uma operação simples para migrar do Oracle RMAN ou do Data Pump e incluir mais opções de backup e restauração (por exemplo, instantâneos de VM, backup frio ou ferramentas de terceiros) para o Cloud SQL para MySQL. Nenhum outro código ou conhecimento é necessário. Gerencie esse processo usando o console do Google Cloud ou a Google Cloud CLI. Os exemplos anteriores foram compilados com instâncias do Cloud SQL de segunda geração.

Os tipos de métodos de backup do banco de dados MySQL são backups sob demanda e backups automáticos.

Use a restauração da instância do banco de dados do Cloud SQL para MySQL para restaurar a mesma instância, substituir os dados atuais ou restaurar para uma instância diferente. O Cloud SQL para MySQL também permite restaurar um banco de dados MySQL para um momento específico usando a geração de registros binários com a opção de backup automatizado ativada.

O Cloud SQL para MySQL permite clonar uma versão independente do banco de dados de origem. Esse recurso se aplica somente ao banco de dados primário (mestre) ou a outro clone e não pode ser retirado de uma instância de réplica de leitura. Também é possível usar esse recurso para restaurar uma instância do MySQL a partir de um ponto no tempo, permitindo a recuperação de dados, se necessário. É possível aplicar a restauração do banco de dados do Cloud SQL para MySQL usando o console do Google Cloud ou a CLI gcloud.

Programador de eventos do MySQL (jobs de banco de dados)

Para iniciar procedimentos predefinidos do banco de dados, a funcionalidade do programador de eventos do MySQL é equivalente ao Oracle DBMS_JOBS ou ao Oracle DBMS_SCHEDULER. Por padrão, o parâmetro de banco de dados event_scheduler é definido como OFF. Se necessário, mude-o para ON usando sinalizações do Cloud SQL.

Use o programador de eventos do MySQL para executar um comando DML/DDL explícito ou programar uma função ou procedimento armazenado em um horário específico e com uma determinada lógica.

Consideração de conversão para Oracle DBMS_JOBS ou DBMS_SCHEDULER:

Todos os jobs da Oracle precisam ser convertidos em sintaxe e funcionalidade do MySQL manualmente ou usando ferramentas de conversão PL/SQL disponíveis comercialmente.

Use a seguinte instrução para verificar o valor atual do parâmetro event_scheduler de uma execução do cliente:

mysql> SHOW VARIABLES LIKE '%event_s%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| event_scheduler | ON    |
+-----------------+-------+

Exemplos do programador de eventos:

  • Oracle DBMS_SCHEDULER

    SQL> BEGIN
    DBMS_SCHEDULER.CREATE_JOB (
       job_name             => 'job_sessions_1d_del',
       job_type             => 'PLSQL_BLOCK',
       job_action           => 'BEGIN DELETE FROM sessions WHERE
                                      session_date < SYSDATE - 1;
                                END;',
       start_date           => SYSTIMESTAMP,
       repeat_interval      => 'FREQ=DAILY',
       end_date             => NULL,
       enabled              =>  TRUE,
       comments             => 'Deletes last day data from the sessions table');
    END;
    /
    
  • Conversão de eventos do MySQL:

    mysql> CREATE EVENT job_sessions_1d_del
           ON SCHEDULE EVERY 1 DAY
           COMMENT 'Deletes last day data from the sessions table'
           DO
           DELETE FROM sessions
              WHERE session_date < DATE_SUB(SYSDATE(), INTERVAL 1 DAY);
    
  • Metadados do programador de eventos do MySQL:

    mysql> SELECT * FROM INFORMATION_SCHEMA.EVENTS \G;
    
    -- OR
    
    mysql> SHOW EVENTS FROM HR;
    

Instâncias em espera para operações somente leitura e implementação de recuperação de desastres

O Oracle Active DataGuard permite que uma instância em espera atue como um endpoint somente leitura enquanto os novos dados ainda estão sendo aplicados por meio dos registros de refazer e arquivar. Também é possível usar o Oracle GoldenGate para ativar mais uma instância para fins de leitura enquanto as modificações de dados são aplicadas em tempo real, servindo como uma solução de captura de dados de alteração (CDC, na sigla em inglês).

O Cloud SQL para MySQL é compatível com a separação de leitura/gravação usando réplicas de leitura para direcionar todas as leituras ou cargas de trabalho analíticas a partir de uma fonte alternativa quase em tempo real. É possível aplicar configurações para réplicas de leitura do Cloud SQL para MySQL usando o console do Google Cloud ou a ferramenta.

O Cloud SQL para MySQL é compatível com outras opções de replicação: replicar para uma instância externa do MySQL e replicar de uma instância externa do MySQL.

É possível implementar o Oracle Active DataGuard e o Oracle GoldenGate como uma solução de recuperação de desastres (DR), adicionando uma instância em espera já sincronizada com a instância principal.

As réplicas de leitura do Cloud SQL para MySQL não servem como instâncias em espera para cenários de DR. Para isso, o Cloud SQL permite configurar uma instância do MySQL para alta disponibilidade (usando o console do Google Cloud ou a CLI gcloud).

Algumas operações podem exigir uma reinicialização da instância, por exemplo, a adição de alta disponibilidade a uma instância principal. A partir da perspectiva de um SLA de alta disponibilidade (HA, na sigla em inglês), se a primária não responder por aproximadamente 60 segundos, a instância de espera de alta disponibilidade estará disponível após a reconexão. Para ativar a alta disponibilidade para o Cloud SQL para MySQL, consulte estas instruções.

Registro e monitoramento

O arquivo de registros de alerta da Oracle é a principal fonte para identificar eventos gerais do sistema e eventos de erro para entender qualquer ciclo de vida da instância do banco de dados da Oracle, principalmente para solucionar problemas de eventos de falha e de erro.

O registro de alertas da Oracle exibe informações sobre o seguinte:

  • Erros e avisos da instância do banco de dados Oracle (ORA- + número do erro).
  • Eventos de inicialização e encerramento da instância do banco de dados Oracle.
  • Problemas relacionados a rede e conexão.
  • Eventos de alternância de registros de refazer do banco de dados.
  • Os arquivos de rastreamento da Oracle podem ser mencionados com um link para mais detalhes sobre um evento de banco de dados específico.

Além disso, a Oracle fornece arquivos de registro dedicados para diferentes serviços, como LISTENER, ASM e Enterprise Manager (OEM), que não têm componentes equivalentes no Cloud SQL para MySQL.

Tipos de registro do Cloud SQL para MySQL:

Tipo de registro do MySQL Descrição Observações
Registro de atividades Contém dados sobre chamadas de API ou outras ações administrativas que modificam a configuração ou os metadados de uma instância do Cloud SQL para MySQL. Esse é um dos três registros no grupo do Cloud Audit Logs.
Registro de acesso a dados Contém dados sobre chamadas de API que leem a configuração ou os metadados de recursos, bem como chamadas de API orientadas pelo usuário que criam, modificam ou leem dados de recursos fornecidos pelo usuário. Esse é um dos três registros no grupo do Cloud Audit Logs. Esse registro grava apenas operações de acesso a dados em instâncias do MySQL para eventos que podem ser acessados sem fazer login no Google Cloud.

mysql.err
Este é o arquivo de registro principal do MySQL, que pode ser comparado com o registro de alertas da Oracle. Os dois registros contêm eventos da instância do banco de dados, inicialização e desligamento, além de eventos de erro e aviso. Guia de mensagens de erro do MySQL 5.7.

mysql-slow.log
O registro de consulta lenta do MySQL coleta dados em consultas que excedem a configuração predefinida, como cada consulta que tem um ambiente de execução maior que 2 segundos (o padrão é 10 segundos). Essa configuração está desativada por padrão. Para ativar esse registro, defina as seguintes variáveis (parâmetros do banco de dados):

  • slow_query_log
  • long_query_time

mysql-general.log
Esse registro coleta dados sobre conexões e desconexões de clientes e em qualquer instrução SQL executada na instância do banco de dados MySQL. Esse registro é útil para solucionar problemas e geralmente é alternado para OFF quando a operação é concluída. Desativado por padrão. Para ativar as variáveis general_log, deve ser definido como ON.
Registro binário O servidor MySQL usa a geração de registros binários para gravar todas as instruções que modificaram dados. Esse registro é usado principalmente para backup e replicação. Por padrão, o parâmetro de geração de registros binários é ativado no Cloud SQL para MySQL para permitir a recuperação e a implantação de réplicas de leitura. Para ativar a geração de registros binários, defina o parâmetro de configuração log_bin como ON.
Registro de redirecionamento Mantém as instruções recebidas dos registros binários primários para implementar todas as modificações de dados na instância subordinada (réplica de leitura). Aplica-se apenas a instâncias secundárias (escravas) e réplicas de leitura.

Como visualizar registros de operação do Cloud SQL para MySQL

O Cloud Logging é a plataforma principal para visualizar todos os detalhes do registro. É possível selecionar registros diferentes e filtrar por nível de evento de registro (por exemplo, crítico, erro ou aviso). O período do evento e a filtragem de texto livre também estão disponíveis.

Como visualizar registros no Cloud Logging

Exemplo

A captura de tela a seguir mostra como encontrar uma consulta específica no arquivo mysql-slow.log usando um período personalizado como um critério de filtro.

Como encontrar uma consulta no mysql-slow.log.

Monitoramento da instância do banco de dados MySQL

Os principais painéis de monitoramento da IU da Oracle fazem parte dos produtos OEM e Grid/Cloud Control (por exemplo, gráficos de atividades principais) e são úteis para o monitoramento de instâncias de banco de dados em tempo real no nível da sessão ou da instrução SQL. O Cloud SQL para MySQL fornece recursos de monitoramento semelhantes usando o console do Google Cloud. É possível ver informações resumidas sobre as instâncias do banco de dados do Cloud SQL para MySQL com várias métricas de monitoramento, como uso da CPU e de memória, operações de leitura/gravação, bytes de entrada/saída, conexões ativas e muito mais.

O Cloud Logging é compatível com outras métricas de monitoramento do Cloud SQL para MySQL. A captura de tela a seguir mostra o gráfico de consultas do MySQL das últimas 12 horas.

Gráficos de consulta do MySQL das últimas 12 horas.

Monitoramento de réplica de leitura do MySQL

É possível monitorar réplicas de leitura de maneira semelhante a uma instância principal usando as métricas de monitoramento do console do Google Cloud, conforme descrito anteriormente. Além disso, há uma métrica de monitoramento dedicada para monitorar o atraso de replicação, determinando o atraso entre a instância primária e a instância de réplica de leitura em segundos (pode ser monitorado a partir da guia de visão geral da instância de réplica de leitura no console do Google Cloud).

Use a CLI gcloud para recuperar o status de replicação:

gcloud sql instances describe REPLICA_NAME

Também é possível fazer o monitoramento de replicação usando comandos de um cliente MySQL, que fornece um status para os bancos de dados primário e subordinado e para o registro binário e o registro de redirecionamento.

Use a seguinte instrução SQL para verificar o status da réplica de leitura:

mysql> SHOW SLAVE STATUS;

Monitoramento do MySQL

Esta seção descreve métodos básicos de monitoramento do MySQL que são considerados tarefas rotineiras realizadas por um DBA (Oracle ou MySQL).

Monitoramento de sessão

O monitoramento de sessão da Oracle é feito consultando as visualizações de desempenho dinâmico conhecidas como visualizações "V$". As visualizações V$SESSION e V$PROCESS são usadas com frequência para receber insights em tempo real sobre a atividade atual do banco de dados, usando instruções SQL. É possível monitorar a atividade da sessão no MySQL usando comandos e instruções SQL. Por exemplo, o comando SHOW PROCESSLIST do MySQL fornece os seguintes detalhes sobre a atividade da sessão:

mysql> SHOW PROCESSLIST;

Também é possível consultar e filtrar os resultados de SHOW PROCESSLIST usando uma instrução SELECT:

mysql>  SELECT * FROM information_schema.processlist;

Monitoramento de transações longas

Para identificar transações de longa duração em tempo real que podem levar a problemas de desempenho, consulte a visualização dinâmica information_schema.innodb_trx. Essa visualização mostra registros apenas para transações abertas em execução na instância do banco de dados MySQL.

Monitoramento de bloqueio

É possível monitorar bloqueios de banco de dados usando a visualização dinâmica information_schema.innodb_locks, que fornece informações em tempo real sobre ocorrências de bloqueio que podem levar a problemas de desempenho.