Solución de los errores que se detectan normalmente durante la migración a Azure Database for MySQL: servidor flexible, o después de esta
El servidor flexible de Azure Database for MySQL es un servicio totalmente administrado que usa la tecnología de la versión de 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 encontrar los usuarios al migrar a Azure Database for MySQL o desarrollar en el servidor flexible de Azure Database for MySQL 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 y, por consiguiente, intentar cambiar los valores de estos parámetros mediante init_connect
puede generar el error 1184 al conectarse al 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... Id. de conexión: 64897 Base de datos actual: ** NONE ** ERROR 1184 (08S01): Conexión anulada 22 a db: "db-name" user: "user" host: "hostIP" (error del comando init_connect)
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: No tiene el privilegio SUPER y el registro binario está habilitado (es posible que quiera usar la variable de log_bin_trust_function_creators 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;
Resolución: para resolver el error, establezca log_bin_trust_function_creators
en 1, ejecute las instrucciones 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. Se recomienda establecer log_bin_trust_function_creators
, ya que el riesgo de seguridad resaltado en la documentación de la comunidad de MySQL es mínimo en el servicio del servidor flexible de Azure Database for MySQL porque el registro de bin no está expuesto 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 definidores.
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: 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 los privilegios SUPER ni el privilegio 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 con distintos definidores que tengan permisos diferentes, por lo que puede 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 del servidor flexible de Azure Database for MySQL con GTID habilitado para la instancia del 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.
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=''; SET @@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 un servidor del servidor flexible de Azure Database for MySQL, el usuario final proporciona un inicio de sesión de administrador del servidor durante la operación. 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. Estos son 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. Puedes ejecutar la consulta siguiente si inicias sesión en el usuario del servidor flexible de Azure Database for MySQL:
select user from mysql.user;