Migra usuarios de Oracle a Cloud SQL para MySQL: seguridad, operaciones, supervisión y registro

Este documento es parte de una serie que proporciona información clave y orientación relacionada con la planificación y la realización de migraciones de bases de datos de Oracle® 11g o 12c a instancias de segunda generación con versión 5.7 de Cloud SQL para MySQL. En la serie, se incluyen las siguientes partes:

Seguridad

En esta sección, se explican las diferencias en la encriptación de datos entre Oracle y Cloud SQL para MySQL y se analiza la auditoría del control de acceso de Cloud SQL para MySQL.

Encriptación de datos de Oracle

Además de la autenticación básica de usuarios y la administración de privilegios de usuario, Oracle ofrece el mecanismo de TDE (encriptación de datos transparente) a fin de agregar una capa de encriptación adicional para la seguridad de datos en reposo a nivel del sistema operativo. Una vez configurado, el sistema implementa de forma automática la TDE de Oracle y no requiere ninguna interacción manual de los usuarios. A fin de implementar la TDE de Oracle, te recomendamos configurarla de manera explícita (por comando) en los objetos de base de datos obligatorios y compatibles que pueden aceptar este tipo de encriptación, por ejemplo, espacio de tabla, tabla o columna. Para controlar la seguridad de los datos en tránsito, te recomendamos que implementes una solución de seguridad de red.

Encriptación de datos de Cloud SQL para MySQL

Google Cloud proporciona varias capas de encriptación para proteger los datos en reposo de los clientes en los productos de Google Cloud, incluido Cloud SQL. Cloud SQL se encripta con la encriptación AES-128 o AES-256. Para obtener más información, consulta el siguiente tema sobre encriptación en reposo. A diferencia de la encriptación de Oracle (que debe implementarse a través de acciones de configuración), Google Cloud encripta los datos en reposo del cliente, sin que se requiera ninguna acción. Desde la perspectiva de la conversión de esquema, no se requieren acciones, y la encriptación sigue siendo transparente para el usuario.

Para comprender mejor cómo Google Cloud controla la encriptación de datos en tránsito, consulta ¿Cómo se administra la encriptación de los datos en tránsito?.

Auditoría

Oracle proporciona varios métodos para la auditoría, como auditorías estándar y detalladas. Por el contrario, MySQL no proporciona soluciones de auditoría equivalentes de forma predeterminada. A fin de superar esta limitación, puedes usar los paneles y la supervisión de Google Cloud, pero para capturar operaciones de DML/DDL de la base de datos, puedes usar los registros lentos de consulta, generales y de errores como una solución de auditoría más sólida.

Para implementar esta solución, te recomendamos que uses la instancia FLAGS a fin de habilitar el registro de consultas lento y el registro general. Además, debes administrar la retención de estos registros según las necesidades de tu negocio.

Puedes usar los registros de auditoría de Google Cloud para recopilar información de auditoría. Estos registros abarcan tres niveles principales:

  • Registros de auditoría de actividad del administrador (habilitados de forma predeterminada)
  • Registros de auditoría de acceso a los datos (inhabilitados de forma predeterminada)
    • Obtén más información para configurar registros de acceso a los datos.
    • Ten en cuenta que, en los registros de auditoría de acceso a los datos, no se registran las operaciones de acceso a los datos en recursos a los que se puede acceder sin acceder a Google Cloud.
  • Registros de auditoría de eventos del sistema (habilitados de forma predeterminada)

Visualiza los registros de auditoría de Google Cloud

Esta es la ruta de acceso para ver los registros de auditoría: Consola de Google Cloud > Página principal > Actividad

Puedes filtrar el nivel de detalle de la información entre los niveles de auditoría. En la siguiente captura de pantalla, se muestra una auditoría de actividad del administrador.

Filtrado del nivel de detalle entre los niveles de auditoría.

Página de Cloud Logging

Esta es la ruta de acceso para la página de registro: Consola de Google Cloud > Cloud Logging

