Xtrabackup : Optimiser ses backups MySQL

From Deimos.fr / Bloc Notes Informatique
Jump to: navigation, search
XtraBackup

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 :

Command gpg
apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

Créez ce fichier pour ajouter le repository :

Configuration File /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 :

Command 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 :

Configuration File /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 :

Command 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 :

Command innobackupex
innobackupex --apply-log --user=xxxxx --password=xxxx --databases=nom_de_la_base repertoire_ou_stocker_le_backup

Notes 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 :

Command 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 :

Command 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

Command mv
mv /var/lib/mysql/dossier_de_la_base{,.old}

3. Lancer cette commande pour restaurer (argument copy-back) :

Command 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 :

Command 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 :

Command 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 :

Command innobackupex
 innobackupex-1.5.1 --apply-log répertoire_du_full_backup [--use-memory=1G]  --user=root --password=xxxxx

4. Restaurer le backup final :

Command
 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 :

Command
mkdir /tmp/backups/
nc -l -p 8080 | tar xfi - -C /tmp/backups/

On the master :

Command
innobackupex --stream=tar /tmp/ --slave-info | nc sql-slave 8080

Apply the logs on the slave:

Command
innobackupex --apply-log --ibbackup=xtrabackup /tmp/backups/