En esta guía te mostramos cómo importar tu base de datos MySQL con STORED PROCEDURES (procedimientos almacenados) o también llamados "SPs" o "FUNCTIONS" en tu cuenta de hosting cPanel.
UPDATE: Ahora puedes hacer todos los pasos de esta guía mediante una simple herramienta dentro de tu panel de control de hosting, utilizando MySQL Toolbox: Cómo importar una base de datos MySQL con MySQL Toolbox en cPanel
Paso 1: Corregir el "Definer" de tus Stored Procedures
Para importar tu base de datos con SPs deberás editar tu archivo de backup (sql) para asegurarte que el "definer" sea el usuario correcto. Luego deberás asegurarte que ingresarás a tu base de datos con el usuario de MySQL correcto, quien quedará como "definer" de los SPs de tu base de datos.
Las sentencias de creación de los Stored Procedures en un archivo SQL a importar especifican un usuario, que será el usuario que podrá ejecutarlos luego, por lo que antes de importar tu base deberás asignar el usuario correcto de "Definer" para que luego puedas acceder a ellos.
Para ello debes editar tu archivo SQL con un editor de texto antes de importarlo en MySQL. Para este ejemplo, usaremos Notepad++ ya que soporta Regex para reemplazar cadenas de texto.
- Abre tu editor de texto Notepad++.
- Abre ahora el archivo SQL (descomprimido, en texto plano).
- Ve a la función Reemplazar.
- Completa el reemplazar origen "Find what" y destino "Replace with" de esta manera:
- Buscar: DEFINER=`[^`]+`@`[^`]+`
- Reemplazar por: DEFINER=CURRENT_USER
Si estás usando Notepad++ selecciona Regular expression como modo de búsqueda.
Esto cambiará cualquier nombre de usuario "Definer" por "CURRENT_USER" que es una constante.
- Haz clic en Replace all o Reemplazar todo.
- Guarda el archivo.
Paso 2: Importar tu base de datos con Stored Procedures
Hay diferentes formas de importar tu base de datos con SPs. A continuación te describimos los más utilizados.
Importar tu base de datos con SPs vía PHPMyAdmin
Por defecto, el phpMyAdmin que tiene cPanel utiliza un usuario temporal y descartable para acceder a administrar las bases de datos de tu hosting y es por ello que su bien tus SPs funcionarán en esa sesión abierta, luego no podrás editarlos a futuro.
Pero hay un truco! Si accedes a tu cPanel haciendo login manualmente (sin ingresar desde tu cuenta WNPower) tu phpMyAdmin utilizará el usuario raíz de tu cuenta y de esa manera te asegurarás que siempre podrás ingresar a editar y ejecutar tus SPs desde phpMyAdmin.
Importar tu base de datos con SPs vía Terminal
Es importante que en este caso utilices la terminal de tu cuenta de hosting para importar tu base de datos, dado que deberás ingresar a MySQL con el usuario creado previamente para tu base de datos.
Aquí te explicamos paso a paso cómo Importar base de datos por consola SSH
También hemos publicado una herramienta para hacerlo más cómodamente por consola: MigrateMySQL. Esta herramienta se encarga de hacer la corrección del "definer" y de importar tu base de datos con Stored Procedures utilizando el usuario MySQL que le indiques al momento de ejecutarla.
Importar tu base de datos con SPs utilizando una instalación de PHPMyAdmin personalizada
Por último, si deseas utilizar PHPMyAdmin de manera personalizada, puedes optar por instalar una versión propia de PHPMyAdmin dentro de tu cuenta y así asegurarte que siempre accederá a tu base de datos con el usuario de MySQL que le indiques en su configuración.
Aquí te explicamos paso a paso cómo realizarlo: Instalar y configurar PHPMyAdmin personalizado en tu hosting
Error al querer editar tus SPs: "Acceso negado. Usted necesita el privilegio SUPER para esta operación"
Si has importado tu base de datos con Stored Procedures sin haber corregido el Definer o sin haber controlado el usuario de MySQL que utilizaste para realizar la importación (como se explica en esta guía), es probable que recibas este error al momento de querer editar posteriormente los Stored Procedures:
error: #1227 - Acceso negado. Usted necesita el privilegio SUPER para esta operación.
Operation failed: There was an error while applying the SQL script to the database.
ERROR 1227: Access denied; you need (at least one of) the SUPER privilege(s) for this operation.
Este error ocurre si el "Definer" que especificaste en tus Stored Procedures (en el archivo SQL a importar) no coincide con el usuario que estás utilizando para ingresar a MySQL para importar la base de datos.
Recuerda que el DEFINER tiene que ser el mismo nombre de usuario que estás utilizando para importar tu base de datos SQL en MySQL, como se explica en esta guía.
Lamentablemente si ya lo hiciste, deberás exportar tu base de datos y repetir su importación siguiendo las recomendaciones de esta guía para poder hacer uso correcto de los Stored Procedures.
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.