Puedes filtrar el nivel de detalle de la información entre los tipos de registros. En la siguiente captura de pantalla, se muestra una auditoría de registro general (datos de auditoría para el usuario, el host y la instrucción de SQL).

Registro de auditoría general.

Control de acceso de Cloud SQL para MySQL

Los usuarios pueden conectarse a la instancia de Cloud SQL para MySQL mediante un cliente MySQL con una dirección IP estática autorizada o con el proxy de Cloud SQL, de manera similar a cualquier otra conexión de base de datos. Para otras fuentes de conexión, como App Engine o Compute Engine, los usuarios tienen varias opciones, como el uso del proxy de Cloud SQL. Estas opciones se describen con más detalle en Control de acceso a instancias.

Operaciones

En esta sección, se analizan la importación y exportación, la copia de seguridad y restablecimiento a nivel de instancia, el programador de eventos de MySQL (para trabajos de base de datos) y las instancias en espera para operaciones de solo lectura y recuperación ante desastres.

Importa y exporta

El método principal de Oracle para realizar operaciones lógicas de importación y exportación es la utilidad Data Pump, con los comandos EXPDP o IMPDP (una versión anterior de la funcionalidad de importación y exportación de Oracle incluía los comandos exp y imp). Los comandos equivalentes de MySQL son las utilidades mysqldump y mysqlimport, que generan archivos de volcado y, luego, realizan la importación a nivel de base de datos o de objeto (incluidas solo las exportaciones y las importaciones de metadatos).

No hay una solución directa equivalente de MySQL a la utilidad DBMS_DATAPUMP de Oracle (el método de Oracle para aplicar la funcionalidad EXPDP y IMPDP que interactúa directamente con el paquete DBMS_DATAPUMP). Con el fin de convertir el código PL/SQL DBMS_DATAPUMP de Oracle, usa un código alternativo (por ejemplo, Bash o Python) para implementar elementos lógicos y usa mysqldump y mysqlimport de MySQL a fin de ejecutar operaciones de importación y exportación.

Las utilidades mysqldump y mysqlimport de MySQL se ejecutan a nivel de cliente (como parte de los programas de cliente de MySQL) y se conectan de forma remota a la instancia de Cloud SQL para MySQL. La creación de los archivos de volcado se realiza por parte del cliente.

mysqldump:

Una utilidad de cliente realiza copias de seguridad lógicas e importa datos (como sql). Esto produce un conjunto de instrucciones de SQL que pueden ejecutarse para reproducir los datos de la tabla y las definiciones de objetos de la base de datos original. La utilidad mysqldump también puede generar resultados en formato CSV, en otro texto delimitado o en formato XML. La ventaja principal de este formato de salida es que te permite ver o editar el resultado de la exportación antes de restablecerlo, ya que es un archivo de texto. La principal desventaja es que no está pensado como una solución rápida o escalable para crear copias de seguridad de cantidades considerables de datos.

Uso de 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 es un programa cliente que proporciona una interfaz de línea de comandos para la instrucción de SQL LOAD DATA INFILE. mysqlimport se usa con frecuencia para importar datos de archivos de texto o CSV a una tabla de MySQL con una estructura correspondiente. Oracle SQL*Loader puede convertirse en mysqlimport, ya que ambos comparten la misma funcionalidad de carga de datos desde un archivo externo.

Uso de 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    |
+------+------+

Importación y exportación de Cloud SQL para MySQL:

En los siguientes vínculos de documentación, se ilustra la manera de usar gsutil/gcloud a fin de interactuar con la instancia de Cloud SQL y Cloud Storage para aplicar operaciones de importación y exportación.

Copia de seguridad y restablecimiento a nivel de instancia

Es sencillo migrar desde el volcado de datos o el RMAN de Oracle y, también, incluir opciones adicionales de copia de seguridad y restablecimiento (por ejemplo, instantáneas de VM, copias de seguridad en frío o herramientas de terceros) en Cloud SQL para MySQL. No se requieren conocimientos ni código adicionales. Puedes administrar este proceso con la consola de Google Cloud o Google Cloud CLI. Los ejemplos anteriores se compilaron con instancias de Cloud SQL de segunda generación.

