如何使用触发器和过程导出MySQL数据库?


82

如何创建.sql带有所有触发器和过程的MySQL数据库转储(文件)?


只需在mysqldump命令中添加-R选项。
Deepanshu Jain

Answers:


121

mysqldump通过将备份默认情况下所有的触发器,但不是存储过程/函数。有2个mysqldump参数控制此行为:

  • --routines –默认为FALSE
  • --triggers –默认为TRUE

所以在mysqldump命令中,添加--routines如下:

mysqldump <other mysqldump options> --routines > outputfile.sql

请参阅有关mysqldump参数MySQL文档


我有MySQL“ 5.1.48-community”,我运行了“ mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;” 但是它给出了错误,错误是“ ERROR 1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本相对应的手册,以在'mysql dump --routines --no附近使用正确的语法-create-info --no-data --no-create-db --skip-opt> dum'在第1行”。怎么解决呢?-
Yugal

将命令添加到“ -p -uusername dbname”中,而无需使用“;”。签到最后
Haim Evgi 2011年

1
还要记住,您应该在shell提示符下运行mysqldump,而不是在MySQL命令行客户端或phpMyAdmin或其他查询工具中运行。
比尔·卡温

@HaimEvgi,为什么要-routines代替--routines
Pacerier,2015年

--routines但是仅在用户对mysql.proc表具有足够的访问权限时有效。GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
罗基

20

对于MYSQL的专业用户来说,这可能是显而易见的,但是我在试图弄清楚默认值不会导出函数时浪费了一些时间。因此,我想在这里提到,必须将--routines param设置为true才能使其起作用。

mysqldump --routines=true -u <user> my_database > my_database.sql

1
您不需要使用--routines = true。默认情况下,不转储Sproc。您只需要按照示例在接受的答案中包括--routines。
gview

6

我创建了以下脚本,它对我来说很好。

#! /bin/sh
cd $(dirname $0)
DB=$1
DBUSER=$2
DBPASSWD=$3
FILE=$DB-$(date +%F).sql
mysqldump --routines "--user=${DBUSER}"  --password=$DBPASSWD $DB > $PWD/$FILE
gzip $FILE
echo Created $PWD/$FILE*

然后使用命令行参数调用脚本。

backupdb.sh my_db dev_user dev_password

嗨,在第7行上,为什么变量DBUSER不在“”和“ othert”之间?
rafaelphp '16
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.