导出带有触发器和存储过程的MySQL数据库?

104
如何创建一个包含所有触发器和存储过程的MySQL数据库备份(.sql文件)?

2
只需在mysqldump命令中添加-R选项。 - Deepanshu Jain
Deepanshu是正确的!-R选项与--routines=true --triggers=true执行相同的操作。 - Nandostyle
5个回答

168

mysqldump默认会备份所有触发器(triggers),但不会备份存储过程和函数(stored procedures/functions)。有两个mysqldump参数控制此行为:

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

因此在mysqldump命令中加入--routines参数,例如:

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

请参阅MySQL文档中有关mysqldump参数的内容


在命令中添加 " -p -u用户名 数据库名 " ,你不需要在结尾处加上 ";" 符号。 - Haim Evgi
1
请记住,您应该在 shell 提示符下运行 mysqldump,而不是在 MySQL 命令行客户端、phpMyAdmin 或其他查询工具中运行。 - Bill Karwin
@HaimEvgi,为什么你说-routines而不是--routines - Pacerier
1
--routines only works however if the user has sufficient access rights to mysql.proc table. GRANT SELECT ON mysql.proc TO '<user>'@'localhost'; - Rocki
@HaimEvgi 在导入时我们需要使用 --routines 吗? - Prakhar Parikh
显示剩余3条评论

26

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

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

1
您不需要使用--routines=true。存储过程默认不会被转储。您只需要按照已接受答案中的示例包含--routines即可。 - gview
--routines=true 和 --routines 是一样的。 - Nandostyle

9

我已经创建了以下脚本,并且它对我非常有效。

#! /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被放在""之间而其他变量没有? - rafaelphp
@rafaelphp,我猜这只是一个偶然的打字错误。理想情况下最好用双引号将值括起来以避免某些字符成为值的一部分。但并没有硬性规定。 - itsraghz
我会为了保险起见在它们周围添加引号。 - Krishna Vedula

1
我们可以使用-R代替--routine标志。
mysqldump -u mysqluser -R databasename > /tmp/databasename.sql

0
例如,使用默认情况下隐式使用的-R(--routines)--triggers,您可以将apple数据库的表的模式和数据以及其routines (procedures and functions)triggers导出到backup.sql,如下所示。*无法仅导出存储过程或函数,而--skip-triggers可以排除默认情况下包含的触发器,并且我的回答解释了如何完美地导出数据库:
mysqldump -u john -p -R apple > backup.sql

或者:

mysqldump -u john -p --routines apple > backup.sql

或者,你可以明确地使用下面所示的--triggers参数:
                        ↓↓ Here ↓↓
mysqldump -u john -p -R --triggers apple > backup.sql

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接