Los tipos de métodos de copia de seguridad de la base de datos de MySQL son copias de seguridad a pedido y copias de seguridad automáticas.

Puedes usar el restablecimiento de la instancia de base de datos de Cloud SQL para MySQL a fin de restablecer a la misma instancia, reemplazar los datos existentes o restablecer a una instancia diferente. Cloud SQL para MySQL también te permite restablecer una base de datos de MySQL a un momento determinado específico mediante el uso del registro binario con la opción de copia de seguridad automatizada habilitada.

Cloud SQL para MySQL proporciona la capacidad de clonar una versión independiente de la base de datos de origen. Esta característica solo se aplica a la base de datos principal o a otra clonación y no puede provenir de una instancia de réplica de lectura. También puedes usar esta característica para restablecer una instancia de MySQL desde un punto determinado en el tiempo, lo que permite la recuperación de datos en caso de ser necesaria. Puedes aplicar la restauración de la base de datos de Cloud SQL para MySQL mediante la consola de Google Cloud o la CLI de gcloud.

Programador de eventos de MySQL (trabajos de la base de datos)

Para iniciar los procedimientos predefinidos de la base de datos, la funcionalidad del programador de eventos de MySQL es equivalente a DBMS_JOBS o DBMS_SCHEDULER de Oracle. De forma predeterminada, el parámetro de la base de datos event_scheduler se establece en OFF. Si es necesario, se debe cambiar a ON mediante las marcas de Cloud SQL.

Puedes usar el programador de eventos de MySQL para ejecutar un comando explícito de DML/DDL o programar un procedimiento o función almacenados en un momento específico y con una lógica determinada.

Consideración de conversión para Oracle DBMS_JOBS o DBMS_SCHEDULER:

Todos los trabajos de Oracle deben convertirse en la sintaxis y funcionalidad de MySQL de forma manual o mediante las herramientas de conversión de PL/SQL disponibles en el mercado.

Usa la siguiente instrucción para verificar el valor actual del parámetro event_scheduler de una ejecución de cliente:

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

Ejemplos del programador de eventos:

  • DBMS_SCHEDULER de Oracle

    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;
    /
    
  • Conversión de EVENT de 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);
    
  • Metadatos del programador de eventos de MySQL:

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

Instancias en espera para la implementación de recuperación ante desastres y operaciones de solo lectura

Active Data Guard de Oracle permite que una instancia en espera funcione como extremo de solo lectura mientras que los datos nuevos se siguen aplicando a los registros de rehacer y de archivo. También puedes usar Oracle GoldenGate a fin de habilitar una instancia adicional para fines de lectura, mientras que las modificaciones de datos se aplican en tiempo real y sirven como solución de captura de datos modificados (CDC).

Cloud SQL para MySQL admite la separación de lectura y escritura mediante el uso de réplicas de lectura a fin de dirigir cualquier operación de lectura o carga de trabajo analítica desde la fuente principal a una fuente alternativa replicada casi en tiempo real. Puedes aplicar la configuración de las réplicas de lectura de Cloud SQL para MySQL mediante la consola de Google Cloud o la CLI de gcloud.

Cloud SQL para MySQL admite opciones de replicación adicionales: replicación a una instancia de MySQL externa y replicación desde una instancia de MySQL externa.

Puedes implementar Active Data Guard de Oracle y Oracle GoldenGate como solución de recuperación ante desastres (DR) y agregar una instancia en espera ya sincronizada con la instancia principal.

Las réplicas de lectura de Cloud SQL para MySQL no están destinadas a funcionar como instancias en espera en situaciones de recuperación ante desastres. Para ese propósito, Cloud SQL proporciona la capacidad de configurar una instancia de MySQL a fin de que sea de alta disponibilidad (mediante la consola de Google Cloud o la CLI de gcloud).

