2010-04-27 56 views
2

mysqldump选项--tab=path将每个表的创建脚本写入单独的文件中。但我找不到存储过程,除了在屏幕转储。如何编写存储过程以使用mysqldump分隔文件?

我需要将存储过程也放在单独的文件中。

我正在处理的当前解决方案是以编程方式分割屏幕转储。有更简单的方法吗?

我使用至今的代码是:

#save all routines to a single file 
mysqldump -p$PASSWORD --routines --skip-dump-date --no-create-info --no-data --skip-opt $DATABASE > $BACKUP_PATH/$DATABASE.sql 
#save each table to its file 
mysqldump -p$PASSWORD --tab=$BACKUP_PATH --skip-dump-date --no-data --skip-opt $DATABASE 

即使我添加--routines到第二个命令,他们不会得到他们自己的文件。

+0

什么是您完整的mysqldump命令?你还记得' - 例程'吗? – dnagirl 2010-04-27 13:02:20

+0

@dnagirl是的,我用过它 – 2010-04-27 13:40:45

回答

0

mysqldump命令不支持将存储过程转储到单个文件中。

但是,可以使用mysql命令执行此操作。

mysql --skip-column-names --raw mydatabase -e "SELECT CONCAT('CREATE PROCEDURE `', specific_name, '`(', param_list, ') AS ') AS `stmt`, body_utf8 FROM `mysql`.`proc` WHERE `db` = 'mydatabase' AND specific_name = 'myprocedure';" 1> myprocedure.sql 

有关更完整的示例,请使用Windows批处理,查看有关另一个问题的答案。 MySQL - mysqldump --routines to only export 1 stored procedure (by name) and not every routine

1

我想答案是:这是不可能没有后期处理

-1

这会将表定义(没有SP)中FWIW:

mysqldump -u<username> -p<password> -T<destination-directory> --lock-tables=0 <database> 

一个障碍我碰到了,一定要放足够的权限。我只是做了chmod 777就可以了。

关于此问题的一个注意事项 - MySQL将写出.sql文件中的表结构以及.txt文件中的数据。我希望它会做到这一点,谢谢。

+0

这是干什么的?我不能在Windows上测试它,因为我得到这个错误:'mysqldump:出现错误:1:“执行''时无法创建/写入文件'C:\ test \ attributes.txt'(Errcode:13) SELECT INTO OUTFILE'',但如果它确实*做OP的要求,那么我会加载一个NIX。 – JohnB 2012-06-29 06:51:33

2

我创建了一个脚本来输出到一个单独的文件。

https://gist.github.com/temmings/c6599ff6a04738185596

例如:mysqldump ${DATABASE} --routines --no-create-info --no-data --no-create-db --compact | ./seperate.pl

文件被输出到目录(下/)。

$ tree . └── out ├── FUNCTION.EXAMPLE_FUNCTION.sql └── PROCEDURE.EXAMPLE_PROCEDURE.sql

+0

perfecto,magicio! – Brain90 2018-01-03 06:07:38