Problemas conocidos en las versiones secundarias de MySQL 8.0

En esta página se describen los problemas e incompatibilidades conocidos que pueden surgir después de actualizar de la versión principal de Cloud SQL para MySQL 5.7 a Cloud SQL para MySQL 8.0.

Para obtener más información sobre la actualización de la versión principal, consulta Actualizar la versión principal de la base de datos in situ. Para obtener más información sobre los registros de errores, consulta Ver registros de errores.

Problemas de rendimiento

En las siguientes secciones se describen los problemas de rendimiento conocidos.

Problemas con la consulta SELECT DISTINCT

Si usas la consulta SELECT DISTINCT en MySQL 8.0.18 a MySQL 8.0.20, es posible que el rendimiento se vea reducido. Los tiempos de ejecución de las consultas pueden ser tres veces más largos en comparación con MySQL 5.7.

Para obtener más información, consulta el error de MySQL #99593.

Para solucionar este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.21, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.18 a MySQL 8.0.20, actualiza el valor de la marca de base de datos internal_tmp_mem_storage_engine a memory:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas con las consultas de GROUP BY

Si usas consultas SELECT... GROUP BY en MySQL 8.0.36 o versiones anteriores, es posible que el rendimiento se reduzca y que los tiempos de ejecución de las consultas aumenten.

Esto puede ocurrir si la consulta usa el TempTable motor.

Para obtener más información, consulta el error de MySQL #107700.

Para solucionar este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.37, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.36 o una versión anterior, actualiza la marca internal_tmp_mem_storage_engine de la base de datos para usar el motor de memoria en lugar del motor de tabla temporal:
        SET SESSION internal_tmp_mem_storage_engine='memory' ;
      

Problemas en subprocesos de baja simultaneidad

Las instancias creadas en MySQL 8.0.22 o versiones posteriores que admitan aplicaciones cliente con pocos hilos de simultaneidad pueden experimentar problemas de rendimiento y un aumento de los tiempos de ejecución de las consultas.

MySQL 8.0.22 introdujo la marca innodb_log_writer_threads para mejorar el rendimiento en sistemas de alta simultaneidad. Esta marca está habilitada de forma predeterminada. Si tiene instancias creadas en MySQL 8.0.22 o versiones posteriores que admitan aplicaciones cliente con pocos hilos de simultaneidad, le recomendamos que inhabilite la marca innodb_log_writer_threads.

Para obtener más información, consulta el error de MySQL #93734.

Problemas con JOINS

Si usas consultas JOIN con la vista eq_ref en instancias que usan MySQL 8.0.29 a MySQL 8.0.32, es posible que tengas problemas de rendimiento significativos.

Para obtener más información, consulta el error de MySQL #109361.

Para resolver este problema, actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas con las cláusulas LIMIT y ORDER BY

Si ejecutas una consulta con las cláusulas LIMIT y ORDER BY en MySQL 8.0.32 o versiones anteriores, es posible que experimentes un problema de rendimiento. En algunos casos, se puede usar un plan de consulta diferente en MySQL 8.0 en comparación con MySQL 5.7 para la misma consulta.

Para obtener más información, consulta Cambios en MySQL 8.0.33.

Para resolver este problema, actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas de pérdida de memoria en MySQL 8.0

En las siguientes secciones se tratan los problemas conocidos de fugas de memoria en MySQL 8.0 o versiones posteriores. Es probable que estos problemas también afecten al rendimiento de las instancias.

Pérdida de memoria causada por consultas de intervalo

Si usas el optimizador de intervalos en instancias con MySQL 8.0.16 a MySQL 8.0.28, el archivo de código y la función memory/sql/THD::main_mem_root pueden consumir mucha memoria. Esto puede provocar que la instancia se quede sin memoria (OOM).

Para obtener más información, consulta el error de MySQL #105331.

Para resolver este problema, actualiza a MySQL 8.0.29, a cualquier versión secundaria posterior o a la versión más reciente.

Fuga de memoria asociada a procedimientos almacenados

Si ejecutas una consulta en un procedimiento almacenado en instancias con MySQL 8.0.27 a 8.0.31, es posible que la consulta consuma una cantidad muy alta de memoria en el archivo de código memory/sql/sp_head::execute_mem_root y en la función.

Para obtener más información, consulta el error de MySQL #107327.

Para resolver este problema, actualiza a MySQL 8.0.32, a cualquier versión secundaria posterior o a la versión más reciente.

Fuga de memoria causada por el acceso a una vista mediante SELECT

Si usas la consulta SELECT en MySQL 8.0.35 o versiones anteriores y tu aplicación usa numerosas llamadas de vista, es posible que se produzca una fuga de memoria notable.

Además, si la vista DEFINER está configurada como root@'%' o un usuario derivado del rol cloudsqlsuperuser, es posible que se produzca una fuga de memoria. Esto se debe a que el rol cloudsqlsuperuser tiene privilegios de revocación parcial.

Para obtener más información, consulta el error de MySQL #103133.

