devolver - procedimiento almacenado para mostrar datos mysql
Cambiar el definidor de procedimiento almacenado (5)
Exportar todos los procedimientos de la base de datos <DB>
:
mysqldump --single-transaction --no-data --no-create-info --routines /
--skip-triggers <DB> >routines.sql
Edite routines.sql
y recíclelos:
cat routines.sql | mysql <DB>
Especifique los conmutadores -u
y -p
si es necesario.
Tengo alrededor de un centenar de rutinas almacenadas en mi base de datos MySQL con la mayoría de ellas tienen ''root'' como definidor.
Tengo otra cuenta de mysql llamada ''abc'', cómo cambiar el definidor de todas las rutinas a ''abc''.
¿Es posible hacer lo mismo si tengo acceso al servidor MySQL solo como usuario ''abc'' y no como ''raíz''?
Para ver a los definidores:
show procedure status;
Puedes cambiarlos así:
UPDATE `mysql`.`proc` p SET definer = ''YournewDefiner'' WHERE definer=''OldDefinerShownBefore''
Por ejemplo:
UPDATE `mysql`.`proc` p SET definer = ''user@%'' WHERE definer=''root@%''
Tenga cuidado, porque esto cambiará todos los definidores para todas las bases de datos.
Por lo que sé: tendrías que obtener el texto del script de todos ellos y soltarlos / recrearlos como abc. No podría hacer esto como abc a menos que abc tenga permiso para abandonar / crear procedimientos.
Puede actualizar el definidor en la tabla mysql.proc con la tabla / db requerida ...
update mysql.proc set definer=''root@localhost'' where name=''t_p'';
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
Your Sql Statement;
end//
delimiter ;