

# Actualización de la versión principal de un clúster de base de datos de Amazon Aurora MySQL
<a name="AuroraMySQL.Updates.MajorVersionUpgrade"></a><a name="mvu"></a>

En un número de versión de Aurora MySQL, como 3.04.1, el 3 representa la versión principal. Aurora MySQL versión 2 es compatible MySQL 5.7 Aurora MySQL versión 3 es compatible MySQL 8.0.

La actualización entre versiones principales requiere una planificación y pruebas más extensas que para una versión secundaria. El proceso puede llevar mucho tiempo. Una vez finalizada la actualización, es posible que también deba hacer trabajo de seguimiento. Por ejemplo, esto puede ocurrir debido a las diferencias en la compatibilidad de SQL o la forma en que funcionan ciertas características relacionadas con MySQL. O puede ocurrir debido a la diferencia en la configuración de los parámetros entre la versión antigua y la nueva.

**Contents**
+ [Actualización de Aurora MySQL versión 2 a versión 3](#AuroraMySQL.Updates.MajorVersionUpgrade.2to3)
+ [Rutas de actualización de versión principal Aurora MySQL](#AuroraMySQL.Upgrading.Compatibility)
+ [Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL](#AuroraMySQL.Upgrading.Sequence)
+ [Planificación de una actualización de versión principal para un clúster Aurora MySQL](#AuroraMySQL.Upgrading.Planning)
  + [Simulación de la actualización mediante la clonación del clúster de base de datos](#AuroraMySQL.Upgrading.Planning.clone)
  + [Implementaciones azul/verde](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Comprobaciones previas de actualización de versiones principales para Aurora MySQL](AuroraMySQL.upgrade-prechecks.md)
  + [Proceso de comprobación previa de Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.process)
  + [Formato de registro de comprobación previa de Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-format)
  + [Ejemplos de resultados del registro de comprobación previa de Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-examples)
  + [Rendimiento de la comprobación previa de Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.performance)
  + [Resumen de comprobaciones previas de actualizaciones de Community MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.community)
  + [Resumen de comprobaciones previas de actualizaciones de Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.ams)
  + [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
    + [Errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
      + [Comprobaciones previas de MySQL que informan de errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
      + [Comprobaciones previas de Aurora MySQL que informan de errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
    + [Advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
      + [Comprobaciones previas de MySQL que informan de advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
      + [Comprobaciones previas de Aurora MySQL que informan de advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
    + [​Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
    + [Errores, advertencias o avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)
+ [Pasos para realizar una actualización local](AuroraMySQL.Upgrading.Procedure.md)
  + [Cómo afectan las actualizaciones en el lugar a los grupos de parámetros de un clúster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)
  + [Cambios en las propiedades del clúster entre versiones de Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)
  + [Actualizaciones mayores en el lugar para bases de datos globales](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.GlobalDB)
  + [Consideraciones sobre el Backtrack](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Backtrack)
+ [Tutorial de actualización de Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Tutorial.md)
+ [Determinación del motivo de los errores en una actualización de la versión principal de Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md)
+ [Solución de problemas para la actualización Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Troubleshooting.md)
+ [Limpieza posterior a la actualización para Aurora MySQL versión 3](AuroraMySQL.mysql80-post-upgrade.md)
  + [Índices espaciales](AuroraMySQL.mysql80-post-upgrade.md#AuroraMySQL.mysql80-spatial)

## Actualización de Aurora MySQL versión 2 a versión 3
<a name="AuroraMySQL.Updates.MajorVersionUpgrade.2to3"></a>

Si tiene un clúster compatible con MySQL 5.7 y desea actualizarlo a un clúster compatible con MySQL-8.0, puede hacerlo ejecutando un proceso de actualización en el propio clúster. Este tipo de actualización es una *actualización en el lugar*, en contraste con las actualizaciones que se realizan al crear un nuevo clúster. Esta técnica mantiene el mismo punto de enlace y otras características del clúster. La actualización es relativamente rápida ya que no requiere copiar todos los datos en un nuevo volumen de clúster. Esta estabilidad ayuda a minimizar cualquier cambio de configuración en las aplicaciones. También ayuda a reducir la cantidad de pruebas para el clúster actualizado. Esto se debe a que el número de instancias de base de datos y sus clases de instancia permanecen iguales.

El mecanismo de actualización en el lugar implica apagar el clúster de base de datos mientras se lleva a cabo la operación. Aurora realiza un cierre limpio y completa las operaciones pendientes, como la restauración de transacciones y la depuración de deshacer. Para obtener más información, consulte [Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL](#AuroraMySQL.Upgrading.Sequence).

El método de actualización in situ es práctico, ya que es fácil de realizar y minimiza los cambios de configuración en las aplicaciones asociadas. Por ejemplo, una actualización en el lugar conserva los puntos de enlace y el conjunto de instancias de base de datos del clúster. Sin embargo, el tiempo necesario para una actualización en el lugar puede variar en función de las propiedades del esquema y de cuán ocupado esté el clúster. Por lo tanto, según las necesidades de su clúster, puede elegir entre las técnicas de actualización:
+ [Actualización in situ](AuroraMySQL.Upgrading.Procedure.md)
+ [Implementación azul/verde](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Restauración de instantáneas](aurora-restore-snapshot.md)
**nota**  
Si utiliza la AWS CLI o la API de RDS para el método de actualización de restauración de instantáneas, debe ejecutar una operación posterior para crear una instancia de base de datos de escritor en el clúster de base de datos restaurado.

Para obtener información general sobre Aurora MySQL versión 3 y sus nuevas características, consulte [Aurora MySQL versión 3 compatible con MySQL 8.0](AuroraMySQL.MySQL80.md).

Para obtener más información sobre la planificación de una actualización, consulte [Planificación de una actualización de versión principal para un clúster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) y [Pasos para realizar una actualización local](AuroraMySQL.Upgrading.Procedure.md).

## Rutas de actualización de versión principal Aurora MySQL
<a name="AuroraMySQL.Upgrading.Compatibility"></a>

No todos los tipos o versiones de clústeres Aurora MySQL pueden utilizar el mecanismo de actualización en el lugar. Puede aprender la ruta de actualización adecuada para cada clúster Aurora MySQL consultando la tabla siguiente.


|  Tipo de clúster de base de datos Aurora MySQL  | ¿Puede usar la actualización en el lugar?  |  Action  | 
| --- | --- | --- | 
|   Clúster aprovisionado de Aurora MySQL, versión 2  |  Sí  |  La actualización in situ está disponible para clústeres de Aurora MySQL compatibles con MySQL 5.7. Para obtener información acerca de la actualización a Aurora MySQL versión 3, consulte [Planificación de una actualización de versión principal para un clúster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) y [Pasos para realizar una actualización local](AuroraMySQL.Upgrading.Procedure.md).  | 
|   Clúster aprovisionado de Aurora MySQL, versión 3  |  No aplicable  |  Utilice un procedimiento de actualización de versiones secundarias para actualizar entre las versiones 3 de Aurora MySQL.  | 
|  Aurora Serverless v1Clúster de   |  No aplicable  |  Aurora Serverless v1 solo es compatible para la versión 2 de Aurora MySQL.  | 
|  Aurora Serverless v2Clúster de   |  No aplicable  | Aurora Serverless v2 solo es compatible para la versión 3 de Aurora MySQL. | 
|  Clúster en una base de datos global Aurora  |  Sí  |  Para actualizar la versión 2 de Aurora MySQL a la versión 3, siga el [procedimiento para realizar una actualización local](AuroraMySQL.Upgrading.Procedure.md) para clústeres en una base de datos global de Aurora. Realice la actualización en el clúster global. Aurora actualiza el clúster principal y todos los clústeres secundarios en la base de datos global al mismo tiempo. Si utiliza la API RDS o AWS CLI, llame al comando `modify-global-cluster` o la operación `ModifyGlobalCluster` en lugar de `modify-db-cluster` o `ModifyDBCluster`. Puede realizar una actualización local desde la versión 2 a la versión 3 de Aurora MySQL si establece el parámetro `lower_case_table_names` en predeterminado y reinicia la base de datos global. Para obtener más información, consulte [Actualizaciones de la versión principal](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).  | 
|  Clúster de consultas paralelas  |  Sí  |  Puede realizar una actualización local.  | 
|  Clúster que es el destino de la replicación de registros binarios  |  Quizás  |  Si la replicación del registro binario se realiza desde un clúster de Aurora MySQL, puede realizar una actualización local. No puede realizar la actualización si la replicación del registro binario proviene de una instancia de base de datos de RDS para MySQL o de una instancia de base de datos de MySQL en las instalaciones. En ese caso, puede actualizar utilizando el mecanismo de restauración de instantáneas.  | 
|  Cluster con cero instancias de base de datos  |  No  |  Mediante la AWS CLI o la API RDS, puede crear un clúster de Aurora MySQL sin ninguna instancia de base de datos adjunta. De la misma manera, también puede quitar todas las instancias de base de datos de un clúster Aurora MySQL mientras deja intactos los datos del volumen del clúster. Aunque un clúster tiene cero instancias de base de datos, no puede realizar una actualización en el lugar. El mecanismo de actualización requiere una instancia de escritor en el clúster para realizar conversiones en las tablas del sistema, archivos de datos, etc. En este caso, utilice AWS CLI o la API de RDS para crear una instancia de escritor para el clúster. Luego, puede realizar una actualización en el lugar.  | 
|  Clúster con retroceso habilitado  |  Sí  |  Puede realizar una actualización in situ para un clúster Aurora MySQL que utilice la característica de retroceso. Sin embargo, después de la actualización, no puede realizar un retroceso del clúster hasta un momento anterior a la actualización.  | 

## Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL
<a name="AuroraMySQL.Upgrading.Sequence"></a>

 Aurora MySQL realiza una actualización de versión principal como un proceso de varias etapas. Puede comprobar el estado actual de una actualización. Algunos de los pasos de actualización también proporcionan información sobre el progreso. A medida que comienza cada etapa, Aurora MySQL registra un evento. Puede examinar los eventos a medida que se producen en la página **Eventos** de la consola de RDS. Para obtener más información sobre el trabajo con eventos, consulte [Uso de notificaciones de eventos de Amazon RDS](USER_Events.md). 

**importante**  
 Una vez que el proceso comienza, se ejecuta hasta que la actualización se realiza correctamente o falla. No puede cancelar la actualización mientras está en marcha. Si la actualización falla, Aurora revierte todos los cambios y el clúster tiene la misma versión del motor, metadatos, etc. que antes. 

 El proceso de actualización consta de tres pasos: 

1.  Aurora realiza una serie de [comprobaciones previas](AuroraMySQL.upgrade-prechecks.md) antes de comenzar el proceso de actualización. El clúster sigue ejecutándose mientras Aurora realiza estas comprobaciones. Por ejemplo, el clúster no puede tener transacciones XA en el estado preparado ni procesar ninguna declaración de lenguaje de definición de datos (DDL). Por ejemplo, es posible que deba cerrar las aplicaciones que están enviando ciertos tipos de instrucciones SQL. O puede simplemente esperar hasta que se terminen ciertas instrucciones de larga duración. A continuación, intente la actualización de nuevo. Algunas comprobaciones prueban las condiciones que no impiden la actualización, pero pueden hacer que la actualización tarde mucho tiempo. 

    Si Aurora detecta que no se cumplen las condiciones requeridas, modifique las condiciones identificadas en los detalles del evento. Siga la guía de [Solución de problemas para la actualización Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Troubleshooting.md). Si Aurora detecta condiciones que podrían provocar una actualización lenta, planee supervisar la actualización durante un período prolongado. 

1.  Aurora desconecta el clúster. Luego, Aurora realiza un conjunto similar de pruebas que en la etapa anterior, para confirmar que no surgieron nuevos problemas durante el proceso de apagado. Si Aurora detecta alguna condición en este punto que impida la actualización, Aurora cancela la actualización y vuelve a conectarla. En este caso, confirme cuándo ya no se aplican las condiciones e inicie la actualización nuevamente. 

1.  Aurora crea una instantánea del volumen del clúster. Supongamos que descubre problemas de compatibilidad u otros tipos de problemas una vez finalizada la actualización. O supongamos que desea realizar pruebas utilizando tanto los clústeres originales como los actualizados. En tales casos, puede restaurar a partir de esta instantánea para crear un nuevo clúster con la versión original del motor y los datos originales. 
**sugerencia**  
Esta instantánea es una instantánea manual. Sin embargo, Aurora puede crearla y continuar con el proceso de actualización incluso si ha alcanzado la cuota de instantáneas manuales. Esta instantánea permanecerá permanentemente (en caso necesario) hasta que la elimine. Después de finalizar todas las pruebas posteriores a la actualización, puede eliminar esta instantánea para minimizar los cargos de almacenamiento.

1.  Aurora clona el volumen del clúster. La clonación es una operación rápida que no implica copiar los datos reales de la tabla. Si Aurora encuentra un problema durante la actualización, se revierte a los datos originales del volumen del clúster clonado y vuelve a poner el clúster en línea. El volumen clonado temporal durante la actualización no está sujeto al límite habitual en el número de clones para un único volumen de clúster. 

1.  Aurora realiza un apagado limpio para la instancia de base de datos del escritor. Durante el apagado limpio, los eventos de progreso se registran cada 15 minutos para las siguientes operaciones. Puede examinar los eventos a medida que se producen en la página **Eventos** de la consola de RDS. 
   +  Aurora purga los registros de deshacer de versiones antiguas de filas. 
   +  Aurora revierte cualquier transacción no confirmada. 

1.  Aurora actualiza la versión del motor en la instancia de base de datos de escritor: 
   +  Aurora instala el binario para la nueva versión del motor en la instancia de base de datos del escritor. 
   +  Aurora utiliza la instancia de base de datos del escritor para actualizar sus datos al formato compatible con MySQL 5.7. Durante esta etapa, Aurora modifica las tablas del sistema y realiza otras conversiones que afectan a los datos del volumen del clúster. En particular, Aurora actualiza los metadatos de partición en las tablas del sistema para que sean compatibles con el formato de partición MySQL 5.7. Esta etapa puede tardar mucho tiempo si las tablas del clúster tienen un gran número de particiones. 

      Si se producen errores durante esta etapa, puede encontrar los detalles en los registros de errores de MySQL. Una vez iniciada esta etapa, si el proceso de actualización falla por cualquier motivo, Aurora restaura los datos originales del volumen del clúster clonado. 

1.  Aurora actualiza la versión del motor en las instancias de base de datos del lector. 

1.  Se ha completado el proceso de actualización. Aurora registra un evento final para indicar que el proceso de actualización se completó correctamente. Ahora su clúster de base de datos está ejecutando la nueva versión principal. 

## Planificación de una actualización de versión principal para un clúster Aurora MySQL
<a name="AuroraMySQL.Upgrading.Planning"></a>

Para ayudarle a decidir el momento y el método adecuados para la actualización, infórmese sobre las diferencias entre Aurora MySQL versión 3 y su entorno actual:
+ Si va a convertir desde RDS para MySQL 8.0 o MySQL 8.0 Community Edition, consulte [Comparación de Aurora MySQL versión 3 y MySQL 8.0 Community Edition](AuroraMySQL.Compare-80-v3.md).
+ Si va a actualizar desde Aurora MySQL versión 2, RDS para MySQL 5.7 o la comunidad MySQL 5.7, consulte [Comparación entre Aurora MySQL versión 2 y Aurora MySQL versión  3](AuroraMySQL.Compare-v2-v3.md). 
+ Cree nuevas versiones compatibles con MySQL 8.0 de cualquier grupo de parámetros personalizados. Aplique los valores de parámetros personalizados necesarios a los nuevos grupos de parámetros. Consulte [Cambios de parámetros para Aurora MySQL versión 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.mysql80-parameter-changes) para obtener más información sobre los cambios de parámetros.
+ Revise las definiciones de objeto y el esquema de base de datos de Aurora MySQL versión 2 para ver el uso de las nuevas palabras clave reservadas introducidas en MySQL 8.0 Community Edition. Hágalo antes de realizar la actualización. Para obtener más información, consulte la página sobre [palabras clave y palabras reservadas de MySQL 8.0](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) en la documentación de MySQL.

También puede encontrar más consideraciones y sugerencias sobre la actualización específica de MySQL en [Cambios en MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) en el *Manual de referencia de MySQL*. Por ejemplo, puede usar el comando `mysqlcheck --check-upgrade` para analizar las bases de datos Aurora MySQL existentes e identificar posibles problemas de actualización.

**nota**  
Recomendamos usar clases de instancias de base de datos más grandes, al actualizar a Aurora MySQL versión 3 mediante la actualización in situ o la técnica de restauración de instantáneas. Algunos ejemplos son db.r5.24xlarge y db.r6g.16xlarge. Esto ayuda a que el proceso de actualización se complete más rápido al usar la mayor parte de la capacidad de CPU disponible en la instancia de base de datos. Puede cambiar a la clase de instancia de base de datos que desee una vez finalizada la actualización de la versión principal.

Una vez finalizada la actualización, puede seguir los procedimientos posteriores a la actualización en [Limpieza posterior a la actualización para Aurora MySQL versión 3](AuroraMySQL.mysql80-post-upgrade.md). Por último, pruebe la funcionalidad y el rendimiento de su aplicación. 

Si va a convertir desde RDS para MySQL o la comunidad MySQL, siga el procedimiento de migración que se explica en [Migración de datos a un clúster de base de datos de Amazon Aurora MySQL](AuroraMySQL.Migrating.md). En algunos casos, puede utilizar la replicación de registros binarios para sincronizar los datos con un clúster Aurora MySQL versión 3 como parte de la migración. Si es así, el sistema de origen debe ejecutar una versión compatible con su clúster de base de datos de destino.

Para asegurarse de que las aplicaciones y los procedimientos de administración funcionan sin problemas después de actualizar un clúster de una versión principal a otra, realice tareas de planificación y preparación con antelación. Para ver qué tipos de código de administración se deben actualizar para sus scripts de AWS CLI o aplicaciones basadas en la API de RDS, consulte [Cómo afectan las actualizaciones en el lugar a los grupos de parámetros de un clúster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups). Consulte también [Cambios en las propiedades del clúster entre versiones de Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs).

Para obtener información sobre los problemas que pueden surgir durante la actualización, consulte [Solución de problemas para la actualización Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Troubleshooting.md). En caso de problemas que podrían hacer que la actualización tarde mucho tiempo, puede probar esas condiciones con antelación y corregirlas.

**nota**  
Un mecanismo de actualización in situ implica apagar el clúster de base de datos mientras se lleva a cabo la operación. Aurora MySQL realiza un apagado limpio y completa las operaciones pendientes, como la depuración de deshacer. Una actualización puede tardar mucho tiempo si hay que depurar muchos registros de deshacer. Recomendamos realizar la actualización solo después de que la longitud de la lista de historial (HLL) sea baja. Un valor generalmente aceptable de HLL es de 100 000 o menos. Para obtener más información, consulte esta [entrada del blog](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2).

### Simulación de la actualización mediante la clonación del clúster de base de datos
<a name="AuroraMySQL.Upgrading.Planning.clone"></a>

También puede comprobar los procedimientos de compatibilidad, rendimiento y mantenimiento de las aplicaciones y consideraciones similares para el clúster actualizado. Para ello, puede realizar una simulación de la actualización antes de realizar la actualización en sí. Esta técnica puede ser especialmente útil para clústeres de producción. Aquí, es importante minimizar el tiempo de inactividad y tener listo el clúster actualizado tan pronto como finalice la actualización.

Utilice los siguientes pasos:

1. Cree un clon del clúster original. Siga el procedimiento indicado en [Clonación de un volumen de clúster de base de datos de Amazon Aurora](Aurora.Managing.Clone.md).

1. Configure un conjunto similar de instancias de base de datos de escritor y lector como en el clúster original.

1. Realice una actualización en el lugar del clúster clonado. Siga el procedimiento indicado en [Pasos para realizar una actualización local](AuroraMySQL.Upgrading.Procedure.md).

   Inicie la actualización inmediatamente después de crear el clon. De esta forma, el volumen del clúster sigue siendo idéntico al estado del clúster original. Si el clon se encuentra inactivo antes de realizar la actualización, Aurora realiza procesos de limpieza de la base de datos en segundo plano. En ese caso, la actualización del clon no es una simulación precisa de la actualización del clúster original.

1. Pruebe los procedimientos de compatibilidad, rendimiento y administración de las aplicaciones, etc., utilizando el clúster clonado.

1. Si encuentra algún problema, ajuste sus planes de actualización para que los tengan en cuenta. Por ejemplo, adapte cualquier código de aplicación para que sea compatible con el conjunto de características de la versión superior. Calcule cuánto tiempo puede tardar la actualización en función de la cantidad de datos del clúster. También puede programar la actualización para un momento en el que el clúster no esté ocupado.

1. Una vez que esté satisfecho con el funcionamiento de las aplicaciones y la carga de trabajo en el clúster de prueba, puede realizar la actualización en el lugar para el clúster de producción.

1. Esfuércese para minimizar el tiempo de inactividad total de su clúster durante una actualización de versión principal. Para ello, asegúrese de que la carga de trabajo del clúster sea baja o nula en el momento de la actualización. En particular, asegúrese de que no haya transacciones en curso durante mucho tiempo al iniciar la actualización.

### Implementaciones azul/verde
<a name="AuroraMySQL.UpgradingMajor.BlueGreen"></a>

En algunas situaciones, su prioridad principal es realizar un cambio inmediato del clúster antiguo a uno actualizado. En tales situaciones, puede utilizar un proceso de varios pasos que ejecuta los clústeres antiguo y nuevo en paralelo. Aquí, replicará los datos del clúster anterior al nuevo hasta que esté listo para que el nuevo clúster asuma el control. Para obtener información, consulte [Uso de las implementaciones azul/verde de Amazon Aurora para actualizar las bases de datos](blue-green-deployments.md).

# Comprobaciones previas de actualización de versiones principales para Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks"></a>

La actualización de MySQL de una versión principal a otra, como, por ejemplo, pasar de MySQL 5.7 a MySQL 8.0, implica algunos cambios arquitectónicos importantes que requieren una planificación y preparación minuciosas. A diferencia de las actualizaciones de versiones secundarias, que se centran principalmente en actualizar el software del motor de base de datos y, en algunos casos, las tablas del sistema, las actualizaciones principales de MySQL suelen introducir cambios fundamentales en la forma en que la base de datos almacena y administra sus metadatos.

Para ayudarle a identificar dichas incompatibilidades, al actualizar de la versión 2 de Aurora MySQL a la versión 3, Aurora ejecuta automáticamente comprobaciones de compatibilidad de actualizaciones (comprobaciones previas) para examinar los objetos del clúster de base de datos e identificar las incompatibilidades conocidas que pueden impedir que se lleve a cabo la actualización. Para obtener información detallada sobre las comprobaciones previas de Aurora MySQL, consulte [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md). Las comprobaciones previas de Aurora se ejecutan junto con las que lleva a cabo la [utilidad del comprobador de actualización](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html) de Community MySQL.

Estas comprobaciones previas son obligatorias. No tiene la opción de omitirlas. Las comprobaciones previas proporcionan las siguientes ventajas:
+ Pueden reducir la posibilidad de que se produzcan errores de actualización que puedan provocar un tiempo de inactividad prolongado.
+ Si hay incompatibilidades, Amazon Aurora impedirá que se lleve a cabo la actualización y proporcionará un registro para que obtenga más información sobre ellas. Luego podrá usar el registro para preparar la base de datos para la actualización a la versión 3 y resolver así las incompatibilidades. Para obtener información detallada sobre cómo resolver incompatibilidades, consulte la sección [Preparing your installation for upgrade](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) en la documentación de MySQL y la sección [Upgrading to MySQL 8.0? Here is what you need to know...](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/) en el blog de MySQL Server.

  Para obtener más información acerca de cómo actualizar a MySQL 8.0, consulte la sección sobre la [actualización de MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) en la documentación de MySQL.

Las comprobaciones previas se ejecutan antes de que el clúster de base de datos se desconecte para la actualización de la versión principal. Si las verificaciones previas encuentran una incompatibilidad, Aurora cancela automáticamente la actualización antes de detenerse la instancia de base de datos. Aurora también genera un evento por la incompatibilidad. Para obtener más información acerca de los eventos de Amazon Aurora, consulte [Uso de notificaciones de eventos de Amazon RDS](USER_Events.md).

Una vez completadas las comprobaciones previas, Aurora registra información detallada sobre cada incompatibilidad en el archivo `upgrade-prechecks.log`. En la mayoría de los casos, la entrada de registro incluye un vínculo a la documentación de SQL para corregir la incompatibilidad. Para obtener más información acerca de cómo visualizar los archivos de registro, consulte [Visualización y descripción de archivos de registro de base de datos](USER_LogAccess.Procedural.Viewing.md).

**nota**  
Debido a la naturaleza de las comprobaciones previa, analizan objetos en su base de datos. Este análisis genera un consumo de recursos y aumenta el tiempo de ejecución de la actualización. Para obtener más información sobre los aspectos a tener en cuenta con respecto al rendimiento de las comprobaciones previas, consulte [Proceso de comprobación previa de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process).

**Contents**
+ [Proceso de comprobación previa de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process)
+ [Formato de registro de comprobación previa de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-format)
+ [Ejemplos de resultados del registro de comprobación previa de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-examples)
+ [Rendimiento de la comprobación previa de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.performance)
+ [Resumen de comprobaciones previas de actualizaciones de Community MySQL](#AuroraMySQL.upgrade-prechecks.community)
+ [Resumen de comprobaciones previas de actualizaciones de Aurora MySQL](#AuroraMySQL.upgrade-prechecks.ams)
+ [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
  + [Errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
    + [Comprobaciones previas de MySQL que informan de errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
    + [Comprobaciones previas de Aurora MySQL que informan de errores](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
  + [Advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
    + [Comprobaciones previas de MySQL que informan de advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
    + [Comprobaciones previas de Aurora MySQL que informan de advertencias](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
  + [​Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
  + [Errores, advertencias o avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)

## Proceso de comprobación previa de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.process"></a>

Tal y como se ha indicado anteriormente, el proceso de actualización de Aurora MySQL implica la ejecución de comprobaciones de compatibilidad (comprobaciones previas) en la base de datos antes de continuar con la actualización de la versión principal.

En el caso de las actualizaciones locales, las comprobaciones previas se ejecutan en la instancia de base de datos de escritor mientras esté en línea. Si la comprobación previa se realiza correctamente, se llevará a cabo la actualización. Si se encuentran errores, se registrarán en el archivo `upgrade-prechecks.log` y se cancelará la actualización. Antes de volver a intentar la actualización, resuelva los errores que aparezcan en el archivo `upgrade-prechecks.log`.

En el caso de las actualizaciones de restauración de instantánea, la comprobación previa se ejecuta durante el proceso de restauración. Si se realiza correctamente, la base de datos se actualizará a la nueva versión de Aurora MySQL. Si se encuentran errores, se registrarán en el archivo `upgrade-prechecks.log` y se cancelará la actualización. Antes de volver a intentar la actualización, resuelva los errores que aparezcan en el archivo `upgrade-prechecks.log`.

Para obtener más información, consulte [Determinación del motivo de los errores en una actualización de la versión principal de Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md) y [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Para supervisar el estado de la comprobación previa, puede ver los siguientes eventos en el clúster de la base de datos.


| Estado de la comprobación previa | Mensaje de evento | Action | 
| --- | --- | --- | 
|  Started  |  Preparación de la actualización en curso: se están iniciando las comprobaciones previas de la actualización en línea.  | Ninguno | 
|  Failed  |  El clúster de la base de datos tiene un estado que no se puede actualizar: se ha producido un error en las comprobaciones previas de la actualización. Para obtener más información, consulte el archivo upgrade-prechecks.log. Para obtener más información sobre cómo solucionar la causa del error de actualización, consulte [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  |  Revise el archivo `upgrade-prechecks.log` por si tiene errores.  Corrija los errores. Vuelva a intentar la actualización.  | 
|  Realizado correctamente  |  Preparación de la actualización en curso: se han completado las comprobaciones previas de la actualización en línea.  |  Se ha realizado correctamente la comprobación previa y no se ha devuelto ningún error. Revise el archivo `upgrade-prechecks.log` por si hay advertencias y avisos.  | 

Para obtener más información sobre la visualización de eventos, consulte [Consulta de eventos de Amazon RDS](USER_ListEvents.md).

## Formato de registro de comprobación previa de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-format"></a>

Una vez finalizadas las comprobaciones de compatibilidad de las actualizaciones (comprobaciones previas), puede revisar el archivo `upgrade-prechecks.log`. En el archivo de registro se incluyen los resultados, los objetos afectados y la información de corrección de cada comprobación previa.

Los errores bloquean la actualización. Debe resolverlos antes de volver a intentar la actualización.

Las advertencias y los avisos son menos importantes, pero le recomendamos que los revise detenidamente para asegurarse de que no haya problemas de compatibilidad con la carga de trabajo de la aplicación. Resuelva de inmediato cualquier problema que se detecte.

El archivo de registro tiene el formato siguiente:
+ `targetVersion`: la versión compatible con MySQL de la actualización de Aurora MySQL.
+ `auroraServerVersion`: la versión de Aurora MySQL en la que se ha ejecutado la comprobación previa.
+ `auroraTargetVersion`: la versión de Aurora MySQL a la que está actualizando.
+ `checksPerformed`: incluye la lista de comprobaciones previas realizadas.
+ `id`: el nombre de la comprobación previa que se está ejecutando.
+ `title`: una descripción de la comprobación previa que se está ejecutando.
+ `status`: esto no indica si la comprobación previa se ha realizado correctamente o si se ha producido un error en ella, pero muestra el estado de la consulta de comprobación previa:
  + `OK`: la consulta de comprobación previa se ha ejecutado y completado correctamente.
  + `ERROR`: no se ha podido ejecutar la consulta de comprobación previa. Esto puede ocurrir debido a problemas, como, por ejemplo, las limitaciones de recursos, los reinicios inesperados de la instancia o la interrupción de la consulta de comprobación previa de la compatibilidad.

    Para obtener más información, consulte [este ejemplo](#precheck-query-failed).
+ `description`: una descripción general de la incompatibilidad y cómo solucionar el problema.
+ `documentationLink`: si procede, aquí encontrará un enlace a la documentación pertinente de Aurora MySQL o MySQL. Para obtener más información, consulte [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).
+ `detectedProblems`: si la comprobación previa devuelve un error, una advertencia o un aviso, se mostrarán los detalles de la incompatibilidad y los objetos incompatibles, si procede:
  + `level`: el nivel de incompatibilidad detectado por la comprobación previa. A continuación, se muestran los niveles válidos:
    + `Error`: no se puede continuar con la actualización hasta que se resuelva la incompatibilidad.
    + `Warning`: se puede continuar con la actualización, pero se ha detectado un objeto, una sintaxis o una configuración obsoletos. Revise detenidamente las advertencias y resuélvalas de inmediato para evitar problemas en futuras versiones. 
    + `Notice`: se puede continuar con la actualización, pero se ha detectado un objeto, una sintaxis o una configuración obsoletos. Revise detenidamente los avisos y resuélvalos de inmediato para evitar problemas en futuras versiones. 
  + `dbObject`: el nombre del objeto de la base de datos en el que se ha detectado la incompatibilidad.
  + `description`: una descripción detallada de la incompatibilidad y cómo solucionar el problema.
+ `errorCount`: el número de errores de incompatibilidad detectados. Bloquean la actualización.
+ `warningCount`: el número de advertencias de incompatibilidad detectadas. No bloquean la actualización, pero resuélvalas de inmediato para evitar problemas en futuras versiones.
+ `noticeCount`: el número de avisos de incompatibilidad detectados. No bloquean la actualización; resuélvalos de inmediato para evitar problemas en futuras versiones.
+ `Summary`: un resumen del número de errores, advertencias y avisos de compatibilidad de las comprobaciones previas.

## Ejemplos de resultados del registro de comprobación previa de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-examples"></a>

En los siguientes ejemplos se muestra el resultado del registro de comprobación previa que puede ver. Para obtener más información sobre las comprobaciones previas que se ejecutan, consulte [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

**Estado correcto de la comprobación previa; no se ha detectado ninguna incompatibilidad**  
La consulta de comprobación previa se ha completado correctamente. No se ha detectado ninguna incompatibilidad.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns",
  "status": "OK",
  "detectedProblems": []
},
```

**Estado correcto de la comprobación previa; se ha detectado un error**  
La consulta de comprobación previa se ha completado correctamente. Se ha detectado un error.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexes",
  "status": "OK",
  "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test25.sbtest1",
        "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;"
      },
 }
```

**Estado correcto de la comprobación previa; se ha detectado una advertencia**  
Se pueden devolver advertencias cuando una comprobación previa se ha realizado correctamente o se ha producido un error en ella.  
En este caso, la consulta de comprobación previa se ha completado correctamente. Se han detectado dos advertencias.  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
    ]
}
```

**ERROR en el estado de la comprobación previa; no se ha registrado ninguna incompatibilidad**  
Se ha producido un error en la consulta de comprobación previa, por lo que no se han podido comprobar las incompatibilidades.  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "ERROR",
  "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class."
}
```
Este error puede producirse debido a un reinicio inesperado de la instancia o a la interrupción de una consulta de comprobación previa de compatibilidad en la base de datos durante la ejecución. Por ejemplo, en clases de instancias de base de datos más pequeñas, es posible que esto se produzca cuando se agote la memoria disponible en la instancia.  
Puede usar la métrica `FreeableMemory` de Amazon CloudWatch para verificar la memoria disponible en la instancia mientras se ejecutan las comprobaciones previas. Si la instancia se ha quedado sin memoria, le recomendamos que vuelva a intentar la actualización en una clase de instancia de base de datos más grande. En algunos casos, puede utilizar una [implementación azul/verde](blue-green-deployments-overview.md), lo que permite que las comprobaciones previas y las actualizaciones se ejecuten en el clúster de base de datos “verde” con independencia de la carga de trabajo de producción, lo que también consume recursos del sistema.  
Para obtener más información, consulte [Solución de problemas de uso de memoria de bases de datos Aurora MySQL](ams-workload-memory.md).

**Resumen de la comprobación previa: se han detectado un error y tres advertencias**  
Las comprobaciones previas de compatibilidad también incluyen información sobre las versiones de Aurora MySQL de origen y destino, así como un resumen del número de errores, advertencias y avisos, al final del resultado de la comprobación previa.  
Por ejemplo, en el siguiente resultado se indica que se ha intentado actualizar de Aurora MySQL 2.11.6 a Aurora MySQL 3.07.1. La actualización ha devuelto un error, tres advertencias y ningún aviso. Dado que las actualizaciones no pueden continuar cuando se devuelve un error, debe resolver el problema de compatibilidad [routineSyntaxCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#routineSyntaxCheck) y volver a intentar la actualización.  

```
{
  "serverAddress": "/tmp%2Fmysql.sock",
  "serverVersion": "5.7.12 - MySQL Community Server (GPL)",
  "targetVersion": "8.0.36",
  "auroraServerVersion": "2.11.6",
  "auroraTargetVersion": "3.07.1",
  "outfilePath": "/rdsdbdata/tmp/PreChecker.log",
  "checksPerformed": [{
      ... output for each individual precheck ...
      .
      .
      {
        "id": "oldTemporalCheck",
        "title": "Usage of old temporal type",
        "status": "OK",
          "detectedProblems": []
      },
      {
        "id": "routinesSyntaxCheck",
        "title": "MySQL 8.0 syntax check for routine-like objects",
        "status": "OK",
        "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
        "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
        "detectedProblems": [{
            "level": "Error",
            "dbObject": "test.select_res_word",
            "description": "at line 2,18: unexpected token 'except'"
        }]
      },
      .
      .
      .
      {
        "id": "zeroDatesCheck",
        "title": "Zero Date, Datetime, and Timestamp values",
        "status": "OK",
        "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
        "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
        "detectedProblems": [{
            "level": "Warning",
            "dbObject": "global.sql_mode",
            "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            },
            {
            "level": "Warning",
            "dbObject": "session.sql_mode",
            "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            }
          ]
       },
       .
       .
       .
  }],
  "errorCount": 1,
  "warningCount": 3,
  "noticeCount": 0,
  "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues."
}
```

## Rendimiento de la comprobación previa de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.performance"></a>

Las comprobaciones previas de compatibilidad se ejecutan antes de que se desconecte la instancia de base de datos para la actualización, de modo que, en circunstancias normales, no provocan tiempos de inactividad en la instancia de base de datos al ejecutarse. Sin embargo, pueden afectar a la carga de trabajo de la aplicación que se ejecuta en la instancia de base de datos del escritor. Las comprobaciones previas acceden al diccionario de datos a través de las tablas de [information\$1schema](https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-introduction.html), lo que puede ser lento si hay muchos objetos de base de datos. Tenga en cuenta los siguientes factores:
+ La duración de la comprobación previa varía en función del número de objetos de la base de datos, como, por ejemplo, tablas, columnas, rutinas y limitaciones. Los clústeres de base de datos con un gran número de objetos pueden tardar más en ejecutarse.

  Por ejemplo, [removedFunctionsCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#removedFunctionsCheck) puede tardar más y utilizar más recursos en función del número de [objetos almacenados](https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html).
+ En el caso de las actualizaciones locales, el uso de una clase de instancia de base de datos mayor (por ejemplo, db.r5.24xlarge o db.r6g.16xlarge) puede ayudar a que la actualización se complete de forma más rápida al utilizar más CPU. Puede reducir el tamaño después de la actualización.
+ Las consultas en `information_schema` en varias bases de datos pueden ser lentas, especialmente si hay muchos objetos y en instancias de bases de datos más pequeñas. En tales casos, plantéese la posibilidad de utilizar la clonación, la restauración de instantáneas o una [implementación azul/verde](blue-green-deployments-overview.md) para las actualizaciones.
+ El uso de recursos de comprobación previa (CPU, memoria) puede aumentar con más objetos, lo que se traduce en tiempos de ejecución más prolongados en instancias de base de datos más pequeñas. En tales casos, plantéese la posibilidad de probar la clonación, la restauración de instantáneas o una implementación azul/verde para las actualizaciones.

  Si se produce un error en las comprobaciones previas por falta de recursos, puede detectarlo en el registro de comprobaciones previas mediante el resultado de estado:

  ```
  "status": "ERROR",
  ```

Para obtener más información, consulte [Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence) y [Planificación de una actualización de versión principal para un clúster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Resumen de comprobaciones previas de actualizaciones de Community MySQL
<a name="AuroraMySQL.upgrade-prechecks.community"></a>

A continuación, se muestra una lista general de incompatibilidades entre MySQL 5.7 y 8.0:
+ Su clúster de base de datos compatible con MySQL 5.7 no puede usar características que no sean compatibles con MySQL 8.0.

  Para obtener más información, consulte la sección sobre [características eliminadas en MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals), en la documentación de MySQL.
+ No debe haber ninguna infracción de la palabra clave ni de la palabra reservada. Es posible que en MySQL 8.0 haya algunas palabras clave reservadas que no estaban reservadas previamente.

  Para obtener más información, consulte la página sobre [Palabras clave y palabras reservadas](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) en la documentación de MySQL.
+ Para mejorar la compatibilidad de Unicode, piense en convertir objetos que usen el conjunto de caracteres `utf8mb3` para usar el conjunto de caracteres `utf8mb4`. El conjunto de caracteres `utf8mb3` ha quedado obsoleto. Asimismo, piense en utilizar `utf8mb4` para referencias de conjuntos de caracteres, en vez de utilizar `utf8`, ya que actualmente `utf8` es un alias del conjunto de caracteres `utf8mb3`.

  Para obtener más información, consulte la sección sobre el [conjunto de caracteres utf8mb3 (codificación Unicode UTF-8 de 3 bytes)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) en la documentación de MySQL.
+ No debe haber tablas InnoDB con un formato de fila que no sea el predeterminado.
+ No debe haber atributos de tipo de longitud `ZEROFILL` o `display`.
+ Ninguna tabla particionada debe usar un motor de almacenamiento que no tenga soporte de particiones nativo.
+ No tiene que haber tablas en la base de datos del sistema `mysql` de MySQL 5.7 que tengan el mismo nombre que una tabla usada por el diccionario de datos de MySQL 8.0.
+ Ninguna tabla debe usar tipos o funciones de datos obsoletos.
+ No tiene que haber nombres de restricción de clave externa que superen los 64 caracteres.
+ No tiene que haber modos SQL obsoletos en su configuración de variable del sistema `sql_mode`.
+ No tiene que haber tablas ni procedimientos almacenados que tengan elementos de columna `ENUM` o `SET` individuales que superen los 255 caracteres de longitud.
+ Ninguna partición de tabla debe residir en espacios de tablas InnoDB compartidos.
+ No debe haber referencias circulares en las rutas de los archivos de datos de los espacios de tablas.
+ No tiene que haber consultas ni definiciones de programas almacenadas que usen calificadores `ASC` o `DESC` para cláusulas `GROUP BY`.
+ No debe haber ninguna variable de sistema eliminada y las variables de sistema deben usar los nuevos valores predeterminados para MySQL 8.0.
+ No debe haber valores de fecha, fecha y hora o marca temporal que sean cero (`0`).
+ No debe haber inconsistencias en el esquema causadas por la eliminación o la corrupción de un archivo.
+ No debe haber nombres de tablas que contengan la cadena de caracteres `FTS`.
+ No debe haber tablas InnoDB que pertenezcan a un motor diferente.
+ No debe haber nombres de tablas o esquemas que no sean válidos para MySQL 5.7.

Para obtener más información sobre las comprobaciones previas que se ejecutan, consulte [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Para obtener más información acerca de cómo actualizar a MySQL 8.0, consulte la sección sobre la [actualización de MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) en la documentación de MySQL. Para obtener una descripción general de los cambios en MySQL 8.0, consulte la sección [What is new in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) en la documentación de MySQL.

## Resumen de comprobaciones previas de actualizaciones de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.ams"></a>

Aurora MySQL tiene sus propios requisitos específicos al actualizar de la versión 2 a la versión 3, entre los que se incluyen los siguientes:
+ No debe haber ninguna sintaxis SQL obsoleta, como `SQL_CACHE`, `SQL_NO_CACHE` y `QUERY_CACHE`, en las vistas, las rutinas, los disparadores y los eventos.
+ No debe haber ninguna columna `FTS_DOC_ID` en ninguna tabla sin el índice `FTS`.
+ No debe haber ninguna discrepancia en la definición de columna entre el diccionario de datos de InnoDB y la definición real de la tabla.
+ Todos los nombres de bases de datos y tablas deben estar en minúscula cuando el parámetro `lower_case_table_names` esté configurado como `1`.
+ No debe haber un definidor vacío ni faltar un definidor en los eventos y disparadores, y el contexto de creación de los disparadores tiene que ser válido.
+ Todos los nombres de desencadenadores de una base de datos deben ser únicos.
+ La recuperación de DDL y la DDL rápida no son compatibles con la versión 3 de Aurora MySQL. No debe haber artefactos en las bases de datos relacionados con estas características.
+ Las tablas con el formato de fila `REDUNDANT` o `COMPACT` no pueden tener índices de más de 767 bytes.
+ La longitud del prefijo de los índices definidos en las columnas de texto `tiny` no puede superar los 255 bytes. Con el conjunto de caracteres `utf8mb4` configurado, esto limita la longitud de prefijo admitida a 63 caracteres.

  Se permitía una longitud de prefijo mayor en MySQL 5.7 mediante el parámetro `innodb_large_prefix`. Este parámetro ha quedado obsoleto en MySQL 8.0.
+ No debe haber ninguna incoherencia en los metadatos de InnoDB en la tabla `mysql.host`.
+ No debe haber ninguna discrepancia en los tipos de datos de las columnas en las tablas del sistema.
+ No debe haber transacciones XA en el estado `prepared`.
+ Los nombres de las columnas de las vistas no pueden tener más de 64 caracteres.
+ Los caracteres especiales de los procedimientos almacenados no pueden ser incoherentes.
+ Las tablas no pueden tener incoherencias en las rutas de los archivos de datos.

Para obtener más información sobre las comprobaciones previas que se ejecutan, consulte [Referencia de descripciones de comprobaciones previas de Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

# Referencia de descripciones de comprobaciones previas de Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.descriptions"></a>

A continuación, se describen en detalle las comprobaciones previas para la actualización de Aurora MySQL.

**Contents**
+ [Errores](#precheck-descriptions-errors)
  + [Comprobaciones previas de MySQL que informan de errores](#precheck-descriptions-errors.mysql)
  + [Comprobaciones previas de Aurora MySQL que informan de errores](#precheck-descriptions-errors.aurora)
+ [Advertencias](#precheck-descriptions-warnings)
  + [Comprobaciones previas de MySQL que informan de advertencias](#precheck-descriptions-warnings.mysql)
  + [Comprobaciones previas de Aurora MySQL que informan de advertencias](#precheck-descriptions-warnings.aurora)
+ [​Avisos](#precheck-descriptions-notices)
+ [Errores, advertencias o avisos](#precheck-descriptions-all)

## Errores
<a name="precheck-descriptions-errors"></a>

Las siguientes comprobaciones previas generan errores cuando fallan y no se puede continuar con la actualización.

**Topics**
+ [Comprobaciones previas de MySQL que informan de errores](#precheck-descriptions-errors.mysql)
+ [Comprobaciones previas de Aurora MySQL que informan de errores](#precheck-descriptions-errors.aurora)

### Comprobaciones previas de MySQL que informan de errores
<a name="precheck-descriptions-errors.mysql"></a>

Las siguientes comprobaciones previas proceden de Community MySQL:
+ [checkTableMysqlSchema](#checkTableMysqlSchema)
+ [circularDirectoryCheck](#circularDirectoryCheck)
+ [columnsWhichCannotHaveDefaultsCheck](#columnsWhichCannotHaveDefaultsCheck)
+ [depreciatedSyntaxCheck](#depreciatedSyntaxCheck)
+ [engineMixupCheck](#engineMixupCheck)
+ [enumSetElementLengthCheck](#enumSetElementLengthCheck)
+ [foreignKeyLengthCheck](#foreignKeyLengthCheck)
+ [getDuplicateTriggers](#getDuplicateTriggers)
+ [getEventsWithNullDefiner](#getEventsWithNullDefiner)
+ [getMismatchedMetadata](#getMismatchedMetadata)
+ [getTriggersWithNullDefiner](#getTriggersWithNullDefiner)
+ [getValueOfVariablelower\$1case\$1table\$1names](#getValueOfVariable)
+ [groupByAscSyntaxCheck](#groupByAscSyntaxCheck)
+ [mysqlEmptyDotTableSyntaxCheck](#mysqlEmptyDotTableSyntaxCheck)
+ [mysqlIndexTooLargeCheck](#mysqlIndexTooLargeCheck)
+ [mysqlInvalid57NamesCheck](#mysqlInvalid57NamesCheck)
+ [mysqlOrphanedRoutinesCheck](#mysqlOrphanedRoutinesCheck)
+ [mysqlSchemaCheck](#mysqlSchemaCheck)
+ [nonNativePartitioningCheck](#nonNativePartitioningCheck)
+ [oldTemporalCheck](#oldTemporalCheck)
+ [partitionedTablesInSharedTablespaceCheck](#partitionedTablesInSharedTablespace)
+ [removedFunctionsCheck](#removedFunctionsCheck)
+ [routineSyntaxCheck](#routineSyntaxCheck)
+ [schemaInconsistencyCheck](#schemaInconsistencyCheck)

**checkTableMysqlSchema**  
**Nivel de comprobación previa: error**  
**Problemas notificados por el comando `check table x for upgrade` del esquema de `mysql`**  
Antes de iniciar la actualización a la versión 3 de Aurora MySQL, se ejecuta `check table for upgrade` en cada tabla del esquema de `mysql` de la instancia de la base de datos. El comando `check table for upgrade` examina las tablas para detectar posibles problemas que puedan surgir durante una actualización a una versión más reciente de MySQL. Ejecutar este comando antes de intentar una actualización puede ayudar a identificar y resolver cualquier incompatibilidad con antelación, lo que facilita el proceso de actualización propiamente dicho.  
Este comando realiza varias comprobaciones en cada tabla, como, por ejemplo:  
+ Verifica que los metadatos y la estructura de la tabla sean compatibles con la versión de MySQL de destino
+ Comprueba si hay alguna característica obsoleta o eliminada que se utilice en la tabla
+ Garantiza que la tabla se pueda actualizar correctamente sin que se pierdan datos
Para obtener más información, consulte la sección [CHECK TABLE statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "checkTableMysqlSchema",
  "title": "Issues reported by 'check table x for upgrade' command for mysql schema.",
  "status": "OK",
  "detectedProblems": []
}
```
El resultado de esta comprobación previa depende del error detectado y de cuándo se produzca, ya que `check table for upgrade` realiza varias comprobaciones.  
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.

**circularDirectoryCheck**  
**Nivel de comprobación previa: error**  
**Referencias circulares a directorios en las rutas de los archivos de datos de los espacios de tablas**  
A partir de la [versión 8.0.17 de MySQL](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html), la cláusula `CREATE TABLESPACE ... ADD DATAFILE` ya no permite referencias circulares a directorios. Para evitar problemas de actualización, elimine cualquier referencia circular a directorios de las rutas de los archivos de datos de los espacios de tablas antes de actualizar a la versión 3 de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "circularDirectory",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "ts2",
        "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'",
        "dbObjectType": "Tablespace"
      }
  ]
}
```
Si recibe este error, vuelva a crear las tablas con un [espacio de tabla file-per-table](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html). Utilice las rutas de archivos predeterminadas para todas las definiciones de tablas y espacios de tablas.  
Aurora MySQL no admite los comandos `CREATE TABLESPACE` ni los espacios de tablas.  
Antes de volver a crear los espacios de tablas, consulte la sección [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) en la documentación de MySQL para conocer los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.
Una vez que los haya creado de nuevo, se aprueba la comprobación previa, lo que permite continuar con la actualización.  

```
{
  "id": "circularDirectoryCheck",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "detectedProblems": []
},
```

**columnsWhichCannotHaveDefaultsCheck**  
**Nivel de comprobación previa: error**  
**Columnas que no pueden tener valores predeterminados**  
En las versiones anteriores a MySQL 8.0.13, las columnas `BLOB`, `TEXT`, `GEOMETRY` y `JSON` no pueden tener [valores predeterminados](https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html). Elimine las cláusulas predeterminadas en estas columnas antes de actualizar a la versión 3 de Aurora MySQL. Para obtener más información sobre los cambios en la gestión predeterminada de estos tipos de datos, consulte [Data type default values](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test_blob_default.geo_col",
        "description": "geometry"
      }
  ]
},
```
La comprobación previa devuelve un error porque la columna `geo_col` de la tabla `test.test_blob_default` utiliza un tipo de datos `BLOB`, `TEXT`, `GEOMETRY` o `JSON` con un valor predeterminado especificado.  
Si observamos la definición de la tabla, podemos ver que la columna `geo_col` se ha definido como `geo_col geometry NOT NULL default ''`.  

```
mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
```
Es necesario eliminar esta cláusula predeterminada para permitir que se apruebe la comprobación previa.  
Antes de ejecutar instrucciones `ALTER TABLE` o volver a crear espacios de tablas, consulte la sección [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) en la documentación de MySQL para comprender los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.

```
mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
```
La comprobación previa se aprueba y puede volver a intentar la actualización.  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "detectedProblems": []
},
```

**depreciatedSyntaxCheck**  
**Nivel de comprobación previa: error**  
**Uso de palabras clave obsoletas en la definición**  
MySQL 8.0 ha eliminado la [caché de consultas](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). Como resultado, se ha eliminado parte de la sintaxis de SQL específica de la caché de consultas. Si alguno de los objetos de la base de datos incluye las palabras clave `QUERY CACHE`, `SQL_CACHE` o `SQL_NO_CACHE`, se devolverá un error de comprobación previa. Para resolver este problema, vuelva a crear estos objetos. Para ello, elimine las palabras clave mencionadas.  
**Ejemplo de salida:**  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.",
  "detectedProblems": [
      {
"level": "Error",
"dbObject": "test.no_query_cache_check",
"description": "PROCEDURE uses depreciated words in definition"
      }
  ]
}
```
La comprobación previa indica que el procedimiento almacenado de `test.no_query_cache_check` utiliza una de las palabras clave eliminadas. Al observar la definición del procedimiento, podemos ver que utiliza `SQL_NO_CACHE`.  

```
mysql> show create procedure test.no_query_cache_check\G
*************************** 1. row ***************************
           Procedure: no_query_cache_check
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`()
BEGIN
    SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Elimine la palabra clave.  

```
mysql> drop procedure test.no_query_cache_check;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //

mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN     SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
```
Tras eliminar la palabra clave, la comprobación previa se completa correctamente.  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "detectedProblems": []
}
```

**engineMixupCheck**  
**Nivel de comprobación previa: error**  
**Tablas reconocidas por InnoDB que pertenecen a otro motor**  
Al igual que en [schemaInconsistencyCheck](#schemaInconsistencyCheck), esta comprobación previa verifica que los metadatos de la tabla de MySQL son coherentes antes de continuar con la actualización.   
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "engineMixupCheck",
  "title": "Tables recognized by InnoDB that belong to a different engine",
  "status": "OK",
  "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.general_log_backup",
        "description": "recognized by the InnoDB engine but belongs to CSV"
      }
  ]
}
```

**enumSetElementLengthCheck**  
**Nivel de comprobación previa: error**  
**Definiciones de las columnas `ENUM` y `SET` que incluyen elementos que tienen más de 255 caracteres**  
Las tablas y los procedimientos almacenados no deben tener elementos de columna `ENUM` o `SET` que superen los 255 caracteres o 1020 bytes. En las versiones anteriores a MySQL 8.0, la longitud máxima combinada era de 64 K, pero la versión 8.0 limita los elementos individuales a 255 caracteres o 1020 bytes (en el caso de admitir caracteres multibyte). Si se produce un error en la comprobación previa para `enumSetElementLengthCheck`, modifique los elementos que superen estos nuevos límites antes de volver a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "enumSetElementLengthCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.large_set.s",
        "description": "SET contains element longer than 255 characters"
      }
  ]
},
```
La comprobación previa indica un error porque la columna `s` de la tabla `test.large_set` incluye un elemento `SET` de más de 255 caracteres.  
Tras reducir el tamaño de `SET` de esta columna, se aprueba la comprobación previa, lo que permite continuar con la actualización.  

```
{
  "id": "enumSetElementLenghtCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "detectedProblems": []
},
```

**foreignKeyLengthCheck**  
**Nivel de comprobación previa: error**  
**Nombres de restricción de clave externa que superen los 64 caracteres**  
En MySQL, la longitud de los identificadores está limitada a 64 caracteres, tal y como se describe en la [documentación de MySQL](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html). Debido a [problemas](https://bugs.mysql.com/bug.php?id=88118) detectados en los que la longitud de las claves externas podía ser igual o superior a este valor, lo que provocaba errores en la actualización, se ha implementado esta comprobación previa. Si detecta errores con esta comprobación previa, debe [modificar la restricción o cambiarle el nombre](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) para que tenga menos de 64 caracteres antes de volver a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "foreignKeyLength",
  "title": "Foreign key constraint names longer than 64 characters",
  "status": "OK",
  "detectedProblems": []
}
```

**getDuplicateTriggers**  
**Nivel de comprobación previa: error**  
**Todos los nombres de desencadenadores de una base de datos deben ser únicos.**  
Debido a los cambios en la implementación del diccionario de datos, MySQL 8.0 no admite desencadenadores que distingan entre mayúsculas y minúsculas en una base de datos. Esta comprobación previa valida que el clúster de base de datos no tenga una o varias bases de datos que incluyan desencadenadores duplicados. Para obtener más información, consulte la sección [Identifier case sensitivity](https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_product"
      },
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_PRODUCT"
      }
  ]
}
```
La comprobación previa indica que hay un error en el clúster de base de datos, ya que tiene dos desencadenadores con el mismo nombre, pero se diferencian en el uso de mayúsculas y minúsculas: `test.before_insert_product` y `test.before_insert_PRODUCT`.  
Antes de realizar la actualización, cambie el nombre de los desencadenadores o elimínelos y vuelva a crearlos con un nombre nuevo.  
Tras cambiarle el nombre de `test.before_insert_PRODUCT` a `test.before_insert_product_2`, la comprobación previa se realiza correctamente.  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "detectedProblems": []
}
```

**getEventsWithNullDefiner**  
**Nivel de comprobación previa: error**  
**La columna de definidor de `mysql.event` no puede ser nula ni estar vacía.**  
El atributo `DEFINER` especifica la cuenta de MySQL que posee una definición de objeto almacenado, como, por ejemplo, un desencadenador, un procedimiento almacenado o un evento. Este atributo es particularmente útil en situaciones en las que se desea controlar el contexto de seguridad en el que se ejecuta el objeto almacenado. Al crear un objeto almacenado, si no se especifica un atributo `DEFINER`, el valor predeterminado será el usuario que ha creado el objeto.  
Al actualizar a MySQL 8.0, no puede tener ningún objeto almacenado que tenga un definidor `null` o que esté vacío en el diccionario de datos de MySQL. Si tiene esos objetos almacenados, se generará un error de comprobación previa. Debe solucionarlo antes de continuar con la actualización.  
Ejemplo de error:  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "description": "Error: Set definer column in mysql.event to a valid non-null definer.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.get_version",
        "description": "Set definer for event get_version in Schema test"
      }
  ]
}
```
La comprobación previa devuelve un error para el [evento](https://dev.mysql.com/doc/refman/5.7/en/events-overview.html) `test.get_version`, ya que tiene un definidor `null`.  
Para resolver este problema, puede comprobar la definición del evento. Como puede ver, el definidor es `null` o que esté vacío.  

```
mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+---------+
| db   | name        | definer |
+------+-------------+---------+
| test | get_version |         |
+------+-------------+---------+
1 row in set (0.00 sec)
```
Elimine o vuelva a crear el evento con un definidor válido.  
Antes de eliminar o volver a definir un `DEFINER`, revise y compruebe detenidamente los requisitos de aplicación y privilegios. Para obtener más información, consulte la sección [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) en la documentación de MySQL.

```
mysql> drop event test.get_version;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> delimiter $$
mysql> CREATE EVENT get_version
    ->     ON SCHEDULE
    ->       EVERY 1 DAY
    ->     DO
    ->      ///DO SOMETHING //
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+------------+
| db   | name        | definer    |
+------+-------------+------------+
| test | get_version | reinvent@% |
+------+-------------+------------+
1 row in set (0.00 sec)
```
Ahora se aprueba la comprobación previa.  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "detectedProblems": []},
```

**getMismatchedMetadata**  
**Nivel de comprobación previa: error**  
**Discrepancia en la definición de columna entre el diccionario de datos de InnoDB y la definición real de la tabla**  
Al igual que en [schemaInconsistencyCheck](#schemaInconsistencyCheck), esta comprobación previa verifica que los metadatos de la tabla de MySQL son coherentes antes de continuar con la actualización. En este caso, la comprobación previa verifica que las definiciones de columna coincidan entre el diccionario de datos de InnoDB y la definición de tabla de MySQL. Si se detecta una discrepancia, no se continuará con la actualización.  
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "getMismatchedMetadata",
  "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.",
  "status": "OK",
  "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.mismatchTable",
        "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id"
      }
  ]
}
```
La comprobación previa indica que hay una discrepancia en los metadatos de la columna `id` de la tabla `test.mismatchTable`. En concreto, los metadatos de MySQL tienen el nombre de la columna como `iD`, mientras que InnoDB lo tiene como `id`.

**getTriggersWithNullDefiner**  
**Nivel de comprobación previa: error**  
**La columna de definidor de `information_schema.triggers` no puede ser `null` ni estar vacía.**  
La comprobación previa valida que la base de datos no tenga desencadenadores definidos con definidores `null` o vacíos. Para obtener más información sobre los requisitos del definidor para los objetos almacenados, consulte [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
**Ejemplo de salida:**  

```
{
  "id": "getTriggersWithNullDefiner",
  "title": "The definer column for information_schema.triggers cannot be null or blank.",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.example_trigger",
        "description": "Set definer for trigger example_trigger in Schema test"
      }
  ]
}
```
La comprobación previa devuelve un error porque el desencadenador `example_trigger` del esquema `test` tiene un definidor `null`. Para solucionar este problema, corrija el definidor volviendo a crear el desencadenador con un usuario válido o elimínelo. Para obtener más información, consulte el ejemplo en [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
Antes de eliminar o volver a definir un `DEFINER`, revise y compruebe detenidamente los requisitos de aplicación y privilegios. Para obtener más información, consulte la sección [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) en la documentación de MySQL.

**getValueOfVariablelower\$1case\$1table\$1names**  
**Nivel de comprobación previa: error**  
**Todos los nombres de bases de datos y tablas deben estar en minúscula cuando el parámetro `lower_case_table_names` esté establecido en `1`.**  
En las versiones anteriores a MySQL 8.0, los nombres de bases de datos, los nombres de tablas y otros objetos correspondían a los archivos del directorio de datos, como, por ejemplo, los metadatos basados en archivos (.frm). La variable de sistema [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) permite a los usuarios controlar la forma en que el servidor distingue entre mayúsculas y minúsculas en los identificadores de los objetos de la base de datos y el almacenamiento de dichos objetos de metadatos. Este parámetro se puede cambiar en un servidor ya inicializado tras un reinicio.  
Sin embargo, en MySQL 8.0, aunque este parámetro sigue controlando la forma en que el servidor distingue entre mayúsculas y minúsculas en los identificadores, no se puede cambiar una vez inicializado el diccionario de datos. Al actualizar o crear una base de datos MySQL 8.0, el valor que se establezca para `lower_case_table_names` la primera vez que se inicie el diccionario de datos en MySQL será el que se utilice durante toda la vida útil de dicha base de datos. Esta restricción se ha establecido como parte de la implementación del [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), en la que los objetos de la base de datos se migran de los metadatos basados en archivos a las tablas internas de InnoDB del esquema `mysql`.  
Para obtener más información, consulte la sección [Data dictionary changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-data-dictionary-changes) en la documentación de MySQL.  
Para evitar problemas a la hora de actualizar los metadatos basados en archivos al nuevo Atomic Data Dictionary, esta comprobación previa valida que, si está establecida la variable `lower_case_table_names = 1`, todas las tablas se almacenen en el disco en minúsculas. En caso contrario, aparecerá un error de comprobación previa, y tendrá que corregir los metadatos antes de continuar con la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "getValueOfVariablelower_case_table_names",
  "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.",
  "status": "OK",
  "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.TEST",
        "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1"
      }
  ]
}
```
Se devuelve un error porque la tabla `test.TEST` incluye letras mayúsculas, pero la variable `lower_case_table_names` está establecida en `1`.  
Para resolver este problema, puede cambiar el nombre de la tabla a minúsculas o modificar el parámetro `lower_case_table_names` del clúster de base de datos antes de iniciar la actualización.  
Pruebe y revise detenidamente la documentación sobre la [distinción entre mayúsculas y minúsculas](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) en MySQL y cómo estos cambios podrían afectar a la aplicación.  
Consulte también la documentación de MySQL 8.0 sobre cómo se gestionan las variables [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names) de forma diferente en MySQL 8.0.

**groupByAscSyntaxCheck**  
**Nivel de comprobación previa: error**  
**Uso de la sintaxis de `GROUP BY ASC/DESC` eliminada**  
A partir de la versión 8.0.13 de MySQL, se ha eliminado la sintaxis obsoleta de `ASC` o `DESC` para las cláusulas `GROUP BY`. Las consultas que se basan en la clasificación `GROUP BY` ahora pueden producir resultados diferentes. Para obtener un orden de clasificación específico, utilice una cláusula `ORDER BY`. Si existe algún objeto en la base de datos que utilice esta sintaxis, debe volver a crearlo mediante una cláusula `ORDER BY` antes de volver a intentar la actualización. Para obtener más información, consulte la sección [SQL changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "groupbyAscSyntaxCheck",
  "title": "Usage of removed GROUP BY ASC/DESC syntax",
  "status": "OK",
  "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.",
  "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.groupbyasc",
        "description": "PROCEDURE uses removed GROUP BY ASC syntax",
        "dbObjectType": "Routine"
      }
  ]
}
```

**mysqlEmptyDotTableSyntaxCheck**  
**Nivel de comprobación previa: error**  
**Comprobación de si la sintaxis de `.<table>` utilizada en las rutinas está obsoleta.**  
En MySQL 8.0, las rutinas ya no pueden incluir la sintaxis de identificador obsoleta (`\".<table>\"`). Si alguna de las rutinas o desencadenadores almacenados incluye dichos identificadores, se producirá un error en la actualización. Por ejemplo, ya no se permite la siguiente referencia de `.dot_table`:  

```
mysql> show create procedure incorrect_procedure\G
*************************** 1. row ***************************
           Procedure: incorrect_procedure
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`()
BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Tras volver a crear las rutinas y los desencadenadores para utilizar la sintaxis de identificador correcta y la secuencia de escape, se aprueba la comprobación previa y se puede continuar con la actualización. Para obtener más información sobre los identificadores, consulte la sección [Schema object names](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "mysqlEmptyDotTableSyntaxCheck",
  "title": "Check for deprecated '.<table>' syntax used in routines.",
  "status": "OK",
  "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.incorrect_procedure",
        "description": " routine body contains deprecated identifiers."
      }
  ]
}
```
La comprobación previa devuelve un error para la rutina `incorrect_procedure` de la base de datos `test`, ya que incluye una sintaxis obsoleta.  
Tras corregir la rutina, la comprobación previa se realiza correctamente y puede volver a intentar la actualización.

**mysqlIndexTooLargeCheck**  
**Nivel de comprobación previa: error**  
**Comprobación de si los índices son demasiado grandes para funcionar en las versiones de MySQL posteriores a 5.7**  
En el caso de formatos de fila compactos o redundantes, no debería ser posible crear un índice con un prefijo superior a 767 bytes. Sin embargo, antes de la versión 5.7.35 de MySQL esto era posible. Para obtener más información, consulte las [notas de la versión de MySQL 5.7.35](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-35.html).  
No se podrá acceder a los índices afectados por este error tras la actualización a MySQL 8.0. Esta comprobación previa identifica los índices problemáticos que deben volver a crearse antes de continuar con la actualización.  

```
 {
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_large_idx",
        "description": "IDX_2"
      }
  ]
}
```
La comprobación previa devuelve un error porque la tabla `test.table_with_large_idx` incluye un índice en una tabla que utiliza un formato de fila compacto o redundante de más de 767 bytes. Ya no se podrá acceder a estar tablas después de actualizar a MySQL 8.0. Antes de continuar con la actualización, realice una de las siguientes acciones:  
+ Elimine el índice mencionado en la comprobación previa.
+ Añada un índice mencionado en la comprobación previa.
+ Cambie el formato de fila utilizado en la tabla.
En este caso, volvemos a crear la tabla para resolver el error de comprobación previa. Antes de volver a crear la tabla, asegúrese de que [innodb\$1file\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format) esté establecido en `Barracuda` y que [innodb\$1default\$1row\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format) esté establecido en `dynamic`. Estos son los valores predeterminados en MySQL 5.7. Para obtener más información, consulte las secciones [InnoDB row formats](https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html) y [InnoDB file-format management](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html) en la documentación de MySQL.  
Antes de volver a crear los espacios de tablas, consulte la sección [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) en la documentación de MySQL para conocer los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.

```
mysql > select @@innodb_file_format,@@innodb_default_row_format;
+----------------------+-----------------------------+
| @@innodb_file_format | @@innodb_default_row_format |
+----------------------+-----------------------------+
| Barracuda            | dynamic                     |
+----------------------+-----------------------------+
1 row in set (0.00 sec)

mysql> optimize table table_with_large_idx;
+---------------------------+----------+----------+-------------------------------------------------------------------+
| Table                     | Op       | Msg_type | Msg_text                                                          |
+---------------------------+----------+----------+-------------------------------------------------------------------+
| test.table_with_large_idx | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.table_with_large_idx | optimize | status   | OK                                                                |
+---------------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

# Verify FILE_FORMAT and ROW_FORMAT
mysql>  select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx';
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME                      | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
|       43 | test/table_with_large_idx |   33 |      4 |    26 | Barracuda   | Dynamic    |             0 | Single     |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
1 row in set (0.00 sec)
```
Tras volver a crear la tabla, se aprueba la comprobación previa y se puede continuar con la actualización.  

```
{
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlInvalid57NamesCheck**  
**Nivel de comprobación previa: error**  
**Compruebe si los nombres de tablas y esquemas utilizados en MySQL 5.7 no son válidos**  
Al migrar al nuevo diccionario de datos de MySQL 8.0, la instancia de base de datos no puede incluir esquemas ni tablas con el prefijo `#mysql50#`. Si existe alguno de estos objetos, se produce un error en la actualización. Para resolver este problema, ejecute [mysqlcheck](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html) con los esquemas y tablas devueltos.  
Asegúrese de utilizar la [versión MySQL 5.7](https://downloads.mysql.com/archives/community/) de `mysqlcheck`, ya que [--fix-db-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-db-names) y [--fix-table-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-table-names) se han eliminado de [MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).
**Ejemplo de salida:**  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n  $ mysqlcheck --check-upgrade --all-databases\n  $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n  ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;",
  "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "#mysql50#fix_db_names",
        "description": "Schema name"
      }
  ]
}
```
La comprobación previa indica que el esquema `#mysql50#fix_db_names` tiene un nombre no válido.  
Tras corregir el nombre del esquema, se aprueba la comprobación previa, lo que permite continuar con la actualización.  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlOrphanedRoutinesCheck**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay rutinas huérfanas en la versión 5.7**  
Al migrar al nuevo diccionario de datos de MySQL 8.0, si hay algún procedimiento almacenado en la base de datos donde el esquema ya no existe, se producirá un error en la actualización. Esta comprobación previa comprueba que todos los esquemas a los que se hace referencia en los procedimientos almacenados de la instancia de base de datos siguen existiendo. Para poder continuar con la actualización, elimine estos procedimientos almacenados.  
**Ejemplo de salida:**  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "dropped_db.get_version",
        "description": "is orphaned"
      }
  ]
},
```
La comprobación previa indica que el procedimiento almacenado `get_version` de la base de datos `dropped_db` está huérfano.  
Para eliminar este procedimiento, puede volver a crear el esquema que falta.  

```
mysql> create database dropped_db;
Query OK, 1 row affected (0.01 sec)
```
Una vez que se haya vuelto a crear el esquema, puede eliminar el procedimiento para permitir que continúe la actualización.  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlSchemaCheck**  
**Nivel de comprobación previa: error**  
**Los nombres de las tablas del esquema de `mysql` entran en conflicto con las nuevas tablas de MySQL 8.0**  
El nuevo [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) introducido en MySQL 8.0 almacena todos los metadatos en un conjunto de tablas internas de InnoDB en el esquema de `mysql`. Durante la actualización, las nuevas [tablas del diccionario de datos interno](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-schema.html) se crean en el esquema de `mysql`. Para evitar colisiones de nombres, que podrían provocar errores en la actualización, la comprobación previa examina todos los nombres de las tablas del esquema de `mysql` para garantizar que ninguno de los nuevos nombres de tabla esté ya en uso. Si lo están, aparece un error y no se permite continuar con la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "mysqlSchema",
  "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.",
  "status": "OK",
  "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.tablespaces",
        "description": "Table name used in mysql schema.",
        "dbObjectType": "Table"
      }
  ]
}
```
Se devuelve un error porque hay una tabla con el nombre `tablespaces` en el esquema de `mysql`. Este es uno de los nuevos nombres de tablas de diccionarios de datos internos de MySQL 8.0. Debe cambiar el nombre de dichas tablas o eliminarlas antes de realizar la actualización mediante el comando `RENAME TABLE`.

**nonNativePartitioningCheck**  
**Nivel de comprobación previa: error**  
**Tablas particionadas que utilizan motores con particionamiento no nativo**  
Según la [documentación de MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), actualmente hay dos motores de almacenamiento que ofrecen soporte de particionamiento nativo: [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) y [NDB](https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html). De estos, solo InnoDB se admite en la versión 3 de Aurora MySQL, compatible con MySQL 8.0. Se producirá un error al intentar crear tablas particionadas en MySQL 8.0 con cualquier otro motor de almacenamiento. Esta comprobación previa busca tablas en el clúster de la base de datos que utilicen particiones no nativas. Si se devuelve alguna, debe eliminar la partición o convertir el motor de almacenamiento a InnoDB.  
**Ejemplo de salida:**  

```
{
  "id": "nonNativePartitioning",
  "title": "Partitioned tables using engines with non native partitioning",
  "status": "OK",
  "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partMyisamTable",
         "description": "MyISAM engine does not support native partitioning",
         "dbObjectType": "Table"
      }
  ]
}
```
En este caso, una tabla MyISAM utiliza la partición, lo que requiere una acción antes de que la actualización pueda continuar.

**oldTemporalCheck**  
**Nivel de comprobación previa: error**  
**Uso de un tipo temporal antiguo**  
Los “Tipos temporales antiguos” hacen referencia a las columnas de tipo temporal (como `TIMESTAMP` y `DATETIME`) creadas en las versiones 5.5 y anteriores de MySQL. En MySQL 8.0, se ha eliminado la compatibilidad con estos tipos de datos temporales antiguos, lo que significa que las actualizaciones locales de MySQL 5.7 a 8.0 no son posibles si la base de datos los incluye. Para solucionar este problema, debe [volver a crear](https://dev.mysql.com/doc/refman/5.7/en/rebuilding-tables.html) todas las tablas que incluyan estos tipos de fechas temporales antiguos antes de continuar con la actualización.  
Para obtener más información sobre la obsolescencia de los tipos de datos temporales antiguos en MySQL 5.7, consulte este [blog](https://dev.mysql.com/blog-archive/how-to-easily-identify-tables-with-temporal-types-in-old-format/). Para obtener más información sobre la eliminación de los tipos de datos temporales antiguos en MySQL 8.0, consulte este [blog](https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/).  
Antes de volver a crear los espacios de tablas, consulte la sección [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) en la documentación de MySQL para conocer los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.
**Ejemplo de salida:**  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command",
  "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.55_temporal_table.timestamp_column",
        "description": "timestamp /* 5.5 binary format */",
        "dbObjectType": "Column"
      }
  ]
},
```
Se informa de un error en la columna `timestamp_column` de la tabla `test.55_temporal_table`, ya que utiliza un antiguo formato de almacenamiento en disco temporal que ya no se admite.  
Para resolver este problema y permitir que se continúe con la actualización, vuelva a crear la tabla para convertir el antiguo formato de almacenamiento en disco temporal al nuevo introducido en MySQL 5.6. Para obtener más información y conocer los requisitos previos antes de hacerlo, consulte la sección [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) en la documentación de MySQL.  
Al ejecutar el siguiente comando para volver a crear las tablas mencionadas en esta comprobación previa, se convierten los tipos temporales antiguos al formato más nuevo con una precisión de fracción de segundo.  

```
ALTER TABLE ... ENGINE=InnoDB;
```
Para obtener más información sobre cómo volver a crear tablas, consulte [ALTER TABLE statement](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) en la documentación de MySQL.  
Tras volver a crear la tabla en cuestión y reiniciar la actualización, se aprueba la comprobación de compatibilidad, lo que permite continuar con la actualización.  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "detectedProblems": []
}
```

**partitionedTablesInSharedTablespaceCheck**  
**Nivel de comprobación previa: error**  
**Uso de tablas particionadas en espacios de tablas compartidos**  
A partir de la [versión 8.0.13 de MySQL](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html), se elimina la compatibilidad con la colocación de particiones de tablas en espacios de tabla compartidos. Antes de realizar la actualización, mueva dichas tablas de los espacios de tabla compartidos a los espacios de tabla file-per-table.  
Antes de volver a crear los espacios de tablas, consulte la sección [Partitioning operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) en la documentación de MySQL para comprender los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.
**Ejemplo de salida:**  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partInnoDBTable",
        "description": "Partition p1 is in shared tablespace innodb",
        "dbObjectType": "Table"
      }
  ]
}
```
La comprobación previa no se realiza correctamente porque la partición `p1` de la tabla `test.partInnoDBTable` se encuentra en el espacio de tablas del sistema.  
Para resolver este problema, vuelva a crear la tabla `test.partInnodbTable` y coloque la partición problemática `p1` en un espacio de tablas file-per-table.  

```
mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1
    ->   INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Después de hacerlo, se aprueba la comprobación previa.  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "detectedProblems": []
}
```

**removedFunctionsCheck**  
**Nivel de comprobación previa: error**  
**Uso de funciones que se eliminaron de la última versión de MySQL**  
En MySQL 8.0, se han eliminado varias funciones integradas. Esta comprobación previa examina la base de datos en busca de objetos que puedan utilizar estas funciones. En el caso de detectarse, se devuelve un error. Debe resolver los problemas antes de volver a intentar la actualización.  
La mayoría de las funciones eliminadas son [funciones espaciales](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html), que se han sustituido por funciones `ST_*` equivalentes. En estos casos, modifique los objetos de la base de datos para utilizar la nueva nomenclatura del procedimiento. Para obtener más información, consulte la sección sobre [características eliminadas en MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals), en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.GetLocationsInPolygon",
        "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)",
        "dbObjectType": "Routine"
      },
      {
        "level": "Error",
        "dbObject": "test.InsertLocation",
        "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)",
        "dbObjectType": "Routine"
      }
  ]
},
```
La comprobación previa indica que el procedimiento almacenado `test.GetLocationsInPolygon` utiliza dos funciones eliminadas: [POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_polyfromtext) y [POINTFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_st-mpointfromtext). También sugiere que utilice las nuevas funciones [ST\$1POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-polyfromtext) y [ST\$1POINTFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-mpointfromtext) como sustitutas. Tras volver a crear el procedimiento con las sugerencias, la comprobación previa se completará correctamente.  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "detectedProblems": []
},
```
Aunque en la mayoría de los casos las funciones obsoletas se sustituyen directamente, asegúrese de probar la aplicación y revisar la documentación para comprobar si se ha producido algún cambio de comportamiento como consecuencia del cambio.

**routineSyntaxCheck**  
**Nivel de comprobación previa: error**  
**Comprobación de sintaxis de MySQL para objetos de tipo rutinario**  
MySQL 8.0 ha introducido [palabras clave reservadas](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) que no estaban reservadas anteriormente. El comprobador previo de actualización evalúa el uso de palabras clave reservadas en los nombres de los objetos de la base de datos, así como en sus definiciones y cuerpo. Si detecta que se utilizan palabras clave reservadas en los objetos de la base de datos, como procedimientos almacenados, funciones, eventos y desencadenadores, la actualización no se realizará correctamente y se publicará un error en el archivo `upgrade-prechecks.log`. Para resolver el problema, debe actualizar estas definiciones de objetos y escribir dichas referencias entre comillas simples (') antes de realizar la actualización. Para obtener más información sobre cómo aplicar caracteres de escape a las palabras reservadas en MySQL, consulte la sección [String literals](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html) en la documentación de MySQL.  
También puede cambiar el nombre por uno diferente, lo que puede requerir cambios en la aplicación.  
**Ejemplo de salida:**  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
         "level": "Error",
         "dbObject": "test.select_res_word",
         "description": "at line 2,18: unexpected token 'except'",
         "dbObjectType": "Routine"
      }
  ]
}
```
Para resolver este problema, compruebe la definición de rutina.  

```
SHOW CREATE PROCEDURE test.select_res_word\G

*************************** 1. row ***************************
           Procedure: select_res_word
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE PROCEDURE 'select_res_word'()
BEGIN
    SELECT * FROM except;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
El procedimiento utiliza una tabla denominada `except`, que es una nueva palabra clave en MySQL 8.0. Aplique caracteres de escape al literal de cadena para volver a crear el procedimiento.  

```
> drop procedure if exists select_res_word;
Query OK, 0 rows affected (0.00 sec)

> DELIMITER $$
 > CREATE PROCEDURE select_res_word()
    -> BEGIN
    ->     SELECT * FROM 'except';
    -> END$$
Query OK, 0 rows affected (0.00 sec)

 > DELIMITER ;
```
Ahora se aprueba la comprobación previa.  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "detectedProblems": []
}
```

**schemaInconsistencyCheck**  
**Nivel de comprobación previa: error**  
**Incoherencias en el esquema provocadas por la eliminación o la corrupción de un archivo**  
Tal y como se ha descrito anteriormente, MySQL 8.0 ha introducido el [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), que almacena todos los metadatos en un conjunto de tablas internas de InnoDB en el esquema de `mysql`. Esta nueva arquitectura proporciona una forma transaccional y compatible con [ACID](https://en.wikipedia.org/wiki/ACID) para administrar los metadatos de las bases de datos, lo que resuelve el problema de DDL atómico que planteaba el antiguo enfoque basado en archivos. En las versiones anteriores a MySQL 8.0, era posible que los objetos del esquema quedaran huérfanos si una operación de DDL se interrumpía de forma inesperada. La migración de los metadatos basados en archivos a las nuevas tablas del Atomic Data Dictionary durante la actualización garantiza que no haya objetos de esquema huérfanos en la instancia de la base de datos. Si se encuentra algún objeto huérfano, se producirá un error en la actualización.  
Con el fin de ayudar a detectar estos objetos huérfanos antes de iniciar la actualización, se realiza una comprobación previa `schemaInconsistencyCheck` para garantizar que todos los objetos de metadatos del diccionario de datos estén sincronizados. Si se detecta algún objeto de metadatos huérfano, no se continuará con la actualización. Para continuar con la actualización, elimine estos objetos de metadatos huérfanos.  
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "schemaInconsistencyCheck",
  "title": "Schema inconsistencies resulting from file removal or corruption",
  "status": "OK",
  "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.schemaInconsistencyCheck_failure",
        "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table"
      }
  ]
}
```
La comprobación previa indica que la tabla `test.schemaInconsistencyCheck_failure` tiene metadatos incoherentes. En este caso, la tabla existe en los metadatos del motor de almacenamiento de InnoDB (`information_schema.INNODB_SYS_TABLES`), pero no en los metadatos de MySQL (`information_schema.TABLES`).

### Comprobaciones previas de Aurora MySQL que informan de errores
<a name="precheck-descriptions-errors.aurora"></a>

Las siguientes comprobaciones previas son específicas de Aurora MySQL:
+ [auroraCheckDDLRecovery](#auroraCheckDDLRecovery)
+ [auroraCheckRdsUpgradePrechecksTable](#auroraCheckRdsUpgradePrechecksTable)
+ [auroraFODUpgradeCheck](#auroraFODUpgradeCheck)
+ [auroraGetDanglingFulltextIndex](#auroraGetDanglingFulltextIndex)
+ [auroraUpgradeCheckForDatafilePathInconsistency](#auroraUpgradeCheckForDatafilePathInconsistency)
+ [auroraUpgradeCheckForFtsSpaceIdZero](#auroraUpgradeCheckForFtsSpaceIdZero)
+ [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions)
+ [auroraUpgradeCheckForInstanceLimit](#auroraUpgradeCheckForInstanceLimit)
+ [auroraUpgradeCheckForInternalUsers](#auroraUpgradeCheckForInternalUsers)
+ [auroraUpgradeCheckForMasterUser](#auroraUpgradeCheckForMasterUser)
+ [auroraUpgradeCheckForPrefixIndexOnGeometryColumns](#auroraUpgradeCheckForPrefixIndexOnGeometryColumns)
+ [auroraUpgradeCheckForSpecialCharactersInProcedures](#auroraUpgradeCheckForSpecialCharactersInProcedures)
+ [auroraUpgradeCheckForSysSchemaObjectTypeMismatch](#auroraUpgradeCheckForSysSchemaObjectTypeMismatch)
+ [auroraUpgradeCheckForViewColumnNameLength](#auroraUpgradeCheckForViewColumnNameLength)
+ [auroraUpgradeCheckIndexLengthLimitOnTinyColumns](#auroraUpgradeCheckIndexLengthLimitOnTinyColumns)
+ [auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable](#auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable)
+ [auroraUpgradeCheckForInvalidUtf8mb3ColumnComments](#auroraUpgradeCheckForInvalidUtf8mb3ColumnComments)

**auroraCheckDDLRecovery**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay artefactos relacionados con la característica de recuperación de Aurora DDL**  
Como parte de la implementación de recuperación del lenguaje de definición de datos (DDL) en Aurora MySQL, los metadatos de las instrucciones de DDL en curso se mantienen en las tablas `ddl_log_md_table` y `ddl_log_table` del esquema de `mysql`. La implementación de recuperación de DDL de Aurora no es compatible con la versión 3 y versiones posteriores, ya que la funcionalidad forma parte de la nueva implementación de [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) en MySQL 8.0. Si se está ejecutando alguna instrucción de DDL durante las comprobaciones de compatibilidad, es posible que se produzca un error en esta comprobación previa. Le recomendamos que intente actualizar cuando no haya en ejecución ninguna instrucción de DDL.  
Si se produce un error en esta comprobación previa sin que se estén ejecutando instrucciones de DDL, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.  
Si se está ejecutando alguna instrucción de DDL, el resultado de la comprobación previa mostrará el siguiente mensaje:  

```
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”
```
**Ejemplo de salida:**  

```
{
  "id": "auroraCheckDDLRecovery",
  "title": "Check for artifacts related to Aurora DDL recovery feature",
  "status": "OK",
  "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_md_table",
        "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_table",
        "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "information_schema.processlist",
        "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading."
      }
  ]
}
```
La comprobación previa ha devuelto un error debido a que una DDL en curso se estaba ejecutando simultáneamente con las comprobaciones de compatibilidad. Le recomendamos que intente de nuevo realizar la actualización sin que se esté ejecutando ninguna DDL.

**auroraCheckRdsUpgradePrechecksTable**  
**Nivel de comprobación previa: error**  
**Comprobación de la existencia de la tabla `mysql.rds_upgrade_prechecks`**  
Se trata de una comprobación previa exclusivamente interna llevada a cabo por el servicio de RDS. Los errores se gestionarán automáticamente en la actualización y pueden omitirse de forma segura.  
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.  

```
{
  "id": "auroraCheckRdsUpgradePrechecksTable",
  "title": "Check existence of mysql.rds_upgrade_prechecks table",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraFODUpgradeCheck**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay artefactos relacionados con la característica DDL rápido de Aurora**  
La optimización de [DDL rápido](AuroraMySQL.Managing.FastDDL.md) se ha introducido en el [modo lab](AuroraMySQL.Updates.LabMode.md) en la versión 2 de Aurora MySQL con el fin de mejorar la eficiencia de algunas operaciones de DDL. En la versión 3 de Aurora MySQL, se ha eliminado el modo lab y la implementación de DDL rápido se ha sustituido por la característica de MySQL 8.0 denominada [DDL instantáneo](https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html).  
Antes de actualizar a la versión 3 de Aurora MySQL, deberá volverse a crear cualquier tabla que utilice DDL rápido en modo laboratorio. Para ello, es necesario ejecutar el comando `OPTIMIZE TABLE` o `ALTER TABLE ... ENGINE=InnoDB` para garantizar la compatibilidad con la versión 3 de Aurora MySQL.  
Esta comprobación previa devuelve una lista de estas tablas. Una vez se han vuelto a crear las tablas devueltas, puede volver a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test",
        "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again."
      }
  ]
}
```
La comprobación previa indica que la tabla `test.test` tiene operaciones de DDL rápido pendientes.  
Para poder continuar con la actualización, puede volver a crear la tabla y, a continuación, volver a intentar la actualización.  
Antes de volver a crear los espacios de tablas, consulte la sección [Online DDL operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) en la documentación de MySQL para conocer los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.

```
mysql> optimize table test.test;
+-----------+----------+----------+-------------------------------------------------------------------+
| Table     | Op       | Msg_type | Msg_text                                                          |
+-----------+----------+----------+-------------------------------------------------------------------+
| test.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.test | optimize | status   | OK                                                                |
+-----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.04 sec)
```
Después de volver a crear la tabla, la comprobación previa se realiza correctamente.  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraGetDanglingFulltextIndex**  
**Nivel de comprobación previa: error**  
**Tablas con referencia de índice `FULLTEXT` colgante**  
En las versiones anteriores a MySQL 5.6.26, era posible que, tras eliminar un índice de búsqueda de texto completo, las columnas ocultas `FTS_DOC_ID` y `FTS_DOC_ID_INDEX` quedaran huérfanas. Para obtener más información, consulte [Bug \$176012](https://bugs.mysql.com/bug.php?id=76012).  
Si ha creado tablas en versiones anteriores de MySQL en las que esto haya ocurrido, puede provocar un error en las actualizaciones a la versión 3 de Aurora MySQL. Esta comprobación previa verifica que no existan índices de texto completo huérfanos o “colgantes” en el clúster de base de datos antes de actualizar a MySQL 8.0. Si se produce un error en esta comprobación previa, vuelva a crear todas las tablas que incluyan esos índices de texto completo colgantes.  
**Ejemplo de salida:**  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_fts_index",
        "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
      }
  ]
},
```
La comprobación previa indica que hay un error en la tabla `test.table_with_fts_index` porque incluye un índice de texto completo colgante. Para permitir que se continúe con la actualización, vuelva a crear la tabla para eliminar las tablas auxiliares del índice de texto completo. Utilice `OPTIMIZE TABLE test.table_with_fts_index` o `ALTER TABLE test.table_with_fts_index, ENGINE=INNODB`.  
Después de volver a crear la tabla, se aprueba la comprobación previa.  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForDatafilePathInconsistency**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay incoherencias relacionadas con la ruta de archivo `ibd`**  
Esta comprobación previa se aplica únicamente a la versión 3.03.0 y anteriores de Aurora MySQL. Si detecta un error con esta comprobación previa, actualice a la versión 3.04 o versiones posteriores de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForFtsSpaceIdZero**  
**Nivel de comprobación previa: error**  
**Comprobación del índice de texto completo con el ID de espacio como cero**  
En MySQL, al añadir un [índice de texto completo](https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html) a una tabla de InnoDB, se crean varios espacios de tabla de índices auxiliares. Debido a un [error](https://bugs.mysql.com/bug.php?id=72132) en las versiones anteriores de MySQL, que se ha corregido en la versión 5.6.20, era posible que estas tablas de índices auxiliares se crearan en el [espacio de tablas del sistema](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace), en lugar de hacerlo en su propio espacio de tablas de InnoDB.  
Si existe alguno de estos espacios de tablas auxiliares, se producirá un error en la actualización. Vuelva a crear los índices de texto completo mencionados en el error de comprobación previa y, a continuación, vuelva a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForFtsSpaceIdZero",
  "title": "Check for fulltext index with space id as zero",
  "status": "OK",
  "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.fts_space_zero_check",
        "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade."
      }
  ]
},
```
La comprobación previa indica que hay un error en la tabla `test.fts_space_zero_check`, ya que tiene tablas auxiliares de búsqueda de texto completo (FTS) en el espacio de tablas del sistema.  
Después de eliminar y volver a crear los índices de FTS asociados a esta tabla, la comprobación previa se realizará correctamente.  
Antes de volver a crear los espacios de tablas, consulte la sección [Partitioning operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) en la documentación de MySQL para comprender los efectos del bloqueo y el movimiento de datos en las transacciones en primer plano.

```
{
 "id": "auroraUpgradeCheckForFtsSpaceIdZero",
 "title": "Check for fulltext index with space id as zero",
 "status": "OK",
 "detectedProblems": []
}
```

**auroraUpgradeCheckForIncompleteXATransactions**  
**Nivel de comprobación previa: error**  
**Comprobación de si las transacciones de XA están preparadas**  
Mientras se ejecuta el proceso de actualización de la versión principal, es esencial que la instancia de base de datos de la versión 2 de Aurora MySQL se [cierre por completo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Esto garantiza que todas las transacciones se confirmen o se reviertan y que InnoDB haya purgado todos los registros de deshacer. Como la reversión de las transacciones es necesaria, si la base de datos tiene alguna [transacción de XA](https://dev.mysql.com/doc/refman/5.7/en/xa.html) preparada, puede impedir que se cierre por completo. Por este motivo, si se detecta alguna transacción de XA preparada, no se podrá continuar con la actualización hasta que se tomen medidas para confirmarla o revertirla.  
Para obtener más información sobre cómo detectar transacciones de XA preparadas con `XA RECOVER`, consulte la sección [XA Transaction SQL Statements](https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html) en la documentación de MySQL. Para obtener más información sobre los estados de las transacciones de XA, consulte la sección [XA Transaction States](https://dev.mysql.com/doc/refman/5.7/en/xa-states.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions."
      }
  ]
}
```
Esta comprobación previa indica que hay un error porque hay transacciones preparadas que deben confirmarse o revertirse.  
Tras iniciar sesión en la base de datos, puede consultar la tabla [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) y el resultado `XA RECOVER` para obtener más información.  
Antes de confirmar o revertir una transacción, le recomendamos que revise la [documentación de MySQL](https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html) y los requisitos de la aplicación.

```
mysql> select trx_started,
    trx_mysql_thread_id,
    trx_id,trx_state,
    trx_operation_state,
    trx_rows_modified,
    trx_rows_locked 
from 
    information_schema.innodb_trx;
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| trx_started         | trx_mysql_thread_id | trx_id  | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| 2024-08-12 01:09:39 |                   0 | 2849470 | RUNNING   | NULL                |                 1 |               0 |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
1 row in set (0.00 sec)

mysql> xa recover;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        1 |            6 |            0 | xatest |
+----------+--------------+--------------+--------+
1 row in set (0.00 sec)
```
En este caso, revertimos la transacción preparada.  

```
mysql> XA ROLLBACK 'xatest';
Query OK, 0 rows affected (0.00 sec)
v
mysql> xa recover;
Empty set (0.00 sec)
```
Una vez que se ha revertido la transacción de XA, la comprobación previa se realizará correctamente.  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInstanceLimit**  
**Nivel de comprobación previa: error**  
**Comprobación de si la clase de instancia actual admite la actualización**  
Por el momento, no se puede ejecutar una actualización local desde la versión 2.12.0 o 2.12.1 de Aurora MySQL, donde la [clase de instancia de base de datos](Concepts.DBInstanceClass.md) de escritor sea db.r6i.32xlarge. En este caso, la comprobación previa devuelve un error. Para poder continuar con la actualización, puede cambiar la clase de la instancia de base de datos a db.r6i.24xlarge o a una inferior. También puede actualizar a la versión 2.12.2 de Aurora MySQL, o una versión posterior, donde db.r6i.32xlarge admite la actualización local a la versión 3 de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForInstanceLimit",
  "title": "Checks if upgrade is supported on the current instance class",
  "status": "OK",
  "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher."
      }
  ]
},
```
La comprobación previa devuelve un error porque la instancia de base de datos de escritor utiliza la clase de instancia db.r6i.32xlarge y se ejecuta en la versión 2.12.1 de Aurora MySQL.

**auroraUpgradeCheckForInternalUsers**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay usuarios internos de la versión 8.0**  
Esta comprobación previa se aplica únicamente a la versión 3.03.0 y anteriores de Aurora MySQL. Si detecta un error con esta comprobación previa, actualice a la versión 3.04 o versiones posteriores de Aurora MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForInternalUsers",
  "title": "Check for 8.0 internal users.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForMasterUser**  
**Nivel de comprobación previa: error**  
**Comprobación de si existe el usuario maestro de RDS**  
MySQL 8 ha añadido un nuevo modelo de privilegios con soporte de [rol](https://dev.mysql.com/doc/refman/8.0/en/roles.html) y [privilegios dinámicos](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#static-dynamic-privileges) para hacer que la administración de privilegios sea más fácil y detallada. Como parte de este cambio, Aurora MySQL ha introducido el nuevo `rds_superuser_role`, que se otorga automáticamente al usuario maestro de la base de datos al actualizar de la versión 2 a la versión 3 de Aurora MySQL.  
Para obtener más información sobre los roles y privilegios asignados al usuario maestro en Aurora MySQL, consulte [Privilegios de la cuenta de usuario maestro](UsingWithRDS.MasterAccounts.md). Para obtener más información sobre el modelo de privilegios basado en roles de la versión 3 de Aurora MySQL, consulte [Modelo de privilegios basado en roles](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model).  
Esta comprobación previa verifica que el usuario maestro existe en la base de datos. Si el usuario maestro no existe, se producirá un error en la comprobación previa. Para poder continuar con la actualización, vuelva a crear el usuario maestro. Para ello, restablezca la contraseña del usuario maestro o cree manualmente el usuario. A continuación, vuelva a intentar la actualización. Para obtener más información sobre cómo restablecer la contraseña del usuario maestro, consulte [Cambio de la contraseña del usuario maestro de la base de datos](Aurora.Modifying.md#Aurora.Modifying.Password).  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  "title": "Check if master user exists",
  "status": "OK",
  "description": "Throws error if master user has been dropped!",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'"
      }
  ]
}
```
Tras restablecer la contraseña del usuario maestro, se aprobará la comprobación previa y podrá volver a intentar la actualización.  
En el siguiente ejemplo se utiliza la AWS CLI para restablecer la contraseña. Los cambios de contraseña se aplican inmediatamente.  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-db-cluster \
    --master-user-password my-new-password
```
A continuación, la comprobación previa se realiza correctamente.  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  title": "Check if master user exists",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForPrefixIndexOnGeometryColumns**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay columnas geométricas en los índices de prefijos**  
A partir de la [versión 8.0.12 de MySQL](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-spatial-support), ya no se puede crear un índice [con prefijo](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) en una columna con el tipo de datos [GEOMETRY](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html). Para obtener más información, consulte [WL\$111808](https://dev.mysql.com/worklog/task/?id=11808).  
Si existe alguno de estos índices, se producirá un error en la actualización. Para resolver el problema, elimine los índices con prefijo de `GEOMETRY` en las tablas mencionadas en el error de la comprobación previa.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.geom_index_prefix",
        "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;"
      }
  ]
}
```
La comprobación previa indica que hay un error porque la tabla `test.geom_index_prefix` incluye un índice con un prefijo en una columna `GEOMETRY`.  
Tras eliminar este índice, la comprobación previa se realizará correctamente.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForSpecialCharactersInProcedures**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay incoherencias relacionadas con los caracteres especiales en los procedimientos almacenados**  
En las versiones anteriores a MySQL 8.0, los nombres de bases de datos, los nombres de tablas y otros objetos correspondían a los archivos del directorio de datos, como, por ejemplo, los metadatos basados en archivos. Como parte de la actualización a MySQL 8.0, todos los objetos de la base de datos se migran a las nuevas tablas del diccionario de datos interno que se almacenan en el esquema de `mysql` para admitir el [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) recientemente implementado. Como parte de la migración de los procedimientos almacenados, la definición y el cuerpo del procedimiento se validan a medida que se van incorporando al nuevo diccionario de datos.  
En las versiones anteriores a MySQL 8, era posible, en algunos casos, crear rutinas almacenadas o insertar directamente en la tabla `mysql.proc` procedimientos que incluían caracteres especiales. Por ejemplo, se podía crear un procedimiento almacenado que incluyera un comentario con el [carácter de espacio no divisible](https://en.wikipedia.org/wiki/Non-breaking_space) y no compatible `\xa0`. Si se detecta alguno de estos procedimientos, se producirá un error en la actualización.  
Esta comprobación previa valida que los cuerpos y las definiciones de los procedimientos almacenados no incluyan dichos caracteres. Para poder continuar con la actualización, vuelva a crear estos procedimientos almacenados sin ningún carácter oculto ni especial.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "description": "Following procedure(s) has special characters inconsistency.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "information_schema.routines",
        "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade."
      }
  ]
}
```
La comprobación previa indica que el clúster de base de datos incluye un procedimiento denominado `get_version_proc` en la base de datos de `test` que incluye caracteres especiales en el cuerpo del procedimiento.  
Tras eliminar y volver a crear el procedimiento almacenado, la comprobación previa se realiza correctamente, lo que permite continuar con la actualización.  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForSysSchemaObjectTypeMismatch**  
**Nivel de comprobación previa: error**  
**Comprobación de si el tipo de objeto no coincide con el esquema `sys`**  
El [esquema sys](https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html) es un conjunto de objetos y vistas en una base de datos de MySQL que ayuda a los usuarios a solucionar problemas, optimizar y supervisar las instancias de base de datos. Al realizar una actualización de la versión principal de la versión 2 a la versión 3 de Aurora MySQL, las vistas del esquema `sys` se vuelven a crear y actualizar a las nuevas definiciones de la versión 3 de Aurora MySQL.  
Como parte de la actualización, si algún objeto del esquema `sys` se define mediante motores de almacenamiento (`sys_config/BASE TABLE` en [INFORMATION\$1SCHEMA.TABLES](https://dev.mysql.com/doc/refman/5.7/en/information-schema-tables-table.html)) y no mediante vistas, se producirá un error en la actualización. Estas tablas pueden encontrarse en la tabla `information_schema.tables`. Este no es el comportamiento esperado, pero en algunos casos puede ocurrir debido a un error del usuario.  
Esta comprobación previa valida todos los objetos del esquema `sys` para garantizar que utilizan las definiciones de tabla correctas y que las vistas no se definen erróneamente como tablas de InnoDB o MyISAM. Para resolver el problema, corrija manualmente los objetos devueltos cambiándoles el nombre o eliminándolos. A continuación, vuelva a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "description": "Database contains objects with type mismatch for sys schema.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "sys.waits_global_by_latency",
        "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). "
      }
  ]
}
```
La comprobación previa indica que la vista [sys.waits\$1global\$1by\$1latency](https://dev.mysql.com/doc/refman/5.7/en/sys-waits-global-by-latency.html) del esquema `sys` presenta una discrepancia de tipos que impide que se continúe con la actualización.  
Tras iniciar sesión en la instancia de base de datos, puede ver que este objeto se define como una tabla de InnoDB, cuando debería ser una vista.  

```
mysql> show create table sys.waits_global_by_latency\G
*************************** 1. row ***************************
       Table: waits_global_by_latency
Create Table: CREATE TABLE `waits_global_by_latency` (
  `events` varchar(128) DEFAULT NULL,
  `total` bigint(20) unsigned DEFAULT NULL,
  `total_latency` text,
  `avg_latency` text,
  `max_latency` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Para resolver este problema, podemos eliminar y volver a crear la vista con la [definición correcta](https://github.com/mysql/mysql-server/blob/mysql-5.7.44/scripts/sys_schema/views/p_s/waits_global_by_latency.sql) o cambiarle el nombre. Durante el proceso de actualización, se creará automáticamente con la definición de tabla correcta.  

```
mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old;
Query OK, 0 rows affected (0.01 sec)
```
Una vez hecho esto, se aprueba la comprobación previa.  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForViewColumnNameLength**  
**Nivel de comprobación previa: error**  
**Comprobación del límite superior del nombre de columna en la vista**  
La [longitud máxima permitida de un nombre de columna](https://dev.mysql.com/doc/refman/5.7/en/identifier-length.html) en MySQL es de 64 characters. En las versiones anteriores a MySQL 8.0, en algunos casos era posible crear una vista con un nombre de columna de más de 64 caracteres. Si existe alguna de estas vistas en la instancia de la base de datos, se mostrará un error de comprobación previa y no se realizará correctamente la actualización. Para poder continuar con la actualización, debe volver a crear las vistas en cuestión, asegurándose de que la longitud de sus columnas sea inferior a 64 caracteres. A continuación, vuelva a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "description": "Following view(s) has column(s) with length greater than 64.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad",
        "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64."
      }
  ]
}
```
La comprobación previa indica que la vista `test.colname_view_test` incluye una columna `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` que supera la longitud máxima permitida de 64 caracteres.  
Si observamos la definición de la vista, podemos ver la columna problemática.  

```
mysql> desc `test`.`colname_view_test`;
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| Field                                                            | Type        | Null | Key | Default | Extra |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| col1                                                             | varchar(20) | YES  |     | NULL    |       |
| col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11)     | YES  |     | NULL    |       |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Para poder continuar con la actualización, vuelva a crear la vista y asegúrese de que la longitud de la columna no supere los 64 caracteres.  

```
mysql> drop view `test`.`colname_view_test`;
Query OK, 0 rows affected (0.01 sec)

mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test;
Query OK, 0 rows affected (0.01 sec)

mysql> desc `test`.`colname_view_test`;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| col1       | varchar(20) | YES  |     | NULL    |       |
| col2_nopad | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Una vez hecho esto, la comprobación previa se realizará correctamente.  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckIndexLengthLimitOnTinyColumns**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay tablas con índices definidos con una longitud de prefijo superior a 255 bytes en columnas pequeñas**  
Al crear un índice en una columna con un [tipo de datos binario](https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html) en MySQL, debe añadir una longitud de [prefijo](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) en la definición del índice. En las versiones anteriores a MySQL 8.0, en algunos casos era posible especificar una longitud de prefijo superior al tamaño máximo permitido para estos tipos de datos. Un ejemplo son las columnas `TINYTEXT` y `TINYBLOB`, en las que el tamaño máximo de datos permitido es de 255 bytes, pero se permitían prefijos de índice mayores. Para obtener más información, consulte la sección [InnoDB limits](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) en la documentación de MySQL.  
Si esta comprobación previa no se realiza correctamente, elimine el índice problemático o reduzca la longitud del prefijo de las columnas `TINYTEXT` y `TINYBLOB` del índice a menos de 255 bytes. A continuación, vuelva a intentar la actualización.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.tintxt_prefixed_index.col1",
        "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63."
      }
  ]
}
```
La comprobación previa indica que hay un error en la tabla `test.tintxt_prefixed_index`, ya que tiene un índice `PRIMARY` con un prefijo superior a 255 bytes en una columna TINYTEXT o TINYBLOB.  
Si observamos la definición de esta tabla, podemos ver que la clave principal tiene el prefijo 65 en la columna `TINYTEXT` `col1`. Dado que la tabla se define mediante el conjunto de caracteres `utf8mb4`, que almacena 4 bytes por carácter, el prefijo supera el límite de 255 bytes.  

```
mysql> show create table `test`.`tintxt_prefixed_index`\G
*************************** 1. row ***************************
       Table: tintxt_prefixed_index
Create Table: CREATE TABLE `tintxt_prefixed_index` (
  `col1` tinytext NOT NULL,
  `col2` tinytext,
  `col_id` tinytext,
  PRIMARY KEY (`col1`(65))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)
```
Si se modifica el prefijo del índice a 63 mientras se utiliza el conjunto de caracteres `utf8mb4`, se podrá continuar con la actualización.  

```
mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD  PRIMARY KEY (`col1`(63));
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Una vez hecho esto, la comprobación previa se realizará correctamente.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable**  
**Nivel de comprobación previa: error**  
**Comprobación de la incoherencia de los metadatos de InnoDB que faltan en la tabla `mysql.host`**  
Se trata de una comprobación previa exclusivamente interna llevada a cabo por el servicio de RDS. Los errores se gestionarán automáticamente en la actualización y pueden omitirse de forma segura.  
Si detecta algún error con esta comprobación previa, abra un caso con [AWS Support](https://aws.amazon.com/support) para solicitar que se resuelva la incoherencia de los metadatos. También puede volver a intentar la actualización. Para ello, debe realizar un volcado lógico y, a continuación, restaurar a un nuevo clúster de base de datos que ejecute la versión 3 de Aurora MySQL.

**auroraUpgradeCheckForInvalidUtf8mb3ColumnComments**  
**Nivel de comprobación previa: error**  
**Comprobación de si hay comentarios de columnas utf8mb3 no válidos**  
Esta comprobación previa identifica las tablas que contienen comentarios de columnas con una codificación de caracteres utf8mb3 no válida. En MySQL 8.0, se aplica una validación más estricta a la codificación de caracteres en los metadatos, incluidos los comentarios de las columnas. Si algún comentario de columna contiene caracteres que no son válidos en el conjunto de caracteres utf8mb3, la actualización producirá un error.  
La causa más común de este problema es la presencia de caracteres que no pertenecen a BMP (Plano Básico Multilingüe) en los comentarios de las columnas. Los caracteres que no pertenecen al BMP requieren codificación UTF-8 de 4 bytes (utf8mb4), pero utf8mb3 solo admite secuencias de 3 bytes, que no pueden representar estos caracteres.  
Para resolver este problema, debe modificar los comentarios de las columnas para eliminar o reemplazar los caracteres que no pertenezcan al BMP antes de intentar la actualización. Puede usar la instrucción `ALTER TABLE` para actualizar los comentarios de las columnas.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.t2",
        "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
      }
  ]
}
```
La comprobación previa indica que la tabla `test.t2` contiene caracteres utf8mb3 no válidos en uno o más comentarios de columna, específicamente debido a la presencia de caracteres que no son del BMP.  
Para resolver este problema, puede identificar las columnas problemáticas y actualizar sus comentarios. Primero, examine la estructura de la tabla para identificar las columnas con comentarios:  

```
mysql> SHOW CREATE TABLE test.t2\G
```
Una vez que haya identificado las columnas con comentarios problemáticos, actualícelas mediante la instrucción `ALTER TABLE`. Por ejemplo:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';
```
Alternativamente, puede eliminar el comentario por completo:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';
```
Tras actualizar todos los comentarios problemáticos de las columnas, se aprobará la comprobación previa y la actualización podrá continuar:  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "detectedProblems": []
}
```
Antes de modificar los comentarios de las columnas, asegúrese de que cualquier código de aplicación o documentación que se base en estos comentarios se actualice en consecuencia. Considere la posibilidad de migrar al conjunto de caracteres utf8mb4 para mejorar la compatibilidad con Unicode si la aplicación requiere caracteres que no sean del BMP.

## Advertencias
<a name="precheck-descriptions-warnings"></a>

Las siguientes comprobaciones previas generan advertencias cuando se produce un error en la comprobación previa, pero se puede continuar con la actualización.

**Topics**
+ [Comprobaciones previas de MySQL que informan de advertencias](#precheck-descriptions-warnings.mysql)
+ [Comprobaciones previas de Aurora MySQL que informan de advertencias](#precheck-descriptions-warnings.aurora)

### Comprobaciones previas de MySQL que informan de advertencias
<a name="precheck-descriptions-warnings.mysql"></a>

Las siguientes comprobaciones previas proceden de Community MySQL:
+ [defaultAuthenticationPlugin](#defaultAuthenticationPlugin)
+ [maxdbFlagCheck](#maxdbFlagCheck)
+ [mysqlDollarSignNameCheck](#mysqlDollarSignNameCheck)
+ [reservedKeywordsCheck](#reservedKeywordsCheck)
+ [utf8mb3Check](#utf8mb3Check)
+ [zeroDatesCheck](#zeroDatesCheck)

**defaultAuthenticationPlugin**  
**Nivel de comprobación previa: advertencia**  
**Aspectos a tener en cuenta sobre el nuevo complemento de autenticación predeterminado**  
En MySQL 8.0, se ha introducido el complemento de autenticación `caching_sha2_password`, que proporciona un cifrado de contraseñas más seguro y un mejor rendimiento que el complemento obsoleto `mysql_native_password`. En el caso de la versión 3 de Aurora MySQL, el complemento de autenticación predeterminado que se usa para los usuarios de bases de datos es `mysql_native_password`.  
Esta comprobación previa advierte que este complemento se eliminará y se cambiará el predeterminado en una futura versión principal. Plantéese la posibilidad de evaluar la compatibilidad de los clientes y usuarios de la aplicación antes de realizar este cambio.  
Para obtener más información, consulte la sección [caching\$1sha2\$1password Compatibility Issues and Solutions](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "defaultAuthenticationPlugin",
  "title": "New default authentication plugin considerations",
  "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication"
},
```

**maxdbFlagCheck**  
**Nivel de comprobación previa: advertencia**  
**Uso de un indicador de `MAXDB` obsoleto de `sql_mode`**  
En MySQL 8.0, se han [eliminado](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) una serie de opciones de variables del sistema [sql\$1mode](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode); una de ellos era `MAXDB`. Esta comprobación previa examina todas las sesiones actualmente conectadas, junto con las rutinas y los desencadenadores, para garantizar que ninguna de ellas tenga el parámetro `sql_mode` establecido en ninguna combinación que incluya `MAXDB`.  
**Ejemplo de salida:**  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.maxdb_stored_routine",
        "description": "PROCEDURE uses obsolete MAXDB sql_mode",
        "dbObjectType": "Routine"
      }
  ]
}
```
La comprobación previa indica que la rutina `test.maxdb_stored_routine` incluye una opción `sql_mode` no compatible.  
Tras iniciar sesión en la base de datos, podrá ver la definición de rutina en la que `sql_mode` incluye `MAXDB`.  

```
 > SHOW CREATE PROCEDURE test.maxdb_stored_routine\G

*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Para resolver el problema, vuelva a crear el procedimiento después de configurar el parámetro `sql_mode` correcto en el cliente.  
Según la [documentación de MySQL](https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html), MySQL almacena la configuración de `sql_mode` que está en vigor cuando se crea o modifica una rutina. Siempre ejecuta la rutina con esta configuración, independientemente de la configuración de `sql_mode` cuando se inicia la rutina.  
Antes de cambiar `sql_mode`, consulte la sección [Server SQL Modes](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) en la documentación de MySQL. Evalúe detenidamente cualquier posible impacto que esto pueda tener en la aplicación.
Vuelva a crear el procedimiento sin el parámetro `sql_mode` no compatible.  

```
mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql > DROP PROCEDURE test.maxdb_stored_routine\G
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER $$
mysql >
mysql > CREATE PROCEDURE test.maxdb_stored_routine()
    -> SQL SECURITY DEFINER
    -> BEGIN
    ->     SELECT * FROM test;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER ;
mysql > show create procedure test.maxdb_stored_routine\G
*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
La comprobación previa se realiza correctamente.  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "detectedProblems": []
}
```

**mysqlDollarSignNameCheck**  
**Nivel de comprobación previa: advertencia**  
**Comprobación de si el uso de signos de dólar únicos está obsoleto en los nombres de objetos**  
A partir de la [versión 8.0.32 de MySQL](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html#mysqld-8-0-32-deprecation-removal), el uso del signo de dólar (`$`) como primer carácter de un identificador sin comillas está obsoleto. Si tiene algún esquema, tabla, vista, columna o rutina que incluya un `$` como primer carácter, esta comprobación previa mostrará una advertencia. Si bien esta advertencia no impide que se lleve a cabo la actualización, le recomendamos que tome medidas para resolverlo lo antes posible. A partir de [MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html), cualquier identificador de este tipo devolverá un error de sintaxis en lugar de una advertencia.  
**Ejemplo de salida:**  

```
{
  "id": "mysqlDollarSignNameCheck",
  "title": "Check for deprecated usage of single dollar signs in object names",
  "status": "OK",
  "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.$deprecated_syntx",
        "description": " name starts with $ sign."
      }
  ]
},
```
La comprobación previa muestra una advertencia porque la tabla `$deprecated_syntx` del esquema `test` incluye un `$` como primer carácter.

**reservedKeywordsCheck**  
**Nivel de comprobación previa: advertencia**  
**Uso de objetos de base de datos con nombres que entran en conflicto con las nuevas palabras clave reservadas**  
Esta comprobación es similar a la de [routineSyntaxCheck](#routineSyntaxCheck), ya que comprueba el uso de objetos de base de datos cuyos nombres entran en conflicto con las nuevas palabras clave reservadas. Aunque no impiden las actualizaciones, es necesario evaluar detenidamente las advertencias.  
**Ejemplo de salida:**  
Si utilizamos el ejemplo anterior con la tabla denominada `except`, la comprobación previa mostrará una advertencia:  

```
{
  "id": "reservedKeywordsCheck",
  "title": "Usage of db objects with names conflicting with new reserved keywords",
  "status": "OK",
  "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.except",
        "description": "Table name",
        "dbObjectType": "Table"
      }
  ]
}
```
Esta advertencia le permite saber que es posible que haya que revisar algunas consultas de la aplicación. Si las consultas de la aplicación no [aplican correctamente caracteres de escape a los literales de cadena](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html), es posible que se produzcan errores después de actualizar a MySQL 8.0. Revise las aplicaciones para confirmar esto y compruébelas con un clon o una instantánea del clúster de base de datos de Aurora MySQL que se ejecute en la versión 3.  
Ejemplo de una consulta de aplicación a la que no se le hayan aplicado caracteres de escape que no se realizará tras la actualización:  

```
SELECT * FROM escape;
```
Ejemplo de una consulta de aplicación a la que se le hayan aplicado correctamente caracteres de escape que se realizará tras la actualización:  

```
SELECT * FROM 'escape';
```

**utf8mb3Check**  
**Nivel de comprobación previa: advertencia**  
**Uso del conjunto de caracteres `utf8mb3`**  
En MySQL 8.0, el conjunto de caracteres `utf8mb3` está obsoleto y se eliminará en una futura versión principal de MySQL. Esta comprobación previa se implementa para emitir una advertencia si se detecta algún objeto de la base de datos que utilice este conjunto de caracteres. Si bien esto no impedirá que se continúe con la actualización, le recomendamos encarecidamente que piense en migrar las tablas al conjunto de caracteres `utf8mb4`, que es el predeterminado a partir de MySQL 8.0. Para obtener más información sobre [utf8mb3](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) y [utf8mb4](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html), consulte [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) en la documentación de MySQL.  
**Ejemplo de salida:**  

```
{
  "id": "utf8mb3",
  "title": "Usage of utf8mb3 charset",
  "status": "OK",
  "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.t1.col1",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      },
      {
        "level": "Warning",
        "dbObject": "test.t1.col2",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      }
  ]
}
```
Para resolver este problema, vuelva a crear los objetos y las tablas a los que se ha hecho referencia. Para obtener más información y conocer los requisitos previos antes de hacerlo, consulte la sección [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) en la documentación de MySQL.

**zeroDatesCheck**  
**Nivel de comprobación previa: advertencia**  
**Valores cero de fecha, fecha y hora y marca de tiempo**  
MySQL ahora aplica reglas más estrictas con respecto al uso de valores cero en las columnas de fecha, fecha y hora y marca de tiempo. Le recomendamos que utilice los modos `NO_ZERO_IN_DATE` y `NO_ZERO_DATE SQL` junto con el modo `strict`, ya que se fusionarán con el modo `strict` en una versión futura de MySQL.  
Si la configuración de `sql_mode` de alguna de las conexiones de la base de datos, en el momento de ejecutar la comprobación previa, no incluye estos modos, aparecerá una advertencia en la comprobación previa. Es posible que los usuarios aún puedan insertar los valores de fecha, fecha y hora y marca de tiempo que incluyan valores cero. Sin embargo, recomendamos encarecidamente sustituir los valores cero por valores válidos, ya que su comportamiento podría cambiar en el futuro y puede que no funcionen correctamente. Como se trata de una advertencia, no impedirá las actualizaciones, pero le recomendamos que empiece a planificar las medidas necesarias.  
**Ejemplo de salida:**  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
  ]
}
```

### Comprobaciones previas de Aurora MySQL que informan de advertencias
<a name="precheck-descriptions-warnings.aurora"></a>

Las siguientes comprobaciones previas son específicas de Aurora MySQL:
+ [auroraUpgradeCheckForRollbackSegmentHistoryLength](#auroraUpgradeCheckForRollbackSegmentHistoryLength)
+ [auroraUpgradeCheckForUncommittedRowModifications](#auroraUpgradeCheckForUncommittedRowModifications)

**auroraUpgradeCheckForRollbackSegmentHistoryLength**  
**Nivel de comprobación previa: advertencia**  
**Comprueba si la longitud de la lista del historial de segmentos de reversión del clúster es alta**  
Tal y como se ha mencionado en [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), mientras se ejecuta el proceso de actualización de la versión principal, es esencial que la instancia de base de datos de la versión 2 de Aurora MySQL [se cierre por completo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Esto garantiza que todas las transacciones se confirmen o se reviertan y que InnoDB haya purgado todos los registros de deshacer.  
Si el clúster de base de datos tiene una longitud de la lista del historial (HLL) de segmentos de reversión larga, puede prolongarse el tiempo que InnoDB tarda en completar la purga de los registros de deshacer, lo que provoca un tiempo de inactividad prolongado durante el proceso de actualización de la versión principal. Si la comprobación previa detecta que la HLL del clúster de base de datos es larga, se generará una advertencia. Si bien esto no impide que se continúe con la actualización, le recomendamos que supervise de cerca la HLL del clúster de base de datos. Al mantenerla en niveles bajos, se reducirá el tiempo de inactividad necesario durante una actualización de la versión principal. Para obtener más información sobre la supervisión de HLL, consulte [La longitud de la lista de historial de InnoDB ha aumentado de forma significativa](proactive-insights.history-list.md).  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength",
  "title": "Checks if the rollback segment history length for the cluster is high",
  "status": "OK",
  "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_metrics",
        "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions."
      }
  ]
}
```
La comprobación previa devuelve una advertencia porque ha detectado que la HLL de deshacer de InnoDB era larga en el clúster de la base de datos (82989114). Aunque se continúe con la actualización, en función de la cantidad de operaciones de deshacer que se deba purgar, puede prolongar el tiempo de inactividad necesario durante el proceso de actualización.  
Le recomendamos que [investigue las transacciones abiertas](proactive-insights.history-list.md) en el clúster de base de datos antes de ejecutar la actualización en producción para asegurarse de que la HLL se mantenga en un tamaño manejable.

**auroraUpgradeCheckForUncommittedRowModifications**  
**Nivel de comprobación previa: advertencia**  
**Comprueba si hay muchas modificaciones de fila sin confirmar**  
Tal y como se ha mencionado en [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), mientras se ejecuta el proceso de actualización de la versión principal, es esencial que la instancia de base de datos de la versión 2 de Aurora MySQL [se cierre por completo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Esto garantiza que todas las transacciones se confirmen o se reviertan y que InnoDB haya purgado todos los registros de deshacer.  
Si el clúster de base de datos tiene transacciones que han modificado un gran número de filas, esto puede prolongar el tiempo que InnoDB tarda en completar la reversión de esta transacción como parte del proceso de cierre completo. Si la comprobación previa detecta transacciones de larga duración, con un gran número de filas modificadas en el clúster de base de datos, se generará una advertencia. Si bien esto no impide que se continúe con la actualización, le recomendamos que supervise de cerca el tamaño de las transacciones activas del clúster de la base de datos. Al mantenerla en niveles bajos, se reducirá el tiempo de inactividad necesario durante una actualización de la versión principal.  
**Ejemplo de salida:**  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_trx",
        "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback."
      }
  ]
},
```
La comprobación previa indica que el clúster de base de datos incluye una transacción con 11 000 000 de cambios de fila no confirmados que deberán revertirse durante el proceso de cierre completo. La actualización continuará, pero para reducir el tiempo de inactividad durante el proceso de actualización, le recomendamos que lo supervise e investigue antes de ejecutar la actualización en los clústeres de producción.  
Para ver las transacciones activas en la instancia de base de datos de escritor, puede utilizar la tabla [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html). La siguiente consulta en la instancia de base de datos de escritor muestra las transacciones actuales, el tiempo de ejecución, el estado y las filas modificadas del clúster de la base de datos.  

```
# Example of uncommitted transaction
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| 2024-08-12 18:32:52 |                         1592 |                          20041 | 52866130 | RUNNING   |      11000000 |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
1 row in set (0.01 sec)

# Example of transaction rolling back
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state    | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| 2024-08-12 18:32:52 |                         1719 |                          20041 | 52866130 | ROLLING BACK |      10680479 |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
1 row in set (0.01 sec)
```
Una vez confirmada o revertida la transacción, la comprobación previa ya no mostrará ninguna advertencia. Consulte la documentación de MySQL y hable con el equipo de aplicaciones antes de revertir cualquier transacción grande, ya que la reversión puede tardar algún tiempo en completarse, según el tamaño de la transacción.  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "detectedProblems": []
},
```
Para obtener más información sobre la optimización de la administración de transacciones de InnoDB y el posible impacto al ejecutar y revertir transacciones de gran tamaño en instancias de bases de datos de MySQL, consulte la sección [Optimizing InnoDB Transaction Management](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-transaction-management.html) en la documentación de MySQL.

## ​Avisos
<a name="precheck-descriptions-notices"></a>

La siguiente comprobación previa genera un aviso cuando se produce un error en ella, pero se puede continuar con la actualización.

**sqlModeFlagCheck**  
**Nivel de comprobación previa: aviso**  
**Uso de indicadores de `sql_mode` obsoletos**  
Además de `MAXDB`, se ha [eliminado](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) una serie de otras opciones de `sql_mode`: `DB2`, `MSSQL`, `MYSQL323`, `MYSQL40`, `ORACLE`, `POSTGRESQL`, `NO_FIELD_OPTIONS`, `NO_KEY_OPTIONS` y `NO_TABLE_OPTIONS`. A partir de MySQL 8.0, ninguno de estos valores se puede asignar a la variable del sistema `sql_mode`. Si esta comprobación previa detecta sesiones abiertas con esta configuración de `sql_mode`, asegúrese de que los grupos de parámetros de la instancia de base de datos y del clúster de base de datos, así como las aplicaciones y configuraciones del cliente, estén actualizados para deshabilitarlos. Para obtener más información, consulte la [documentación de MySQL](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).  
**Ejemplo de salida:**  

```
{
  "id": "sqlModeFlagCheck",
  "title": "Usage of obsolete sql_mode flags",
  "status": "OK",
  "detectedProblems": []
}
```
Para resolver alguno de estos errores de comprobación previa, consulte [maxdbFlagCheck](#maxdbFlagCheck).

## Errores, advertencias o avisos
<a name="precheck-descriptions-all"></a>

La siguiente comprobación previa puede devolver un error, una advertencia o un aviso en función del resultado de la comprobación previa.

**checkTableOutput**  
**Nivel de comprobación previa: error, advertencia o aviso**  
**Problemas notificados por el comando `check table x for upgrade`**  
Antes de iniciar la actualización a la versión 3 de Aurora MySQL, se ejecuta `check table for upgrade` en cada tabla de los esquemas de usuarios del clúster de la base de datos. Esta comprobación previa no es la misma que la de [checkTableMysqlSchema](#checkTableMysqlSchema).  
El comando `check table for upgrade` examina las tablas para detectar posibles problemas que puedan surgir durante una actualización a una versión más reciente de MySQL. Ejecutar este comando antes de intentar una actualización puede ayudar a identificar y resolver cualquier incompatibilidad con antelación, lo que facilita el proceso de actualización propiamente dicho.  
Este comando realiza varias comprobaciones en cada tabla, como, por ejemplo:  
+ Verifica que los metadatos y la estructura de la tabla sean compatibles con la versión de MySQL de destino
+ Comprueba si hay alguna característica obsoleta o eliminada que se utilice en la tabla
+ Garantiza que la tabla se pueda actualizar correctamente sin que se pierdan datos
A diferencia de otras comprobaciones previas, puede devolver un error, una advertencia o un aviso en función del resultado de `check table`. Si esta comprobación previa devuelve alguna tabla, revísela detenidamente, junto con el código de devolución y el mensaje antes de iniciar la actualización. Para obtener más información, consulte la sección [CHECK TABLE statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) en la documentación de MySQL.  
A continuación, ofrecemos un ejemplo de error y un ejemplo de advertencia.  
**Ejemplo de error:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.parent",
        "description": "Table 'test.parent' doesn't exist"
      }
  ]
},
```
La comprobación previa indica que hay un error porque la tabla `test.parent` no existe.  
El archivo `mysql-error.log` de la instancia de base de datos de escritor muestra que hay un error de clave externa.  

```
2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.
2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
```
Inicie sesión en la instancia de base de datos de escritor y ejecute `show engine innodb status\G` para obtener más información sobre el error de clave externa.  

```
mysql> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT
=====================================
.
.
.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
The index in the foreign key in table is p_name_idx
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
.
.
```
El mensaje `LATEST FOREIGN KEY ERROR` indica que a la restricción de clave externa `fk_pname` de la tabla `test.child`, que hace referencia a la tabla `test.parent`, le falta un índice o el tipo de datos no coincide. La documentación de MySQL sobre [las restricciones de claves externas](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html) establece que las columnas a las que se hace referencia en una clave externa deben tener un índice asociado y las columnas principales o secundarias deben usar el mismo tipo de datos.  
Para verificar si esto se debe a la falta de un índice o a que el tipo de datos no coincide, inicie sesión en la base de datos y compruebe las definiciones de la tabla deshabilitando temporalmente la variable de sesión [foreign\$1key\$1checks](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html#foreign-key-checks). Después de hacerlo, podemos ver que la restricción secundaria en cuestión (`fk_pname`) utiliza `p_name varchar(20) CHARACTER SET latin1 DEFAULT NULL` para hacer referencia a la tabla principal `name varchar(20) NOT NULL`. La tabla principal utiliza `DEFAULT CHARSET=utf8`, pero la columna `p_name` de la tabla secundaria utiliza `latin1`, por lo que se produce un error de incoherencia entre los tipos de datos.  

```
mysql> show create table parent\G
ERROR 1146 (42S02): Table 'test.parent' doesn't exist

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table parent\G
*************************** 1. row ***************************
       Table: parent
Create Table: CREATE TABLE `parent` (
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Para resolver este problema, podemos cambiar la tabla secundaria para que use el mismo conjunto de caracteres que la tabla principal o cambiar la tabla principal para que use el mismo conjunto de caracteres que la tabla secundaria. En este caso, dado que la tabla secundaria usa explícitamente `latin1` en la definición de columna `p_name`, ejecutamos `ALTER TABLE` para modificar el conjunto de caracteres a `utf8`.  

```
mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush tables;
Query OK, 0 rows affected (0.01 sec)
```
Después de hacerlo, se aprueba la comprobación previa y se puede continuar con la actualización.  
**Ejemplo de advertencia:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.orders",
        "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute."
      }
  ]
}
```
La comprobación previa muestra una advertencia para el desencadenador `delete_audit_trigg` de la tabla `test.orders`, ya que no tiene el atributo `CREATED`. Según la sección [Checking Version Compatibility](https://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-version-compatibility) de la documentación de MySQL, este mensaje es informativo y se muestra para los desencadenadores creados en las versiones anteriores a MySQL 5.7.2.  
Dado que se trata de una advertencia, no impide que se lleve a cabo la actualización. Sin embargo, si desea resolver el problema, puede volver a crear el desencadenador en cuestión, y la comprobación previa se realizará correctamente sin ningún tipo de advertencia.  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": []
},
```

# Pasos para realizar una actualización local
<a name="AuroraMySQL.Upgrading.Procedure"></a>

También le recomendamos que revise el material de referencia en [Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence).

Realice cualquier planificación y prueba previas a la actualización, tal y como se describe en [Planificación de una actualización de versión principal para un clúster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Consola
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CON"></a>

En el ejemplo siguiente se actualiza el clúster de base de datos `mydbcluster-cluster` a la versión Aurora MySQL 3.04.1.

**Para actualizar la versión principal de un clúster de base de datos Aurora MySQL**

1. Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon RDS en [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Si utilizó un grupo de parámetros personalizado con el clúster de base de datos original, cree un grupo de parámetros compatible con la nueva versión principal. Realice los ajustes necesarios en los parámetros de configuración del nuevo grupo de parámetros. Para obtener más información, consulte [Cómo afectan las actualizaciones en el lugar a los grupos de parámetros de un clúster](#AuroraMySQL.Upgrading.ParamGroups).

1.  En el panel de navegación, seleccione **Databases (Bases de datos)**. 

1.  En la lista, elija el clúster de base de datos que desea modificar. 

1.  Elija **Modify**. 

1.  Para **Version** (Versión), elija una nueva versión principal de Aurora.

   También le recomendamos que utilice la versión secundaria de la versión principal. A continuación, elegimos la versión predeterminada actual.  
![\[Actualización in situ de un clúster de base de datos Aurora MySQL de la versión 2 a la versión 3\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/ams-upgrade-v2-v3.png)

1.  Elija **Continue**. 

1.  En la página siguiente, especifique cuándo realizar la actualización. Seleccione **During the next scheduled maintenance window (Durante la siguiente ventana de mantenimiento programado)** o **Immediately (Inmediatamente)**. 

1.  (Opcional) Examine periódicamente la página **Events** (Eventos) de la consola RDS durante la actualización. Esto le ayuda a supervisar el progreso de la actualización e identificar cualquier problema. Si la actualización encuentra algún problema, consulte [Solución de problemas para la actualización Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Troubleshooting.md) para conocer los pasos a seguir. 

1. Si creó un nuevo grupo de parámetros al inicio de este procedimiento, asocie el grupo de parámetros personalizados con el clúster actualizado. Para obtener más información, consulte [Cómo afectan las actualizaciones en el lugar a los grupos de parámetros de un clúster](#AuroraMySQL.Upgrading.ParamGroups).
**nota**  
 Para realizar este paso, deberá reiniciar el clúster de nuevo para aplicar el nuevo grupo de parámetros. 

1.  (Opcional) Después de completar las pruebas posteriores a la actualización, elimine la instantánea manual que Aurora creó al comienzo de la actualización. 

## AWS CLI
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CLI"></a>

Para actualizar la versión principal de un clúster de base de datos de Aurora MySQL, utilice el comando [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) de la AWS CLI con los siguientes parámetros requeridos:
+ `--db-cluster-identifier`
+ `--engine-version`
+ `--allow-major-version-upgrade`
+  `--apply-immediately` o `--no-apply-immediately`

Si el clúster utiliza algún grupo de parámetros personalizados, incluya también una o ambas opciones:
+ `--db-cluster-parameter-group-name`, si el clúster utiliza un grupo de parámetros de clúster personalizado
+ `--db-instance-parameter-group-name`, si alguna instancia del clúster utiliza un grupo de parámetros de base de datos personalizado

En el ejemplo siguiente se actualiza el clúster de base de datos `sample-cluster` a la versión Aurora MySQL 3.04.1. La actualización se realiza inmediatamente, en lugar de esperar la siguiente ventana de mantenimiento.

**Example**  
Para Linux, macOS o Unix:  

```
aws rds modify-db-cluster \
          --db-cluster-identifier sample-cluster \
          --engine-version 8.0.mysql_aurora.3.04.1 \
          --allow-major-version-upgrade \
          --apply-immediately
```
En Windows:  

```
aws rds modify-db-cluster ^
          --db-cluster-identifier sample-cluster ^
          --engine-version 8.0.mysql_aurora.3.04.1 ^
          --allow-major-version-upgrade ^
          --apply-immediately
```
Puede combinar otros comandos de CLI con `modify-db-cluster` para crear un proceso automatizado de extremo a extremo para realizar y verificar actualizaciones. Para obtener más información y ejemplos, consulte [Tutorial de actualización de Aurora MySQL en el lugar](AuroraMySQL.Upgrading.Tutorial.md).

**nota**  
Si el clúster forma parte de una base de datos global Aurora, el procedimiento de actualización en el lugar es ligeramente diferente. Se llama a la operación de comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) en lugar de `modify-db-cluster`. Para obtener más información, consulte [Actualizaciones mayores en el lugar para bases de datos globales](#AuroraMySQL.Upgrading.GlobalDB).

## API de RDS
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.API"></a>

Para actualizar la versión principal de un clúster de base de datos Aurora MySQL, utilice la operación de la API de RDS [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) con los siguientes parámetros requeridos:
+ `DBClusterIdentifier`
+ `Engine`
+ `EngineVersion`
+ `AllowMajorVersionUpgrade`
+ `ApplyImmediately` (establecido en `true` o `false`)

**nota**  
Si el clúster forma parte de una base de datos global Aurora, el procedimiento de actualización en el lugar es ligeramente diferente. Se llama a la operación [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalClusterParameterGroup.html) en lugar de `ModifyDBCluster`. Para obtener más información, consulte [Actualizaciones mayores en el lugar para bases de datos globales](#AuroraMySQL.Upgrading.GlobalDB).

## Cómo afectan las actualizaciones en el lugar a los grupos de parámetros de un clúster
<a name="AuroraMySQL.Upgrading.ParamGroups"></a>

Los grupos de parámetros de Aurora tienen diferentes conjuntos de opciones de configuración para los clústeres compatibles con MySQL 5.7 u 8.0. Al realizar una actualización en el centro, el clúster actualizado y todas sus instancias deben utilizar los grupos de parámetros de clúster e instancia correspondientes.

Es posible que el clúster y las instancias usen los grupos de parámetros predeterminados compatibles con la versión 5.7. Si es así, el clúster y la instancia actualizados comienzan con los grupos predeterminados de parámetros compatibles con 8.0. Si su clúster e instancias utilizan algún grupo de parámetros personalizado, asegúrese de crear los correspondientes grupos de parámetros compatibles con 8.0. También asegúrese de especificarlos durante el proceso de actualización.

**nota**  
Para la mayoría de las configuraciones de parámetros, puede elegir el grupo de parámetros personalizado en dos puntos. Esto es al crear el clúster o asociar el grupo de parámetros al clúster más adelante.  
Sin embargo, si utiliza una configuración no predeterminada para el parámetro `lower_case_table_names`, debe configurar el grupo de parámetros personalizado con esta configuración de antemano. A continuación, especifique el grupo de parámetros durante la restauración de instantáneas para la creación de clúster. Cualquier cambio en el parámetro `lower_case_table_names` no tiene efecto después de crear el clúster.  
Le recomendamos que utilice la misma configuración para `lower_case_table_names` cuando actualice de la versión 2 de Aurora MySQL a la versión 3.  
Con una base de datos global de Aurora basada en Aurora MySQL, no se puede realizar una actualización local desde la versión 2 a la versión 3 de Aurora MySQL si el parámetro `lower_case_table_names` está activado. Para obtener más información sobre los métodos que puede utilizar, consulte [Actualizaciones de la versión principal](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).

**importante**  
 Si especifica algún grupo de parámetros personalizado durante el proceso de actualización, asegúrese de reiniciar manualmente el clúster una vez finalizada la actualización. Al hacerlo, el clúster comienza a usar la configuración de parámetros personalizados. 

## Cambios en las propiedades del clúster entre versiones de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Attrs"></a>

Cuando actualice de la versión 2 a la versión 3 de Aurora MySQL, asegúrese de comprobar cualquier aplicación o script que utilice para configurar o administrar clústeres e instancias de base de datos de Aurora MySQL.

Además, cambie el código que manipula los grupos de parámetros para tener en cuenta el hecho de que los nombres de grupos de parámetros predeterminados son diferentes para los clústeres compatibles con 5.7 y 8.0. Los nombres de los grupos de parámetros predeterminados para los clústeres de las versiones 2 y 3 de Aurora MySQL son `default.aurora-mysql5.7` y `default.aurora-mysql8.0`, respectivamente.

Por ejemplo, es posible que tenga código como el siguiente que se aplique al clúster antes de una actualización.

```
# Check the default parameter values for MySQL 5.7–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --region us-east-1
```

 Después de actualizar la versión principal del clúster, modifique ese código de la siguiente manera.

```
# Check the default parameter values for MySQL 8.0–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --region us-east-1
```

## Actualizaciones mayores en el lugar para bases de datos globales
<a name="AuroraMySQL.Upgrading.GlobalDB"></a>

 Para una base de datos global de Aurora, actualice el clúster de la base de datos global. Aurora actualiza automáticamente todos los clústeres al mismo tiempo y se asegura de que todos ejecuten la misma versión del motor. Este requisito se debe a que cualquier cambio en las tablas del sistema, formatos de archivo de datos, etc., se replican automáticamente en todos los clústeres secundarios. 

Siga las instrucciones en [Cómo funciona la actualización de la versión principal en el lugar Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence). Cuando especifique qué actualizar, asegúrese de elegir el clúster de base de datos global en lugar de uno de los clústeres que contiene.

Si utiliza la Consola de administración de AWS, elija el elemento con el rol **Global database** (Base de datos global).

![\[Actualización del clúster de base de datos global\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-databases-major-upgrade-global-cluster.png)


 Si utiliza la AWS CLI o la API de RDS, inicie el proceso de actualización llamando al comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) o la operación [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalCluster.html). Se usa uno de estos en lugar de `modify-db-cluster` o `ModifyDBCluster`.

**nota**  
No puede especificar un grupo de parámetros personalizado para el clúster de base de datos global mientras realiza una actualización importante de la versión de esa base de datos global de Aurora. Cree grupos de parámetros personalizados en cada región del clúster global. A continuación, aplíquelos manualmente a los clústeres regionales después de la actualización.

 Para actualizar la versión principal de un clúster de base de datos global de Aurora MySQL, utilice el comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) de la AWS CLI con los siguientes parámetros requeridos: 
+  `--global-cluster-identifier` 
+  `--engine aurora-mysql` 
+  `--engine-version` 
+  `--allow-major-version-upgrade` 

En el ejemplo siguiente se actualiza el clúster de base de datos global a la versión 2.10.2 de Aurora MySQL.

**Example**  
Para Linux, macOS o Unix:  

```
aws rds modify-global-cluster \
          --global-cluster-identifier global_cluster_identifier \
          --engine aurora-mysql \
          --engine-version 5.7.mysql_aurora.2.10.2 \
          --allow-major-version-upgrade
```
En Windows:  

```
aws rds modify-global-cluster ^
          --global-cluster-identifier global_cluster_identifier ^
          --engine aurora-mysql ^
          --engine-version 5.7.mysql_aurora.2.10.2 ^
          --allow-major-version-upgrade
```

## Consideraciones sobre el Backtrack
<a name="AuroraMySQL.Upgrading.Backtrack"></a>

Si el clúster que actualizó tenía habilitada la característica Backtrack, no podrá realizar un retroceso del clúster actualizado a una hora anterior a la actualización.

# Tutorial de actualización de Aurora MySQL en el lugar
<a name="AuroraMySQL.Upgrading.Tutorial"></a>

En los siguientes ejemplos de Linux se muestra cómo se pueden realizar los pasos generales del procedimiento de actualización en el lugar utilizando AWS CLI.

Este primer ejemplo crea un clúster de base de datos Aurora que ejecuta una versión 2.x de Aurora MySQL. El clúster incluye una instancia de base de datos de escritura y una instancia de base de datos de lector. El comando `wait db-instance-available` se detiene hasta que la instancia de base de datos del escritor esté disponible. Ese es el momento en que el clúster está listo para ser actualizado.

```
aws rds create-db-cluster --db-cluster-identifier mynewdbcluster --engine aurora-mysql \
  --db-cluster-version 5.7.mysql_aurora.2.11.2
...
aws rds create-db-instance --db-instance-identifier mynewdbcluster-instance1 \
  --db-cluster-identifier mynewdbcluster --db-instance-class db.t4g.medium --engine aurora-mysql
...
aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

Las versiones de Aurora MySQL 3.x en las que puede actualizar el clúster dependen de la versión 2.x en la que se está ejecutando actualmente el clúster y en la Región de AWS donde se encuentra el clúster. El primer comando, con `--output text`, solo muestra la versión de destino disponible. El segundo comando muestra la salida JSON completa de la respuesta. En esa respuesta, puede ver detalles como el valor `aurora-mysql` que utiliza para el parámetro `engine`. También puede ver el hecho de que la actualización a 3.04.0 es una actualización de la versión principal.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.2 \
  --query '*[].[ValidUpgradeTarget]'
...
{
    "Engine": "aurora-mysql",
    "EngineVersion": "8.0.mysql_aurora.3.04.0",
    "Description": "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "AutoUpgrade": false,
    "IsMajorVersionUpgrade": true,
    "SupportedEngineModes": [
        "provisioned"
    ],
    "SupportsParallelQuery": true,
    "SupportsGlobalDatabases": true,
    "SupportsBabelfish": false,
    "SupportsIntegrations": false
},
...
```

En este ejemplo, se muestra que si ingresa un número de versión de destino que no es un destino de actualización válido para el clúster, Aurora no realiza la actualización. Aurora tampoco realiza una actualización de versión principal, a menos que incluya el parámetro `--allow-major-version-upgrade`. De esta manera, no puede realizar accidentalmente una actualización que tenga el potencial de requerir pruebas exhaustivas y cambios en el código de su aplicación.

```
aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 5.7.mysql_aurora.2.09.2 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: Cannot find upgrade target from 5.7.mysql_aurora.2.11.2 with requested version 5.7.mysql_aurora.2.09.2.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --region us-east-1 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --apply-immediately --allow-major-version-upgrade
{
  "DBClusterIdentifier": "mynewdbcluster",
  "Status": "available",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.11.2"
}
```

 El estado del clúster y las instancias de base de datos asociadas tardan unos minutos en cambiar a `upgrading`. Los números de versión del clúster y de las instancias de base de datos solo cambian cuando finaliza la actualización. De nuevo, puede utilizar el comando `wait db-instance-available` para que la instancia de base de datos de escritor espere hasta que finalice la actualización antes de continuar. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[Status,EngineVersion]' --output text
upgrading 5.7.mysql_aurora.2.11.2

aws rds describe-db-instances --db-instance-identifier mynewdbcluster-instance1 \
  --query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,DBInstanceStatus:DBInstanceStatus} | [0]'
{
    "DBInstanceIdentifier": "mynewdbcluster-instance1",
    "DBInstanceStatus": "upgrading"
}

aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

 En este punto, el número de versión del clúster coincide con el especificado para la actualización. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[EngineVersion]' --output text

8.0.mysql_aurora.3.04.0
```

En el ejemplo anterior se realizó una actualización inmediata especificando el parámetro `--apply-immediately`. Para permitir que la actualización se realice en un momento conveniente cuando no se espera que el clúster esté ocupado, puede especificar el parámetro `--no-apply-immediately`. Al hacerlo, la actualización se iniciará durante la siguiente ventana de mantenimiento del clúster. La ventana de mantenimiento define el período durante el cual se pueden iniciar las operaciones de mantenimiento. Es posible que una operación de larga duración no finalice durante el período de mantenimiento. Por lo tanto, no necesita definir una ventana de mantenimiento más grande, incluso si espera que la actualización pueda tardar mucho tiempo.

En el ejemplo siguiente, se actualiza un clúster que inicialmente ejecuta la versión 2.11.2 de Aurora MySQL. En la salida de `describe-db-engine-versions`, los valores `False` y `True` representan la propiedad `IsMajorVersionUpgrade`. Desde la versión 2.11.2, puede actualizar a otras versiones 2.\$1. Esas actualizaciones no se consideran actualizaciones de versión principales, por lo que no requieren una actualización in situ. La actualización local solo está disponible para las actualizaciones a las versiones 3.\$1 que se muestran en la lista.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \
  --query '*[].[ValidUpgradeTarget]|[0][0]|[*].[EngineVersion,IsMajorVersionUpgrade]' --output text

5.7.mysql_aurora.2.11.3 False
5.7.mysql_aurora.2.11.4 False
5.7.mysql_aurora.2.11.5 False
5.7.mysql_aurora.2.11.6 False
5.7.mysql_aurora.2.12.0 False
5.7.mysql_aurora.2.12.1 False
5.7.mysql_aurora.2.12.2 False
5.7.mysql_aurora.2.12.3 False
8.0.mysql_aurora.3.04.0 True
8.0.mysql_aurora.3.04.1 True
8.0.mysql_aurora.3.04.2 True
8.0.mysql_aurora.3.04.3 True
8.0.mysql_aurora.3.05.2 True
8.0.mysql_aurora.3.06.0 True
8.0.mysql_aurora.3.06.1 True
8.0.mysql_aurora.3.07.1 True

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --no-apply-immediately --allow-major-version-upgrade
...
```

Cuando se crea un clúster sin una ventana de mantenimiento especificada, Aurora selecciona un día aleatorio de la semana. En este caso, el comando `modify-db-cluster` se envía un lunes. Por lo tanto, cambiamos la ventana de mantenimiento para que sea el martes por la mañana. Todas las horas se representan en la zona horaria UTC. El periodo `tue:10:00-tue:10:30` se corresponde a las 2:00-2:30 h, hora del Pacífico. El cambio en la ventana de mantenimiento surte efecto inmediatamente.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "sat:08:20-sat:08:50"
    ]
]

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster --preferred-maintenance-window tue:10:00-tue:10:30"
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "tue:10:00-tue:10:30"
    ]
]
```

En el siguiente ejemplo se muestra cómo obtener un informe de los eventos generados por la actualización. El argumento `--duration` representa el número de minutos para recuperar la información del evento. Este argumento es necesario porque, de forma predeterminada, `describe-events` solo devuelve eventos de la última hora.

```
aws rds describe-events --source-type db-cluster --source-identifier mynewdbcluster --duration 20160
{
    "Events": [
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "DB cluster created",
            "EventCategories": [
                "creation"
            ],
            "Date": "2022-11-17T01:24:11.093000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing online pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:08.450000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing offline pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:59.519000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Creating pre-upgrade snapshot [preupgrade-mynewdbcluster-5-7-mysql-aurora-2-10-2-to-8-0-mysql-aurora-3-02-0-2022-11-18-22-55].",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:00:22.318000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Cloning volume.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:01:45.428000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:02:25.141000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:23.036000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Upgrading database objects.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:48.208000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster major version has been upgraded",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:10:28.999000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        }
    ]
}
```

# Determinación del motivo de los errores en una actualización de la versión principal de Aurora MySQL
<a name="AuroraMySQL.Upgrading.failure-events"></a>

En el [tutorial](AuroraMySQL.Upgrading.Tutorial.md), la actualización de Aurora MySQL versión 2 a la versión 3 se realizó correctamente. Pero si la actualización hubiera fallado, querría saber por qué.

Puede empezar por utilizar el comando `describe-events` de la AWS CLI para ver los eventos del clúster de base de datos. En este ejemplo, se muestran los eventos de `mydbcluster` de las últimas 10 horas.

```
aws rds describe-events \
    --source-type db-cluster \
    --source-identifier mydbcluster \
    --duration 600
```

En este caso, se produjo un error en la comprobación previa de la actualización.

```
{
    "Events": [
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster engine version upgrade started.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:22.846000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        },
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the  
             upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see 
             https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:24.373000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        }
    ]
}
```

Para diagnosticar la causa exacta del problema, examine los registros de la base de datos de la instancia de base de datos de escritor. Cuando se produce un fallo en una actualización a Aurora MySQL versión 3, la instancia de escritor contiene un archivo de registro con el nombre `upgrade-prechecks.log`. En este ejemplo se muestra cómo detectar la presencia de ese registro y, luego, descargarlo en un archivo local para su análisis.

```
aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \
    --query '*[].[LogFileName]' --output text

error/mysql-error-running.log
error/mysql-error-running.log.2024-04-11.20
error/mysql-error-running.log.2024-04-11.21
error/mysql-error.log
external/mysql-external.log
upgrade-prechecks.log

aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \
    --log-file-name upgrade-prechecks.log \
    --starting-token 0 \
    --output text >upgrade_prechecks.log
```

El archivo `upgrade-prechecks.log` está en formato JSON. Lo descargamos con la opción `--output text` para evitar codificar la salida JSON dentro de otro contenedor JSON. Para las actualizaciones a la versión 3 de Aurora MySQL, este registro siempre incluye ciertos mensajes informativos y de advertencia. Solo incluye mensajes de error si no se puede actualizar. Si se actualiza correctamente, el archivo de registro ya no se produce.

Para resumir todos los errores y mostrar los campos de objeto y descripción asociados, puede ejecutar el comando `grep -A 2 '"level": "Error"'` en el contenido del archivo `upgrade-prechecks.log`. Al hacerlo, se muestra cada línea de error y las dos líneas posteriores. Estas contienen el nombre del objeto de base de datos correspondiente e instrucciones sobre cómo corregir el problema.

```
$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"'

"level": "Error",
"dbObject": "problematic_upgrade.dangling_fulltext_index",
"description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
```

En este ejemplo, puede ejecutar el siguiente comando de SQL en la tabla infractora para intentar solucionar el problema, o bien puede volver a crear la tabla sin el índice pendiente.

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

A continuación, vuelva a intentar la actualización.

# Solución de problemas para la actualización Aurora MySQL en el lugar
<a name="AuroraMySQL.Upgrading.Troubleshooting"></a>

Utilice las siguientes sugerencias para solucionar problemas con las actualizaciones in situ de Aurora MySQL. Estas sugerencias no se aplican a los clústeres de base de datos de Aurora Serverless.


| Motivo por el que la actualización en el lugar se cancela o se ralentiza | Efecto | Solución para permitir que la actualización en el lugar se complete dentro de la ventana de mantenimiento | 
| --- | --- | --- | 
| La réplica entre regiones de Aurora asociadas aún no cuenta con revisión | Aurora cancela la actualización. | Actualice la réplica entre regiones de Aurora e inténtelo de nuevo. | 
| El clúster tiene transacciones XA en el estado preparado | Aurora cancela la actualización. | Confirme o revierta todas las transacciones XA preparadas. | 
| El clúster está procesando cualquier declaración de lenguaje de definición de datos (DDL) | Aurora cancela la actualización. | Considere la posibilidad de esperar y realizar la actualización una vez finalizadas todas las instrucciones DDL. | 
| El clúster tiene cambios no confirmados para muchas filas | Esto puede llevar mucho tiempo. |  El proceso de actualización revierte los cambios no confirmados. El indicador para esta condición es el valor de `TRX_ROWS_MODIFIED` en la `INFORMATION_SCHEMA.INNODB_TRX` tabla. Considere la posibilidad de realizar la actualización solo después de que todas las transacciones grandes se hayan confirmado o deshecho.  | 
| El clúster tiene un gran número de registros de deshacer | Esto puede llevar mucho tiempo. |  Incluso si las transacciones no confirmadas no afectan a un gran número de filas, pueden implicar un gran volumen de datos. Por ejemplo, puede que esté insertando BLOBs grandes. Aurora no detecta ni genera automáticamente un evento para este tipo de actividad de transacción. El indicador de esta condición es la longitud de la lista de historial (HLL). El proceso de actualización revierte los cambios no confirmados. Puede comprobar el HLL en la salida del comando SQL `SHOW ENGINE INNODB STATUS` o directamente mediante la siguiente consulta SQL: <pre>SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';</pre> También puede monitorizar la métrica `RollbackSegmentHistoryListLength` en Amazon CloudWatch. Considere la posibilidad de realizar la actualización solo después de que la HLL sea menor.  | 
| El clúster está en el proceso de confirmar una transacción de registro binario grande | Esto puede llevar mucho tiempo. |  El proceso de actualización espera hasta que se apliquen los cambios en el registro binario. Más transacciones o instrucciones DDL podrían comenzar durante este período, lo que ralentiza aún más el proceso de actualización. Programe el proceso de actualización cuando el clúster no esté ocupado con la generación de cambios de reproducción de registros binarios. Aurora no detecta ni genera automáticamente un evento para esta condición.  | 
| Inconsistencias en el esquema causadas por la eliminación o la corrupción de un archivo | Aurora cancela la actualización. |  Cambie el motor de almacenamiento predeterminado para las tablas temporales de MyISAM a InnoDB. Siga estos pasos: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  | 
| Se ha eliminado el usuario maestro | Aurora cancela la actualización. |   No elimine el usuario maestro.  Sin embargo, si por alguna razón elimina el usuario maestro, restáurelo mediante los siguientes comandos SQL: <pre>CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;<br /><br />GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, <br />LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, <br />TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;</pre>  | 

Para obtener más información sobre la solución de problemas que provocan el error de las comprobaciones previas a la actualización, consulte los siguientes blogs:
+ [Lista de verificación de actualización de Amazon Aurora MySQL versión 2 (compatible con MySQL 5.7) a la versión 3 (compatible con MySQL 8.0), parte 1](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-1/)
+ [Lista de verificación de actualización de Amazon Aurora MySQL versión 2 (compatible con MySQL 5.7) a la versión 3 (compatible con MySQL 8.0), parte 2](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2/)

 Puede utilizar los siguientes pasos para realizar sus propias comprobaciones de algunas de las condiciones de la tabla anterior. De esta forma, puede programar la actualización en un momento en que sepa que la base de datos se encuentra en un estado en el que la actualización puede completarse correctamente y rápidamente. 
+  Puede comprobar si hay transacciones XA abiertas ejecutando la instrucción `XA RECOVER`. A continuación, puede confirmar o revertir las transacciones XA antes de iniciar la actualización. 
+  Puede comprobar si hay instrucciones DDL ejecutando una instrucción `SHOW PROCESSLIST` y buscando las instrucciones `CREATE`, `DROP`, `ALTER`, `RENAME` y `TRUNCATE` en la salida. Permita que todas las instrucciones DDL finalicen antes de iniciar la actualización. 
+  Puede comprobar el número total de filas no confirmadas consultando la tabla `INFORMATION_SCHEMA.INNODB_TRX`. La tabla contiene una fila para cada transacción. La columna `TRX_ROWS_MODIFIED` contiene el número de filas modificadas o insertadas por la transacción. 
+  Puede verificar la longitud de la lista de historial de InnoDB ejecutando la instrucción `SHOW ENGINE INNODB STATUS SQL` y buscando el `History list length` en la salida. También puede comprobar el valor directamente ejecutando la siguiente consulta: 

  ```
  SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';
  ```

   La longitud de la lista de historial corresponde a la cantidad de información de deshacer almacenada por la base de datos para implementar el control de concurrencia multiversión (MVCC). 

# Limpieza posterior a la actualización para Aurora MySQL versión 3
<a name="AuroraMySQL.mysql80-post-upgrade"></a>

Una vez que haya terminado de actualizar cualquier clúster de Aurora MySQL versión 2 a Aurora MySQL versión 3, puede realizar estas otras acciones de limpieza:
+ Cree nuevas versiones compatibles con MySQL 8.0 de cualquier grupo de parámetros personalizados. Aplique los valores de parámetros personalizados necesarios a los nuevos grupos de parámetros.
+ Actualice las alarmas de CloudWatch, los scripts de configuración, etc. para utilizar los nuevos nombres para cualquier métrica cuyos nombres se hayan visto afectados por cambios de idioma inclusivos. Para ver una lista de estas métricas, consulte [Cambios de idioma inclusivos para Aurora MySQL versión 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).
+ Actualice cualquier plantilla CloudFormation para utilizar los nuevos nombres para cualquier parámetro de configuración cuyos nombres se hayan visto afectados por cambios de idioma inclusivos. Para obtener una lista completa de estos parámetros, consulte [Cambios de idioma inclusivos para Aurora MySQL versión 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).

## Índices espaciales
<a name="AuroraMySQL.mysql80-spatial"></a>

Después de actualizar a Aurora MySQL versión 3, verifique si necesita eliminar o volver a crear objetos e índices relacionados con los índices espaciales. Antes de MySQL 8.0, Aurora podía optimizar las consultas espaciales utilizando índices que no contenían un identificador de recursos espaciales (SRID). Aurora MySQL versión 3 solo utiliza índices espaciales que contienen SRID. Durante una actualización, Aurora elimina automáticamente cualquier índice espacial sin SRID e imprime mensajes de advertencia en el registro de la base de datos. Si observa estos mensajes de advertencia, cree nuevos índices espaciales con SRID después de la actualización. Para obtener más información sobre los cambios en las funciones espaciales y los tipos de datos de MySQL 8.0, consulte [Cambios en MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html) en el *Manual de referencia de MySQL*.