Xtrabackup : Optimiser ses backups MySQL
Contents
Software version | 2.1.2-611.wheezy |
---|---|
Operating System | Debian 7 |
Website | XtraBackup Website |
Last Update | 27/12/2013 |
Others |
1 Introduction
Xtrabackup est une solution libre permettant d'optimiser vos backups MYSQL. Il est bien plus rapide que mysqldump puisqu'il joue avec les fichiers et non des requêtes SQL.
Nous allons voir ici comment l'utiliser. Il est important de savoir que là ou Xtrabackup est fort, c'est sur le moteur InnoDB.
2 Installation
Pour l'installer sur une Debian, c'est très simple, nous allons rajouter son repository :
gpg |
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A |
Créez ce fichier pour ajouter le repository :
/etc/apt/sources.list.d/percona.list |
deb http://repo.percona.com/apt VERSION main deb-src http://repo.percona.com/apt VERSION main |
On update et on installe :
aptitude |
aptitude update aptitude install xtrabackup |
3 Utilisation
Il peut être utile de mettre les identifiants dans un fichier si l'on souhaite sauvegarder localement :
/etc/mysql/conf.d/xtrabackup.cnf |
[xtrabackup] user=<user> password=<password> |
Vous pouvez utiliser aussi un fichier de type ~/.my.cnf.
3.1 Backup (full)
Pour faire un full backup :
innobackupex |
innobackupex --user=xxxxx --password=xxxx --databases=nom_de_la_base repertoire_ou_stocker_le_backup |
Le backup sera stocker dans un dossier portant le nom du timestamp de sa création (exemple : 2011-09-19_09-32-19).
Il est possible de rajouter l'option '--apply-log' qui va permettre de sauvegarder plus d'informations afin de restaurer simplement en copiant ce dossier dans /var/lib/mysql :
innobackupex |
innobackupex --apply-log --user=xxxxx --password=xxxx --databases=nom_de_la_base repertoire_ou_stocker_le_backup |
Notes |
Avec l'option --apply-log, il est impossible de faire des sauvegardes incrémentales avec XtraBackup |
3.2 Backup (incrémental)
Un backup full est nécessaire pour pouvoir faire un backup incrémentiel. Une fois celui-ci obtenu, utiliser cette commande pour générer un backup incrémentiel :
innobackupex |
innobackupex --incremental répertoire_ou_stocker_le_backup --incremental-basedir=repertoire_contenant_le_full --user=root --password=xxxxx |
Pour effectuer une restauration par rapport à un backup incrémentiel, il faut à nouveau plusieurs étapes :
3.3 Restauration
3.3.1 Depuis un backup Full
Pour la restauration depuis un backup full, l'opération se fait en trois parties :
1. Utilisez l'argument apply-log :
innobackupex |
innobackupex --apply-log répertoire_du_backup_full |
2. Déplacer la base de donnée existante pour éviter tout résidu indésirable
mv |
mv /var/lib/mysql/dossier_de_la_base{,.old} |
3. Lancer cette commande pour restaurer (argument copy-back) :
innobackupex |
innobackupex --ibbackup=xtrabackup --copy-back répertoire_du_backup_full |
3.3.2 Depuis un backup incrémental
Pour effectuer une restauration par rapport à un backup incrémentiel, il faut à nouveau plusieurs étapes :
1. Préparer le backup full : ici, le use-memory est optionnel, il permet juste d'accélérer le processus :
innobackupex |
innobackupex --apply-log --redo-only répertoire_du_full_backup [--use-memory=1G] --user=root --password=xxxxx |
2. Appliquer les backups incrémentiels, dans l'ordre :
innobackupex |
innobackupex --apply-log répertoire_du_full_backup --incremental-dir=répertoire_du_backup_incrémentiel [--use-memory=1G] --user=root --password=xxxxx |
3. Préparer le backup final :
innobackupex |
innobackupex-1.5.1 --apply-log répertoire_du_full_backup [--use-memory=1G] --user=root --password=xxxxx |
4. Restaurer le backup final :
mv /var/lib/mysql/dossier_de_la_base{,.old} innobackupex --ibbackup=xtrabackup --copy-back répertoire_du_backup_full |
3.4 Backup and restore from the slave
Here is a solution when you do not have enough space on the local master to store backups. Simply use Netcat to grab the backup directly from the slave :
mkdir /tmp/backups/ nc -l -p 8080 | tar xfi - -C /tmp/backups/ |
On the master :
innobackupex --stream=tar /tmp/ --slave-info | nc sql-slave 8080 |
Apply the logs on the slave:
innobackupex --apply-log --ibbackup=xtrabackup /tmp/backups/ |