При попытке сделать резервную копию всех баз данных MySQL с помощью mysqldump я получаю следующую ошибку:
Couldn't execute 'show events': Access denied for user 'user'@'localhost' to database 'performance_schema'
Это виртуальная база данных, поэтому вам нужно будет добавить опцию --skip-events
чтобы заставить его работать.
Два других ответа будут работай, но их логика и объяснение неверны.
Вы получаете ошибку не из-за база данных виртуальная, но из-за ошибки с запросом show events
:
SHOW EVENTS
в базе данных performance_schema вернул ошибку отказа в доступе, а не пустой результат
Ошибка исправлена в сервере MySQL 5.7.6. Просто обновите свой сервер, и вы больше не увидите эту ошибку.
А пока, если вы застряли на старых версиях сервера MySQL, не звоните show 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 {} \;
Если вы столкнулись с этой ошибкой в обычной базе данных, вам необходимо предоставить своему пользователю СОБЫТИЕ разрешение.
GRANT EVENT ON `database`.* TO 'user'@'localhost';