Solución de errores comunes durante o después de la migración a Azure Database for MySQL: servidor flexible

SE APLICA A: Azure Database for MySQL: servidor único Azure Database for MySQL: servidor flexible

Importante

El servidor único de Azure Database for MySQL está en la ruta de retirada. Se recomienda encarecidamente actualizar al servidor flexible de Azure Database for MySQL. Para más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué ocurre con Azure Database for MySQL con servidor único?

El servidor flexible de Azure Database for MySQL es un servicio totalmente administrado con la versión de la comunidad de MySQL. La experiencia de MySQL en un entorno de servicio administrado puede diferir de ejecutarlo en su propio entorno. En este artículo, verá algunos de los errores comunes que pueden surgir los usuarios al migrar a un servidor flexible de Azure Database for MySQL o desarrollarlo por primera vez.

Errores de conexión comunes

ERROR 1184 (08S01): Aborted connection 22 to db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed)

El error anterior se produce después de un inicio de sesión correcto, pero antes de que se ejecute cualquier comando cuando se establece la sesión. El mensaje anterior indica que ha establecido un valor incorrecto del parámetro de servidor init_connect, que provoca un error en la inicialización de la sesión.

Hay algunos parámetros de servidor como require_secure_transport que no se admiten en el nivel de sesión, por lo que intentar cambiar los valores de estos parámetros mediante init_connect puede dar lugar al error 1184 al conectarse a la instancia de servidor flexible de Azure Database for MySQL, como se muestra a continuación:

mysql > muestra bases de datos; ERROR 2006 (HY000): El servidor MySQL ha desaparecido Sin conexión. Trying to reconnect... Connection id: 64897 Current database: *** NONE *** ERROR 1184 (08S01): Aborted connection 22 to db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed)

Solución: restablezca el valor init_connect en la pestaña Parámetros del servidor de Azure Portal y establezca solo los parámetros de servidor admitidos mediante el parámetro init_connect.

Errores debidos a la falta del privilegio SUPER y del rol DBA

El privilegio SUPER y el rol DBA no se admiten en el servicio. En consecuencia, pueden producirse algunos errores comunes que se enumeran a continuación:

ERROR 1419: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable) (No tiene el privilegio SUPER y el registro binario está habilitado [puede] usar la variable log_bin_trust_function_creators, pero es menos segura)

El error anterior puede aparecer al crear una función, al desencadenar como se muestra a continuación o al importar un esquema. Las instrucciones del DDL como CREATE FUNCTION o CREATE TRIGGER se escriben en el registro binario, por lo que la réplica secundaria puede ejecutarlas. El subproceso de réplica de SQL tiene privilegios totales, lo que se puede aprovechar para elevar los privilegios. Para protegerse frente a este riesgo en los servidores que tienen habilitado el registro binario, el motor de MySQL requiere que los creadores de funciones almacenadas tengan el privilegio SUPER, además del privilegio CREATE ROUTINE habitual.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Solución: para resolver el error, establezca log_bin_trust_function_creators en 1 en la hoja Parámetros del servidor del portal, ejecute las instrucciones de DDL o importe el esquema para crear los objetos deseados. Puede seguir manteniendo en log_bin_trust_function_creators 1 para el servidor a fin de evitar el error en el futuro. Nuestra recomendación es establecer log_bin_trust_function_creators como el riesgo de seguridad resaltado en la documentación de la comunidad de MySQL es mínimo en el servidor flexible de Azure Database for MySQL, ya que el registro de bin no se expone a ninguna amenaza.

ERROR 1227 (42000) en la línea 101: Access denied; you need (at least one of) the SUPER privilege(s) for this operation [Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación]. Error en la operación, exitcode 1

El error anterior puede producirse tanto al importar un archivo de volcado como al crear un procedimiento que contenga depuradores.

Resolución: para resolver este error, el usuario administrador puede conceder privilegios para crear o ejecutar procedimientos mediante la ejecución del comando GRANT, como en los ejemplos siguientes:

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Como alternativa, puede reemplazar los depuradores por el nombre del usuario administrador que ejecuta el proceso de importación, como se muestra a continuación.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

