Hola Sebastián Pacheco
Al migrar una ** base de datos **MySQL 5.7 local a Azure Database for MySQL – Flexible Server, los objetos que contienen valores codificados DEFINER en forma rígida (por ejemploroot@192.168.x.x) no son compatibles tal cual. Azure MySQL es un servicio gestionado que no proporciona ni un root usuario ni SUPER, y tales definidores causarán fallos en la importación de esquemas o errores en la creación de objetos en el servidor objetivo.
El método correcto y compatible es corregir el DEFINER en el volcado del esquema y luego importarlo a Azure. No necesitas reimportar los objetos modificados a la base de datos de origen.
Paso 1: Volcar objetos del esquema (rutinas, disparadores, eventos)
mysqldump -u root -p mi_bd \
--routines \
--triggers \
--events \
--no-data \
--single-transaction \
--set-gtid-purged=OFF \
--no-tablespaces \
> mi_bd_schema.sql
Referencia: https://learn.microsoft.com/en-us/azure/mysql/flexible-server/concepts-migrate-dump-restore
Paso 2: Eliminar o reemplazar DEFINER en el archivo de volcado:
Debes asegurarte de que no quede ningún DEFINER no soportado en el archivo de esquema. Dos opciones compatibles son:
Opción A (recomendada): Reemplazar por CURRENT_USER
sed -E 's/DEFINER=`[^`]+`@`[^`]+`/DEFINER=CURRENT_USER/g' \
mi_bd_schema.sql > mi_bd_schema_fixed.sql
Opción B: Eliminar por completo la cláusula DEFINER:
sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g' mi_bd_schema.sql
Si DEFINER se omite, MySQL asigna automáticamente el definidor al usuario que ejecuta la importación. Este comportamiento es el predeterminado de MySQL y se utiliza para migraciones entre entornos.
Paso 3: Importar el esquema en Azure MySQL Flexible Server
mysql -h <server>.mysql.database.azure.com \
-u <admin_user> -p \
mi_bd < mi_bd_schema_fixed.sql
El DEFINER se configurará como el usuario administrador de Azure MySQL (o el usuario que realice la importación).
Resultado típico:
DEFINER=`admin_user`@`%`
Azure MySQL Flexible Server no soporta el privilegio SUPER. Al importar rutinas o disparadores, puede que reciba: ERROR 1419: No tienes el privilegio SUPER y el registro binario está activado
Debes activar el siguiente parámetro del servidor en el Flexible Server:
log_bin_trust_function_creators = ON
Este parámetro se puede configurar a través de:
- Azure Portal → Flexible Server → Server Parameters
- Or Azure CLI
Azure Database Migration Service (DMS):
- Migra datos con éxito de MySQL local a Flexible Server
- No resuelve automáticamente valores DEFINER inválidos
- La documentación de Microsoft sigue esperando que los objetos de esquema sean compatibles con las reglas de la plataforma objetivo, incluidas las limitaciones de usuario/privilegio.
Referencia: https://learn.microsoft.com/en-us/azure/dms/tutorial-mysql-azure-external-to-flex-online-portal
Por lo tanto, es necesario fijar cláusulas DEFINER independientemente de si se usa DMS.
Por favor, háganos saber si la solución proporcionada le ha funcionado.
Si necesitas más ayuda, no dudes en contactarme.
Gracias,
Suchitra.