Backing up All Databases in MySQL without the Warnings
Backing up MySQL used to be quick, easy and silent using mysqldump
, but more recent versions of MySQL produce the following nagging warning:
mysqldump -u root -p --all-databases --single-transaction > bak.sql
Enter password:
-- Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.
If you'd like to restore mysqldump
to its normally quiet operation you have two options. On option is to add -E
or --events
to your command so that the event table is not skipped. Or tell mysqldump
to ignore the table:
mysqldump -u root -p --all-databases --single-transaction --ignore-table=mysql.event > bak.sql
Enter password:
The events table is a non-standard table added in MySQL 5.1.6 and allows "cron-like" support inside of MySQL. If you're not taking advantage of this feature then it's safe to ignore. I perform my backups as a nightly cronjob using the following script:
#!/bin/bash
PATH=/usr/bin:/bin
USER=backup
PASS=#YOUR PASSWORD#
BASE=/root/db-backup
FILE=db-backup
mv $BASE/$FILE.8.gz $BASE/$FILE.9.gz
mv $BASE/$FILE.7.gz $BASE/$FILE.8.gz
mv $BASE/$FILE.6.gz $BASE/$FILE.7.gz
mv $BASE/$FILE.5.gz $BASE/$FILE.6.gz
mv $BASE/$FILE.4.gz $BASE/$FILE.5.gz
mv $BASE/$FILE.3.gz $BASE/$FILE.4.gz
mv $BASE/$FILE.2.gz $BASE/$FILE.3.gz
mv $BASE/$FILE.1.gz $BASE/$FILE.2.gz
mv $BASE/$FILE.0.gz $BASE/$FILE.1.gz
mysqldump -u $USER --password=$PASS --all-databases --single-transaction --ignore-table=mysql.event | gzip --best -c > $BASE/$FILE.0.gz
I also use a dedicated backup user account in MySQL that only has permissions to read information out of my databases. Check out "Create a MySQL User for Backups" for the commands to create this user.