无法在mysqldump上执行“显示事件”

在尝试使用mysqldump备份所有MySQL数据库时,出现以下错误:

Couldn't execute 'show events': Access denied for user 'user'@'localhost' to database 'performance_schema'

这是一个虚拟数据库,所以你需要添加选项--skip-events来使其工作。

'performance_schema'是一个虚拟的数据库,所以你不必备份它
(请参阅http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html

在备份脚本中跳过它就像这样使用它:

 #!/bin/sh BAK=/var/backups/mysql/ DATE=$(date +%Y-%m-%d) MYSQLPATH=/var/lib/mysql/ for i in /var/lib/mysql/*/; do if [ $i != "$MYSQLPATH"'performance_schema/' ] ; then dbname=`basename "$i"` mysqldump -u root "$dbname" | gzip > $BAK/"$dbname"-$DATE.sql.gz fi done # optionally delete old backups of databases that don't exist anymore # find $BACKUP_DIR -atime +30 -exec rm {} \; 

另外两个答案会起作用 ,但是他们的理由和解释是错误的。

你得到的错误不是由于数据库是虚拟的,而是由于查询show events的错误: 在这里输入图像说明

SHOW EVENTS数据库中的SHOW EVENTS返回了拒绝访问错误,而不是空的结果

这个bug已经在MySQL服务器5.7.6中修复了。 只需更新您的服务器,您将不会再看到这个错误。

同时,如果您遇到旧版本的MySQL服务器,请避免使用其他两个答案中提供的解决scheme来调用show events

如果您在普通数据库中遇到此错误,则需要授予用户EVENT权限 。