Para solucionar este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.36, a cualquier versión secundaria posterior o a la versión más reciente.
  • Si usas MySQL 8.0.35 o una versión anterior, utiliza un usuario independiente para la vista DEFINER, concretamente un usuario que no tenga privilegios de revocación parcial. Si debes usar el usuario root@'%' o el rol cloudsqlsuperuser, asegúrate de que solo los usas para procesos administrativos y no para consultas de aplicaciones. Si la fuga de memoria persiste, debes actualizar a MySQL 8.0.36, a cualquier versión secundaria posterior o a la versión más reciente.

Problemas de replicación

En la siguiente sección se describen los problemas conocidos relacionados con la replicación.

Problemas con la replicación paralela

Si se usa la replicación paralela en una réplica multiproceso que tiene el componente slave_preserve_commit_order habilitado y la instancia se usa para cargas de trabajo de escritura elevadas, las operaciones de la instancia pueden pausarse indefinidamente debido a un interbloqueo y a la acumulación del tiempo de latencia de la replicación.

Este problema se produce en MySQL 8.0.27 y en versiones posteriores hasta MySQL 8.0.32.

Para obtener más información, consulta los errores de MySQL #95863 y #103636.

Para solucionar este problema, sigue estas recomendaciones:

  • Actualiza a MySQL 8.0.33, a cualquier versión secundaria posterior o a la versión más reciente.
  • Inhabilita la replicación paralela para verificar la causa de este problema y, a continuación, programa una actualización adecuada. Aunque inhabilitar la replicación paralela puede resolver el problema temporalmente, no se recomienda como solución a largo plazo.

Problemas con los privilegios

En las siguientes secciones se describen los problemas conocidos relacionados con los privilegios.

Cambios en los privilegios

MySQL ha cambiado los sistemas de seguridad y gestión de cuentas en MySQL 8.0.

Después de actualizar a MySQL 8.0, es posible que los usuarios creados en MySQL 5.7 no tengan los mismos privilegios y acceso que los usuarios creados en MySQL 8.0. Como consecuencia, es posible que los usuarios creados en MySQL 5.7 reciban un mensaje de error de acceso denegado en los siguientes casos:

  • Es posible que los usuarios que hayan actualizado desde MySQL 5.7 no tengan los privilegios CREATE ROLE y DROP ROLE, ya que no existían en MySQL 5.7.
  • Es posible que los usuarios que hayan actualizado de MySQL 5.7 no puedan ejecutar el comando KILL, que ahora necesita privilegios CONNECTION_ADMIN para funcionar en MySQL 8.0.

Para obtener más información, puedes consultar todos los privilegios disponibles en MySQL 8.0.

Un mensaje de error de ejemplo tiene un aspecto similar al siguiente:

    ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
  

No puedes asignar directamente ninguno de estos privilegios actualizados a un usuario. Para solucionar este problema, un administrador con los privilegios de GRANT OPTION debería restablecer los privilegios de los usuarios después de la actualización para completar la actualización de la versión principal.

Para obtener más información, consulta Actualizar la versión principal de la base de datos in situ.

Los cambios en los privilegios provocan un error de acceso denegado

Es posible que los usuarios creados en MySQL 5.7 que se hayan actualizado a MySQL 8.0 no puedan conectarse a la base de datos debido a un problema de privilegios. En estos casos, es posible que los usuarios reciban el siguiente mensaje de error:

    Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
  

MySQL 8.0.16 introdujo la marca de base de datos partial_revokes y la habilitó de forma predeterminada, lo que permite revocar parcialmente los privilegios de los usuarios.

Si los usuarios creados en MySQL 5.7 se definieron mediante caracteres comodín, es posible que no puedan conectarse a la base de datos. Los caracteres comodín ya no se admiten en MySQL 8.0.16 ni en versiones posteriores. Esto significa que MySQL no puede encontrar una coincidencia exacta para la base de datos y el usuario, lo que puede provocar que se omitan algunas asignaciones de privilegios en la actualización.

Este problema afecta a MySQL 8.0.16 o versiones posteriores.

Para obtener más información, consulta Configurar marcas de bases de datos y Seguridad y gestión de cuentas.

Para resolver este problema, un administrador debe asignar permisos manualmente a los usuarios en MySQL 8.0.

Cambios en los valores de las marcas entre MySQL 5.7 y MySQL 8.0

Cuando actualizas de MySQL 5.7 a MySQL 8.0, es posible que algunos valores de las marcas de bases de datos cambien debido a un cambio en los valores predeterminados entre versiones. Este comportamiento puede provocar problemas de rendimiento.

Para obtener más información, consulta Nuevos valores predeterminados en MySQL 8.0.

Para solucionar este problema, asegúrate de que los valores de las marcas de base de datos asignados manualmente en MySQL 5.7 se sigan aplicando después de actualizar a MySQL 8.0 o una versión posterior. Te recomendamos que dejes los valores predeterminados asignados a las marcas del sistema.

Siguientes pasos