En esta página, se describen los problemas conocidos y las incompatibilidades que puedes encontrar después de realizar una actualización de 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 versión principal, consulta Actualiza la versión principal de la base de datos de manera local. Para obtener más información sobre los registros de errores, consulta y Visualiza los registros de errores.
Problemas de rendimiento
En las siguientes secciones, se abarcan 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 experimentes una reducción del rendimiento. Los tiempos de ejecución de las consultas pueden tardar tres veces más en comparación con MySQL 5.7.
Para obtener más información, consulta el error de MySQL n.° 99593.
Para resolver 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 GROUP BY
Si usas consultas SELECT... GROUP BY en MySQL 8.0.36 o versiones anteriores, es posible que experimentes una reducción del rendimiento y un aumento en los tiempos de ejecución de las consultas.
Esto puede suceder si la consulta usa el TempTable
motor.
Para obtener más información, consulta el error de MySQL n.° 107700.
Para resolver 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 versiones anteriores, actualiza la
internal_tmp_mem_storage_enginemarca de 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 admiten aplicaciones cliente con subprocesos de baja simultaneidad pueden experimentar problemas de rendimiento y tiempos de ejecución de consultas más largos.
MySQL 8.0.22 introdujo la innodb_log_writer_threads
marca para mejorar el rendimiento en sistemas de alta simultaneidad. Esta marca está habilitada de forma predeterminada. Si tienes instancias creadas en MySQL 8.0.22 o versiones posteriores que admiten aplicaciones cliente con subprocesos de baja simultaneidad, te recomendamos que inhabilites la marca innodb_log_writer_threads.
Para obtener más información, consulta el error de MySQL n.° 93734.
Problemas con JOINS
Si usas JOIN consultas con la
eq_ref
vista en instancias que usan MySQL 8.0.29 a MySQL 8.0.32, es posible que
experimentes problemas de rendimiento significativos.
Para obtener más información, consulta el error de MySQL n.° 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 la cláusula 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 fuga de memoria en MySQL 8.0
En las siguientes secciones, se abarcan los problemas conocidos de fuga de memoria en MySQL 8.0 o versiones posteriores. Es probable que estos problemas también afecten el rendimiento de la instancia.
Fuga de memoria causada por consultas de rango
Si usas el optimizador de rango en instancias con MySQL 8.0.16 a MySQL 8.0.28, es posible que el archivo de código y la función memory/sql/THD::main_mem_root consuman mucha memoria. Esto puede hacer que la instancia se quede sin memoria (OOM).
Para obtener más información, consulta el error de MySQL n.° 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 con 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 gran cantidad de memoria en el archivo de código y la función memory/sql/sp_head::execute_mem_root.
Para obtener más información, consulta el error de MySQL n.° 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 con 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 experimentes una fuga de memoria notable.
Además, si la vista DEFINER se establece en root@'%' o en un usuario derivado del rol cloudsqlsuperuser, es posible que experimentes 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 n.° 103133.
Para resolver 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 versiones anteriores, usa un usuario independiente
para la vista
DEFINER, específicamente un usuario que no tenga privilegios de revocación parcial. Si debes usar elroot@'%'usuario o elcloudsqlsuperuserrol, asegúrate de usarlos solo 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 abarcan los problemas conocidos relacionados con la replicación.
Problemas con la replicación paralela
Si usas la replicación paralela en una réplica de subprocesos múltiples que tiene habilitado el componente slave_preserve_commit_order y la instancia se usa para cargas de trabajo de escritura alta, es posible que las operaciones de la instancia se pausen de forma indefinida debido a un interbloqueo y a la acumulación de tiempo de retraso de la replicación.
Este problema se observa en MySQL 8.0.27 a MySQL 8.0.32.
Para obtener más información, consulta el error de MySQL n.° 95863 y el error de MySQL n.° 103636.
Para resolver 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, luego, programa una actualización adecuada. Si bien inhabilitar la replicación paralela puede resolver el problema de forma temporal, no se recomienda como solución a largo plazo.
Problemas de privilegios
En las siguientes secciones, se analizan los problemas conocidos relacionados con los privilegios.
Cambios en los privilegios
MySQL cambió los sistemas de administración de cuentas y seguridad 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 resultado, los usuarios creados en MySQL 5.7 pueden recibir un mensaje de error de acceso denegado en las siguientes situaciones:
- Es posible que los usuarios actualizados desde MySQL 5.7 no tengan
CREATE ROLEyDROP ROLEprivilegios, ya que esos privilegios no existían en MySQL 5.7. - Es posible que los usuarios actualizados desde MySQL 5.7 no puedan ejecutar el
KILLcomando, que ahora necesitaCONNECTION_ADMINprivilegios 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 se ve 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 existente.
Para resolver este problema, un administrador con los privilegios GRANT OPTION debe restablecer los privilegios de usuario después de la actualización para completar la actualización de versión principal.
Para obtener más información, consulta Actualiza la versión principal de la base de datos de manera local.
Los cambios en los privilegios causan el error de acceso denegado
Es posible que los usuarios creados en MySQL 5.7 que se actualizaron a MySQL 8.0 no puedan conectarse a la base de datos debido a un problema de privilegios. En esos casos, los usuarios pueden recibir 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 usuario.
Si los usuarios creados en MySQL 5.7 se definieron con caracteres comodín, es posible que no puedan conectarse a la base de datos. Los caracteres comodín ya no son compatibles con MySQL 8.0.16 ni versiones posteriores. Esto significa que MySQL no puede encontrar una coincidencia exacta para la base de datos y el usuario, lo que puede hacer que se pierdan algunas asignaciones de privilegios existentes en la actualización.
Este problema afecta a MySQL 8.0.16 o versiones posteriores.
Para obtener más información, consulta Configura marcas de bases de datos y Seguridad y administración de cuentas.
Para resolver este problema, un administrador debe asignar permisos de forma manual 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 se cambien algunos valores de las marcas de base de datos debido a un cambio en los valores predeterminados entre las versiones. Este comportamiento puede causar problemas de rendimiento.
Para obtener más información, consulta Nuevos valores predeterminados en MySQL 8.0.
Para resolver este problema, asegúrate de que los valores de las marcas de base de datos asignados de forma manual establecidos en MySQL 5.7 se sigan aplicando después de la actualización a MySQL 8.0 o versiones posteriores. Te recomendamos que no modifiques los valores predeterminados asignados a las marcas del sistema.
¿Qué sigue?
- Actualiza la versión principal de la base de datos mediante la migración de datos
- Actualiza la versión secundaria de la base de datos