Saltar al contenido

MySQL – mysqldump –rutinas para exportar solo 1 procedimiento almacenado (por nombre) y no todas las rutinas

Esta pregunta se puede solucionar de variadas maneras, sin embargo te enseñamos la que para nosotros es la solución más completa.

Solución:

Otra forma de hacerlo sería la siguiente. Sin embargo, tenga en cuenta que debe tener privilegios de root en la base de datos de destino para importar filas en mysql.proc:

mysqldump --compact --no-create-info --where="db='yourdatabasename' AND type='PROCEDURE' AND name IN ('yoursp1', 'yoursp2')" --databases mysql --tables proc

Para responder a su pregunta exacta: no.

Pero esto probablemente te dará lo que quieres.

Echa un vistazo a SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION:

http://dev.mysql.com/doc/refman/5.0/en/show-create-procedure.html

http://dev.mysql.com/doc/refman/5.0/en/show-create-function.html

Esos comandos le permiten volcar el código de una rutina a la vez.

Es posible volcar una sola función o procedimiento usando el comando que mencionó Ike Walker, pero el SHOW CREATE PROCEDURE y SHOW CREATE FUNCTION Los comandos no permiten seleccionar solo unas pocas columnas de la salida.

Aquí hay un ejemplo de una línea de comando por lotes de Windows para volcar un solo procedimiento, usando la tabla del sistema mysql.proc:

mysql --defaults-extra-file=myconfig.cnf --skip-column-names --raw --batch mydatabase -e "SELECT CONCAT('DELIMITER $$nCREATE PROCEDURE `', specific_name, '`(', param_list, ') AS n', body_utf8, ' $$nDELIMITER ;n') AS `stmt` FROM `mysql`.`proc` WHERE `db` = 'mydatabase' AND specific_name = 'myprocedure';" 1> myprocedure.sql

Esto redirigirá la salida de mysql al archivo. miprocedimiento.sql.

Él --batch La opción le dice al cliente mysql que elimine los bordes de la tabla de la salida. Él --skip-column-names La opción elimina los encabezados de columna de la salida. Él --raw La opción le dice a MySQL que no escape los caracteres especiales en la salida, manteniendo las nuevas líneas como están en lugar de reemplazarlas con n.

Y si desea volcar TODOS los procedimientos en diferentes archivos, este ejemplo por lotes debería funcionar:

dump-procedures.bat

@echo off

REM set the target database
set database=mydatabase

REM set the connection configuration file
set auth=--defaults-extra-file=myconfig.cnf

REM set the routine type you want to dump
set routine_type=PROCEDURE

set list_file=%routine_type%S.csv

if "%routine_type%"=="PROCEDURE" (
set ending=AS 
)
if "%routine_type%"=="FUNCTION" (
set ending=RETURNS ', `returns`, '
)

echo Dumping %routine_type% list to %list_file%
mysql %auth% --skip-column-names --raw %database% -e "SELECT routine_name FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = DATABASE() AND ROUTINE_TYPE = '%routine_type%';" 1> %list_file%

for /f "tokens=*" %%a in (%list_file%) do (
    echo Dumping %routine_type% %%a
    mysql %auth% --skip-column-names --raw --batch %database% -e "SELECT CONCAT('DELIMITER $$nCREATE PROCEDURE `', specific_name, '`(', param_list, ') %ending% n', body_utf8, ' $$nDELIMITER ;n') AS `stmt` FROM `mysql`.`proc` WHERE `db` = '%database%' AND specific_name = '%%a';" 1> %%a.sql
)

Funciona en 2 pasos, donde primero vuelca la lista de todos los procedimientos en el archivo procedimientos.csvy luego itera en cada línea y usa los nombres de los procedimientos para volcar cada procedimiento en un archivo diferente.

En este ejemplo, también estoy usando la opción –defaults-archivo-extra, donde algunos parámetros de configuración se establecen en un archivo diferente y permite invocar el comando sin necesidad de escribir la contraseña cada vez o escribir la contraseña dentro del propio lote. He creado un archivo con este contenido.

miconfig.cnf

[client]
host=localhost
port=3306

user=myusername
password=mypassword

Esta solución también funciona con función, definiendo la variable tipo_rutina para:

set routine_type=FUNCTION

Si guardas alguna incertidumbre y capacidad de acrecentar nuestro ensayo puedes realizar un paráfrasis y con mucho placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *