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

Este documento forma parte de una serie que proporciona información y directrices clave relacionadas con la planificación y la realización de migraciones de bases de datos Oracle® 11g/12c a instancias de segunda generación de Cloud SQL para MySQL versión 5.7. La serie incluye las siguientes partes:

Seguridad

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

Cifrado de datos de Oracle

Además de la autenticación básica de usuarios y la gestión de privilegios de usuario, Oracle ofrece el mecanismo TDE (Transparent Data Encryption) para añadir una capa de cifrado adicional para la seguridad de los datos en reposo a nivel del sistema operativo. Una vez configurado, el sistema implementa Oracle TDE automáticamente y no requiere ninguna interacción manual por parte de los usuarios. Para implementar TDE de Oracle, te recomendamos que lo configures explícitamente (mediante un comando) en los objetos de base de datos necesarios y compatibles que puedan aceptar este tipo de cifrado (por ejemplo, un tablespace, una tabla o una columna). Para gestionar la seguridad de los datos en tránsito, te recomendamos que implementes una solución de seguridad de red.

Cifrado de datos de Cloud SQL para MySQL

Google Cloud proporciona varias capas de encriptado para proteger los datos en reposo de los clientes en los productos de Google Cloud , incluido Cloud SQL. Cloud SQL se cifra mediante cifrado AES-128 o AES-256. Para obtener más información, consulta el siguiente tema sobre el cifrado en reposo. A diferencia del cifrado de Oracle (que debe implementarse mediante acciones de configuración), Google Cloud cifra los datos en reposo de los clientes sin que tengan que hacer nada. Desde el punto de vista de la conversión de esquemas, no es necesario realizar ninguna acción y el cifrado sigue siendo transparente para el usuario.

Para comprender mejor cómo gestiona Google Cloud el cifrado de datos en tránsito, consulta Cómo se gestiona el cifrado de datos en tránsito.

Auditoría

Oracle ofrece varios métodos de auditoría, como la auditoría estándar y la detallada. Por el contrario, MySQL no proporciona de forma predeterminada soluciones de auditoría equivalentes. Para superar esta limitación, puedes usar Google Cloudpaneles de control y monitorización, pero, para registrar las operaciones DML/DDL de la base de datos, puedes usar los registros de consultas lentas, 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 para habilitar el registro de consultas lentas y el registro general. Además, debes gestionar la conservación de estos registros en función de las necesidades de tu empresa.

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

  • Registros de auditoría de la actividad de administración (habilitados de forma predeterminada)
  • Registros de auditoría de acceso a datos (inhabilitados de forma predeterminada)
    • Consulta cómo configurar registros de acceso a datos.
    • Ten en cuenta que los registros de auditoría de acceso a datos no registran las operaciones de acceso a datos en recursos a los que se puede acceder sin iniciar sesión enGoogle Cloud.
  • Registros de auditoría de los eventos del sistema (habilitados de forma predeterminada)

Ver registros de auditoría de Google Cloud

Esta es la ruta de acceso para ver los registros de auditoría: Google Cloud consola > Inicio > Actividad

Puede filtrar la granularidad de la información entre los niveles de auditoría. En la siguiente captura de pantalla se muestra una auditoría de la actividad de un administrador.

Granularidad del filtrado entre niveles de auditoría.

Página Cloud Logging

Esta es la ruta de acceso a la página de registro: Google Cloud consola > Cloud Logging