ERROR 1227 (42000) en la línea 295: Access denied; you need (at least one of) the SUPER privilege(s) for this operation [Acceso denegado; necesita (al menos uno de) los privilegios SUPER o SET_USER_ID para esta operación].

El error anterior puede producirse al ejecutar instrucciones CREATE VIEW con DEFINER como parte de la importación de un archivo de copia de seguridad o la ejecución de un script. El servidor flexible de Azure Database for MySQL no permite privilegios SUPER ni privilegios de SET_USER_ID a ningún usuario.

Resolución:

  • Use el usuario del definidor para ejecutar CREATE VIEW, en caso de que sea posible. Es probable que haya muchas vistas en las que distintos definidores tengan permisos diferentes, por lo que es posible que esto no sea factible. O BIEN
  • Edite el archivo de volcado de memoria o el script CREATE VIEW y elimine la instrucción DEFINER= del archivo. O BIEN
  • Edite el archivo de copia de seguridad o el script CREATE VIEW y reemplace los valores del definidor por el usuario con permisos de administrador que realiza la importación o ejecute el archivo de script.

Sugerencia

Use sed o Perl para modificar un archivo de copia de seguridad o un script SQL para reemplazar la instrucción DEFINER=

ERROR 1227 (42000) en la línea 18: Access denied; you need (at least one of) the SUPER privilege(s) for this operation [Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación].

Puede producirse el error anterior si está intentando importar el archivo de volcado de memoria desde una instancia de servidor flexible de Azure Database for MySQL con GTID habilitado para la instancia de servidor flexible de Azure Database for MySQL de destino. Mysqldump agrega la instrucción SET @@SESSION.sql_log_bin=0 a un archivo de volcado de memoria desde un servidor donde están en uso los GTID, lo que deshabilita el registro binario mientras se vuelve a cargar el archivo de volcado.

Solución: para resolver este error durante la importación, quite o comente las líneas siguientes del archivo mysqldump y vuelva a ejecutar la importación para asegurarse de que se ha realizado correctamente.

ESTABLEZCA @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN; ESTABLEZCA @@SESSION.SQL_LOG_BIN= 0; ESTABLEZCA @@GLOBAL.GTID_PURGED=''; ESTABLEZCA @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Errores de conexión comunes en el inicio de sesión de administrador del servidor

Cuando se crea una instancia de servidor flexible de Azure Database for MySQL, el usuario final proporciona un inicio de sesión de administrador del servidor durante la creación del servidor. El inicio de sesión de administrador del servidor permite crear bases de datos, agregar nuevos usuarios y conceder permisos. Si se elimina el inicio de sesión de administrador del servidor, se revocan sus permisos o se cambia su contraseña, es posible que empiece a ver errores de conexión en la aplicación durante las conexiones. A continuación se muestran algunos de los errores comunes.

ERROR 1045 (28000): Access denied for user 'username'@'IP address' (using password: SÍ) [Acceso denegado para el usuario "nombre de usuario"@"dirección IP" (usa contraseña: SÍ)].

El error anterior se produce si:

  • El nombre de usuario no existe.
  • El nombre de usuario se ha eliminado.
  • Su contraseña se ha cambiado o restablecido.

Solución:

  • Compruebe si "nombre de usuario" existe como usuario válido en el servidor o si se elimina accidentalmente. Para ejecutar la consulta siguiente, inicie sesión en el usuario del servidor flexible de Azure Database for MySQL:

    select user from mysql.user;
    
  • Si no puede iniciar sesión en la instancia de servidor flexible de Azure Database for MySQL para ejecutar la propia consulta anterior, se recomienda restablecer la contraseña de administrador mediante Azure Portal. La opción de restablecer la contraseña desde Azure Portal le ayudará a volver a crear el usuario, restablecer la contraseña y restaurar los permisos de administrador, lo que le permitirá iniciar sesión con el administrador del servidor y realizar otras operaciones.

Pasos siguientes

Si no encontró la respuesta que estaba buscando, tenga en cuenta las siguientes opciones: