仅转储MySQL中的存储过程


31

我只需要转储存储过程:无数据,无表创建。如何使用mysqldump做到这一点?


1
这个问题+1,因为数据库世界中有很多开发人员喜欢在MySQL外的版本控制软件中对存储过程进行编目,而我愿意这样做(我自己不是这样做的爱好者)
RolandoMySQLDBA

就我而言,此命令给我一个错误,mysqldump: Got error: 23: "Out of resources when opening file"--single-transaction可以选择解决此错误。并且,如果您只想要例程,则可以添加- -no-create-info避免创建表语句。
bedomon 2014年

Answers:


34

这应该为您做:

mysqldump -h... -u... -p... -n -d -t --routines --triggers --all-databases > MySQLStoredProc.sql

  -n, --no-create-db     Suppress the CREATE DATABASE ... IF EXISTS statement 
                         that normally is output for each dumped database if
                         --all-databases or --databases is given.
  -d, --no-data          No row information.
  --triggers             Dump triggers for each dumped table.
                         (Defaults to on; use --skip-triggers to disable.)
  -R, --routines         Dump stored routines (functions and procedures).
  -t, --no-create-info   Do not write CREATE TABLE statements that create each 
                         dumped table.

警告

最好不要将存储过程与数据库分开,以便将特定的存储过程创建在原本打算使用的数据库中。触发器也是如此。这将是更可取的:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql

9
我尝试了这一点,不得不添加'-t'选项以不获取创建表语句。
德里克·唐尼

忘了一个,太糟糕了,我不能发表评论。我更新了第一个mysqldump命令以包括它。应该忽略第二个,以便将每个触发器与其基表相关联。再次感谢@DTest !!!
RolandoMySQLDBA 2011年

没问题。就我而言,我只是想为特定数据库存储函数/过程,而不是触发器。所以效果很好
Derek Downey
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.