如何创建一个包含所有触发器和存储过程的MySQL数据库备份(.sql文件)?
mysqldump
默认会备份所有触发器(triggers),但不会备份存储过程和函数(stored procedures/functions)。有两个mysqldump
参数控制此行为:
--routines
– 默认为 FALSE--triggers
– 默认为 TRUE因此在mysqldump
命令中加入--routines
参数,例如:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routines
而不是--routines
? - Pacerier--routines
only works however if the user has sufficient access rights to mysql.proc
table.
GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
- Rocki对于MYSQL的专家用户来说,这可能是显而易见的,但当我尝试弄清楚默认值不会导出函数时,我浪费了一些时间。因此,我想在这里提到--routines参数需要设置为true才能使其工作。
mysqldump --routines=true -u <user> my_database > my_database.sql
我已经创建了以下脚本,并且它对我非常有效。
#! /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
mysqldump -u mysqluser -R databasename > /tmp/databasename.sql
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