Algunas operaciones pueden requerir un reinicio de la instancia (por ejemplo, agregar HA a una instancia principal existente). Desde el punto de vista de un ANS de alta disponibilidad (HA), si la instancia principal no responde durante aproximadamente 60 segundos, la instancia en espera de HA estará disponible después de que se vuelva a restablecer la conexión. Si deseas habilitar la HA para Cloud SQL para MySQL, consulta las siguientes instrucciones.

Registro y supervisión

El archivo de registro de alertas de Oracle es la fuente principal que permite identificar los eventos generales del sistema y los eventos de errores para comprender cualquier ciclo de vida de la instancia de base de datos de Oracle (en especial, con el fin de solucionar los eventos de fallas y de errores).

En el registro de alertas de Oracle, se muestra información sobre lo siguiente:

  • Errores y advertencias de la instancia de base de datos de Oracle (ORA- + número de error)
  • Eventos de inicio y cierre de la instancia de base de datos de Oracle
  • Problemas relacionados con la red y la conexión
  • Eventos de cambios de registros de rehacer de la base de datos
  • Los archivos de registro de Oracle pueden mencionarse con un vínculo para obtener detalles adicionales sobre un evento de base de datos específico

Además, Oracle proporciona archivos de registro exclusivos de diferentes servicios, como LISTENER, ASM y Enterprise Manager (OEM), que no tienen componentes equivalentes en Cloud SQL para MySQL.

Tipos de registros de Cloud SQL para MySQL:

Tipo de registro de MySQL Descripción Notas
Registro de actividad Contiene datos sobre las llamadas a la API y otras acciones administrativas que modifican la configuración o los metadatos de una instancia de Cloud SQL para MySQL. Este registro es uno de los tres registros del grupo de registros de auditoría de Cloud.
Registro de acceso a los datos Contiene datos sobre llamadas a la API que leen la configuración o los metadatos de los recursos, así como llamadas a la API controladas por el usuario que crean, modifican o leen datos de los recursos que proporciona el usuario. Este registro es uno de los tres registros del grupo de registros de auditoría de Cloud. Ten en cuenta que en este registro solo se registran las operaciones de acceso a los datos en instancias de MySQL para eventos a los que se puede acceder sin acceder a Google Cloud.

mysql.err
Este es el archivo de registro principal de MySQL, que se puede comparar con el registro de alertas de Oracle. Ambos registros contienen registros de eventos de la instancia de base de datos, como los eventos de inicio, de cierre, de errores y de advertencias. Guía de mensajes de error de MySQL 5.7

mysql-slow.log
El registro lento de consultas de MySQL recopila datos en consultas que superan la configuración predefinida, como cada consulta que tiene un tiempo de ejecución superior a 2 segundos (el valor predeterminado es de 10 segundos). Está inhabilitado de forma predeterminada. Para habilitar este registro, configura las siguientes variables (parámetros de base de datos):

  • slow_query_log
  • long_query_time

mysql-general.log
En este registro, se recopilan datos sobre las conexiones y desconexiones de los clientes y en cualquier instrucción de SQL que se ejecute en la instancia de base de datos de MySQL. Este registro es útil para solucionar problemas y, por lo general, se establece como OFF cuando se completa la operación. Está inhabilitado de forma predeterminada. Para habilitar las variables general_log, se debe configurar como ON.
Registro binario El servidor MySQL usa el registro binario para registrar todas las instrucciones que modifican datos. El uso principal de este registro es la copia de seguridad y la replicación. De forma predeterminada, el parámetro de registro binario está habilitado en Cloud SQL para MySQL a fin de habilitar la implementación de las réplicas de lectura y la recuperación. Para habilitar el registro binario, establece el parámetro de configuración log_bin como ON.
Registro de retransmisión Contiene las instrucciones recibidas de los registros binarios principales para implementar todas las modificaciones de datos en la instancia subordinada (réplica de lectura). Se aplica solo a instancias secundarias (subordinadas) y réplicas de lectura.