Puedes filtrar la granularidad de la información entre los tipos de registro. En la siguiente captura de pantalla se muestra una auditoría del registro general (datos de auditoría del usuario, el host y la instrucción 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 mediante el proxy de Cloud SQL, de forma similar a cualquier otra conexión de base de datos. En el caso de otras fuentes de conexión, como App Engine o Compute Engine, los usuarios tienen varias opciones, como usar el proxy de Cloud SQL. Estas opciones se describen con más detalle en el artículo Control de acceso a instancias.

Operaciones

En esta sección se explica cómo exportar e importar datos, crear copias de seguridad y restaurar datos a nivel de instancia, usar el programador de eventos de MySQL (para tareas de bases de datos) y usar instancias de espera para operaciones de solo lectura y recuperación tras desastres.

Exportar e importar

El método principal de Oracle para realizar operaciones de exportación e importación lógicas es la utilidad Data Pump, que usa los comandos EXPDP/IMPDP (una versión anterior de la función de exportación e importació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, a continuación, realizan la importación a nivel de base de datos u objeto (incluida la exportación e importación de metadatos únicamente).

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

Las utilidades mysqldump y mysqlimport de MySQL se ejecutan a nivel de cliente (como parte de los programas cliente de MySQL) y se conectan de forma remota a la instancia de Cloud SQL para MySQL. Los archivos de volcado se crean del lado del cliente.

mysqldump:

Una utilidad de cliente realiza copias de seguridad lógicas e importaciones de datos (como sql). De esta forma, se genera un conjunto de instrucciones SQL que se pueden ejecutar para reproducir las definiciones de objetos de base de datos y los datos de tabla originales. La utilidad mysqldump también puede generar resultados en formato CSV, en otro texto delimitado o en formato XML. La principal ventaja de este formato de salida es que te permite ver o editar la salida de la exportación antes de restaurarla, ya que es un archivo de texto. La principal desventaja es que no está pensada para ser una solución rápida o escalable para crear copias de seguridad de grandes cantidades 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:

Se trata de un programa cliente que proporciona una interfaz de línea de comandos a la instrucción 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 se puede convertir en mysqlimport, ya que ambos comparten la misma función de cargar 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    |
+------+------+

Exportación e importación de Cloud SQL para MySQL:

Los siguientes enlaces a la documentación muestran cómo usar la CLI de gcloud para interactuar con la instancia de Cloud SQL y con Cloud Storage para aplicar operaciones de exportación y importación.

Copia de seguridad y restauración a nivel de instancia

Migrar de Oracle RMAN o Data Pump a Cloud SQL para MySQL es una operación sencilla que incluye opciones adicionales de copia de seguridad y restauración (por ejemplo, instantáneas de VMs, copias de seguridad en frío o herramientas de terceros). No se necesita código ni conocimientos adicionales. Puedes gestionar este proceso mediante laGoogle Cloud consola o la CLI de Google Cloud. (Los ejemplos anteriores se han compilado con instancias de Cloud SQL de segunda generación).

Los tipos de métodos de copia de seguridad de bases de datos MySQL son las copias de seguridad bajo demanda y las copias de seguridad automáticas.

Puedes usar la restauración de instancias de bases de datos de Cloud SQL para MySQL para restaurar la misma instancia, sobrescribir los datos existentes o restaurar una instancia diferente. Cloud SQL para MySQL también te permite restaurar una base de datos MySQL a un momento específico mediante el registro binario con la opción de copia de seguridad automatizada habilitada.

Cloud SQL para MySQL ofrece la posibilidad de clonar una versión independiente de la base de datos de origen. Esta función solo se aplica a la base de datos principal (maestra) u otro clon, y no se puede obtener de una instancia de réplica de lectura. También puedes usar esta función para restaurar una instancia de MySQL a un momento dado, lo que te permite recuperar datos si es necesario. Puedes restaurar una base de datos de Cloud SQL para MySQL mediante laGoogle Cloud consola o la CLI de gcloud.

Programador de eventos de MySQL (tareas de bases de datos)

Para iniciar procedimientos de bases de datos predefinidos, la función del programador de eventos de MySQL es equivalente a DBMS_JOBS de Oracle o DBMS_SCHEDULER de Oracle. De forma predeterminada, el parámetro de base de datos event_scheduler se define como 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 DML o DDL explícito, o para programar un procedimiento o una función almacenados a una hora específica y con una lógica determinada.

Consideraciones sobre la conversión para Oracle DBMS_JOBS o DBMS_SCHEDULER:

Todos los trabajos de Oracle deben convertirse a la sintaxis y las funciones de MySQL manualmente o mediante herramientas de conversión de PL/SQL disponibles comercialmente.

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

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

Ejemplos de 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;
    /
    
  • Conversión de EVENTOS 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 de espera para operaciones de solo lectura e implementación de recuperación tras fallos

Oracle Active Data Guard permite que una instancia de espera actúe como endpoint de solo lectura mientras se aplican datos nuevos a través de los registros de rehacer y de archivo. También puedes usar Oracle GoldenGate para habilitar una instancia adicional con fines de lectura mientras se aplican modificaciones de datos en tiempo real, lo que sirve como solución de captura de datos de cambios (CDC).

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

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

Puedes implementar Oracle Active Data Guard y Oracle GoldenGate como solución de recuperación tras desastres, añadiendo una instancia de espera que ya esté sincronizada con la instancia principal.

Las réplicas de lectura de Cloud SQL para MySQL no están diseñadas para servir como instancias de reserva en casos de desastre. Para ello, Cloud SQL ofrece la posibilidad de configurar una instancia de MySQL para alta disponibilidad (mediante la consola de Google Cloud o la interfaz de línea de comandos de gcloud). Google Cloud

Es posible que algunas operaciones requieran reiniciar una instancia (por ejemplo, añadir alta disponibilidad a una instancia principal). Desde el punto de vista del SLA de alta disponibilidad, si la instancia principal no responde durante aproximadamente 60 segundos, la instancia de espera de alta disponibilidad estará disponible cuando se vuelva a conectar. Para habilitar la alta disponibilidad en Cloud SQL para MySQL, consulta las siguientes instrucciones.

Almacenamiento de registros y monitorización

El archivo de registro de alertas de Oracle es la fuente principal para identificar eventos generales del sistema y eventos de error con el fin de comprender el ciclo de vida de cualquier instancia de base de datos de Oracle (principalmente, para solucionar problemas de eventos de error).

El registro de alertas de Oracle muestra información sobre lo siguiente:

  • Errores y advertencias de la instancia de base de datos Oracle (ORA- + número de error).
  • Eventos de inicio y cierre de instancias de bases de datos de Oracle.
  • Problemas relacionados con la red y la conexión.
  • Eventos de cambio de registros de rehacer de la base de datos.
  • Es posible que se mencionen archivos de seguimiento de Oracle con un enlace para obtener más información sobre un evento de base de datos específico.

Además, Oracle proporciona archivos de registro específicos para 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 llamadas a la API u 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 Registros de auditoría de Cloud.
Registro de acceso a datos Contiene datos sobre las llamadas a la API que leen la configuración o los metadatos de los recursos, así como las llamadas a la API controladas por el usuario que crean, modifican o leen los datos de los recursos proporcionados por el usuario. Este registro es uno de los tres registros del grupo Registros de auditoría de Cloud. Ten en cuenta que este registro solo registra las operaciones de acceso a datos en instancias de MySQL para eventos a los que se puede acceder sin iniciar sesión enGoogle 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 el registro de eventos de la instancia de base de datos, como los eventos de inicio y cierre, y los eventos de error y advertencia. Guía de mensajes de error de MySQL 5.7.
mysql-slow.log
El registro de consultas lentas de MySQL recoge datos sobre las consultas que superan una configuración predefinida, como las consultas que tienen un tiempo de ejecución superior a 2 segundos (el valor predeterminado es 10 segundos). Inhabilitada de forma predeterminada. Para habilitar este registro, define las siguientes variables (parámetros de la base de datos):

  • slow_query_log
  • long_query_time
mysql-general.log
Este registro recoge datos sobre las conexiones y desconexiones de los clientes, así como sobre cualquier instrucción SQL que se ejecute en la instancia de base de datos MySQL. Este registro es útil para solucionar problemas y suele desactivarse OFF cuando se completa la operación. Están inhabilitadas de forma predeterminada. Para habilitarlas, las variables general_log deben tener el valor ON.
Registro binario El servidor MySQL usa el registro binario para registrar todas las instrucciones que modifican los datos. El uso principal de este registro es para copias de seguridad y replicación. De forma predeterminada, el parámetro de registro binario está habilitado en Cloud SQL para MySQL para permitir la recuperación y la implementación de réplicas de lectura. Para habilitar el registro binario, asigna el valor ON al parámetro de configuración log_bin.
Registro de retransmisión Contiene las instrucciones recibidas de los registros binarios principales para implementar todas las modificaciones de datos en la instancia secundaria (réplica de lectura). Solo se aplica a las instancias secundarias (esclavas) y a las réplicas de lectura.

Ver los registros de operaciones de Cloud SQL para MySQL

Cloud Logging es la plataforma principal para ver todos los detalles de los registros. Puede seleccionar diferentes registros y filtrar por el nivel de evento de registro (por ejemplo, Crítico, Error o Advertencia). También se pueden filtrar por periodo y por texto libre.

Ver registros en Cloud Logging.

Ejemplo

En la siguiente captura de pantalla se muestra cómo buscar una consulta específica en el archivo mysql-slow.log usando un periodo personalizado como criterio de filtro.

Buscar una consulta en mysql-slow.log.

Monitorización de instancias de bases de datos MySQL

Los principales paneles de control de monitorización de la interfaz de usuario de Oracle forman parte de los productos OEM y Grid/Cloud Control (por ejemplo, Gráficos de actividad principal) y son útiles para monitorizar en tiempo real las instancias de bases de datos a nivel de sesión o de instrucción SQL. Cloud SQL para MySQL ofrece funciones de monitorización similares mediante la Google Cloud consola. Puedes ver información resumida sobre las instancias de base de datos de Cloud SQL para MySQL con varias métricas de monitorización, como el uso de la CPU, el uso del almacenamiento, el uso de la memoria, las operaciones de lectura y escritura, los bytes de entrada y salida, las conexiones activas y más.

Cloud Logging admite métricas de monitorización adicionales para Cloud SQL para MySQL. La siguiente captura de pantalla muestra el gráfico de consultas de MySQL de las últimas 12 horas.

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

Monitorización de réplicas de lectura de MySQL

Puedes monitorizar las réplicas de lectura de forma similar a una instancia principal, usando las Google Cloud métricas de monitorización de la consola (como se ha descrito anteriormente). Además, hay una métrica de monitorización específica para monitorizar el retraso de la réplica, que determina el tiempo que transcurre entre la instancia principal y la instancia de réplica de lectura en segundos (se puede monitorizar desde la pestaña de vista general de la instancia de réplica de lectura en la consola Google Cloud ).

Puedes usar gcloud CLI para obtener el estado de la réplica:

gcloud sql instances describe REPLICA_NAME

También puedes monitorizar la replicación mediante comandos de un cliente MySQL, que proporciona el estado de las bases de datos principal y subordinada, así como de los registros binario y de retransmisión.

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

mysql> SHOW SLAVE STATUS;

Monitorización de MySQL

En esta sección se describen los métodos básicos de monitorización de MySQL que se consideran tareas rutinarias realizadas por un administrador de bases de datos (Oracle o MySQL).

Monitorización de sesiones

La monitorización de sesiones de Oracle se realiza consultando las vistas de rendimiento dinámicas, conocidas como vistas "V$". Las vistas V$SESSION y V$PROCESS se suelen usar para obtener información valiosa en tiempo real sobre la actividad actual de la base de datos mediante instrucciones SQL. Puedes monitorizar la actividad de las sesiones en MySQL mediante comandos e instrucciones SQL. Por ejemplo, el comando MySQL SHOW PROCESSLIST 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 mediante una instrucción SELECT:

mysql>  SELECT * FROM information_schema.processlist;

Monitorización de transacciones largas

Para identificar en tiempo real las transacciones de larga duración que puedan provocar problemas de rendimiento, puedes consultar la vista dinámica information_schema.innodb_trx. Esta vista solo muestra los registros de las transacciones abiertas que se ejecutan en la instancia de base de datos MySQL.

Monitorización de cerraduras

Puede monitorizar los bloqueos de bases de datos mediante la vista dinámica information_schema.innodb_locks, que proporciona información en tiempo real sobre las incidencias de bloqueo que pueden provocar problemas de rendimiento.