mysqldump --compact --no-create-info --where="db='yourdatabasename' AND type='PROCEDURE' AND name IN ('yoursp1', 'yoursp2')" --databases mysql --tables proc
@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
)
6条答案
按热度按时间ujv3wf0j1#
另一种方法是如下所示。但是,请注意,您必须在目标数据库中拥有root权限才能将行导入mysql.proc:
bkkx9g8r2#
回答你的问题:不是。
但这可能会给予你你想要的。
看看
SHOW CREATE PROCEDURE
和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
这些命令允许您一次转储一个例程的代码。
zzoitvuj3#
可以使用Ike步行者提到的命令转储单个函数或过程,但是
SHOW CREATE PROCEDURE
和SHOW CREATE FUNCTION
命令不允许仅从输出中选择几列。下面是一个Windows批处理命令行的示例,使用系统表
mysql.proc
转储单个过程:这将把mysql的输出重定向到文件myprocedure.sql中。
--batch
选项告诉mysql客户端从输出中删除表边框。--skip-column-names
选项从输出中删除列标题。--raw
选项告诉MySQL不要转义输出中的特殊字符,保持新行不变,而不是用\n
替换它们。如果你想把所有的程序都转储到不同的文件中,这个例子在批处理中应该可以工作:
dump-procedures.bat
它分两步工作,首先将所有过程的列表转储到文件procedures.csv中,然后在每行中迭代,并使用过程的名称将每个过程转储到不同的文件中。
在本例中,我还使用了选项**--defaults-extra-file**,其中一些配置参数设置在不同的文件中,并且允许调用命令,而无需每次键入密码或将密码写入批处理本身。
myconfig.cnf
此解决方案也适用于函数,将routine_type变量定义为:
v6ylcynt4#
我已经在bash中编写了解决方案。
就为了一个手术
适用于所有手术
58wvjzkj5#
为什么这么复杂?
这(在我看来)是导出一个过程的创建代码的最简单和最快的方法
如果你想用一个真实的的换行符来替换\n,只需要使用sed
0mkxixxg6#
这是诡计
1.创建数据库到本地。
1.转储你数据库包括你的STORE PROCEDURE到本地。或者只是使用mysql*yog和复制数据库,检查STORE PROCEDURE(例如:1存储过程)到本地服务器。
1.转储你数据库本地。2是的,你有一个存储过程在你的转储。3记住使用--例程如果你只想要sp/事件。
恶作剧是有趣的,不是懒惰,只是被耍了。