Visualiza los registros de operaciones de Cloud SQL para MySQL

Cloud Logging es la plataforma principal para ver todos los detalles del registro. Puedes seleccionar diferentes registros y filtrar por el nivel del evento de registro (por ejemplo, crítico, error o advertencia). También se encuentra disponible el filtrado por período y por texto libre.

Visualiza registros en Cloud Logging.

Ejemplo

En la siguiente captura de pantalla, se muestra cómo encontrar una consulta específica en el archivo mysql-slow.log con un período personalizado como criterio de filtrado.

Busca una consulta en mysql-slow.log.

Supervisión de instancias de base de datos de MySQL

Los paneles de supervisión de la IU principal de Oracle son parte de los productos Grid/Cloud Control y OEM (por ejemplo, gráficos de actividad principal) y son útiles para la supervisión de instancias de base de datos en tiempo real a nivel de la sesión o de la instrucción de SQL. Cloud SQL para MySQL proporciona capacidades de supervisión similares con la consola de Google Cloud. Puedes ver información resumida sobre las instancias de bases de datos de Cloud SQL para MySQL con varias métricas de supervisión, como uso de CPU, uso de almacenamiento, uso de memoria, operaciones de lectura y escritura, bytes de entrada y salida, conexiones activas y mucho más.

Cloud Logging admite métricas adicionales de supervisión para Cloud SQL para MySQL. En la siguiente captura de pantalla, se muestra el gráfico de consultas de MySQL durante las últimas 12 horas.

Gráficos de consultas de MySQL de las últimas 12 horas

Supervisión de réplicas de lectura de MySQL

Puedes supervisar réplicas de lectura de forma similar a una instancia principal mediante las métricas de supervisión de la consola de Google Cloud (como se describió antes). Además, hay una métrica de supervisión dedicada para supervisar la demora de replicación, que define el retraso entre la instancia principal y la instancia de réplica de lectura en segundos (se puede supervisar desde la pestaña de descripción general de la instancia de réplica de lectura en la consola de Google Cloud).

Puedes usar la CLI de gcloud para recuperar el estado de replicación:

gcloud sql instances describe REPLICA_NAME

También puedes realizar la supervisión de la replicación mediante comandos desde un cliente MySQL, que proporciona un estado para las bases de datos principales y subordinadas, así como para el registro binario y el registro de retransmisión.

Puedes usar la siguiente instrucción de SQL para verificar el estado de la réplica de lectura:

mysql> SHOW SLAVE STATUS;

Supervisión de MySQL

En esta sección, se describen los métodos básicos de supervisión de MySQL que se consideran tareas de rutina que realiza un DBA (Oracle o MySQL).

Supervisión de la sesión

La supervisión de la sesión de Oracle se lleva a cabo mediante una consulta a las vistas de rendimiento dinámicas conocidas como vistas “V$”. Las vistas V$SESSION y V$PROCESS suelen usarse para obtener estadísticas en tiempo real sobre la actividad actual de la base de datos mediante instrucciones de SQL. Puedes supervisar la actividad de la sesión en MySQL mediante los comandos y las instrucciones de SQL. Por ejemplo, el comando SHOW PROCESSLIST de MySQL proporciona los siguientes detalles sobre la actividad de la sesión:

mysql> SHOW PROCESSLIST;

También puedes consultar y filtrar los resultados de SHOW PROCESSLIST con una instrucción SELECT:

mysql>  SELECT * FROM information_schema.processlist;

Supervisión de transacciones extensas

Para identificar las transacciones de larga duración en tiempo real que podrían generar problemas de rendimiento, puedes consultar la vista dinámica information_schema.innodb_trx. En esta vista, se muestran los registros solo de las transacciones abiertas que se ejecutan en la instancia de base de datos de MySQL.

Supervisión de bloqueo

Puedes supervisar los bloqueos de la base de datos con la vista dinámica information_schema.innodb_locks, que proporciona información en tiempo real sobre los casos de bloqueo que podrían causar problemas de rendimiento.