The MySQL documentation (http://dev.mysql.com/doc/refman/5.6/en/backup-types.html) has a very nice summary of what physical and logical backups are for. Physical backups consist of copies of the actual database files themselves, which makes this method fast but not very portable, but it is still recommended for your important databases. Today we’ll be doing physical backups using Percona Xtrabackup.
Installation
You can install Percona Xtrabackup from here:
https://www.percona.com/doc/percona-xtrabackup/2.4/installation/apt_repo.html
We’ll be using a test database for this which has a lot of random float values in it.
Backing Up
To back up your existing MySQL data, run the following command:
innobackupex --defaults-file=/etc/mysql/my.cnf --user=root --databases="test mysql" BACKUP_DIR
The command will take all your database files from the MySQL data directory to BACKUP_DIR
. Note that the command might create a time stamped directory inside the target directory. You can check the directory for the database files.
Restoring
Now let’s try restoring the backup we just made. First we’ll have to delete the database files (I hope you’re not doing this on production!). Like so:
service mysql stop
rm -rf /var/lib/mysql/*
Before we can restore the backup, we need to prepare it:
innobackupex --apply-log BACKUP_DIR
And then:
cp -r BACKUP_DIR/* /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql
service mysql start
And that’s it! Everything should have gone fine, and your previous database should be there now.
Note that you’ll also have to back up the default mysql
database or it will complain about users and plugins table missing, among other things.