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_engineamemory: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_enginede 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 usuarioroot@'%'o el rolcloudsqlsuperuser, 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 ROLEyDROP 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 privilegiosCONNECTION_ADMINpara 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
- Actualizar la versión principal de la base de datos migrando los datos
- Actualizar la versión secundaria de la base de datos