XtraBackup

By | 22 juin 2013

XtraBackup
XTRABACKUP (XB) est un outil maintenu par Percona, il permet d’effectuer des backups à chaud (sans arrêt du serveur) sur une base de données MySQL contenant des tables InnoDB, MyISAM et XtraDB.

Installation

Par manque de temps (par feignantise), je vais uniquement vous présenter l’installation sur une debian, pour les autres => Installation via yum

Ajout de la clé apt:

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

Ajout des dépôts dans /etc/apt/sources.list. Remplacer VERSION par le nom de votre distribution. Référez vous aux autres dépôts déjà existant dans le fichier sources.list.

$ echo deb http://repo.percona.com/apt VERSION main >> /etc/apt/sources.list
$ echo deb-src http://repo.percona.com/apt VERSION main >> /etc/apt/sources.list

Mise à jour du cache local des paquets et installation de XtraDB:

$ apt-get update
$ apt-get install xtrabackup

Pré-requis

1. XB doit être exécuté depuis un utilisateur unix ayant les droits en lecture, écriture et exécution sur le dossier de données MySQL (datadir).

2. Un utilisateur MySQL sera aussi nécessaire afin d’effectuer les backups:

mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ‘backup’@'localhost' IDENTIFIED BY ‘backup_password’;
mysql> FLUSH PRIVILEGES;

Backup

Pour effectuer un backup rien de plus simple que la commande suivante:

$ mkdir /root/backup/
$ innobackupex --user="backup" --password="backup_password" /root/backup/

Par défaut, XB créera un dossier avec la date et heure courante contenant le backup dans le dossier spécifié (/root/backup). Si vous souhaitez utiliser un nom de dossier personnalisé, il faut utiliser l’option –no-timestamp

$ mkdir /root/backup/
$ innobackupex --user="backup" --password="backup_password" --no-timestamp /root/backup/my_backup

Depuis un slave l’option –safe-slave-backup est recommandée. Il arrête la réplication le temps du backup (le SQL_THREAD pour être exact).

$ innobackupex --user="backup" --password="backup_password" --safe-slave-backup /root/backup/

XB permet de faire des backups dit compact (option –compact), c’est à dire sans récupération des index secondaire. L’avantage est le gain en espace disque, par contre la préparation du backup est nettement plus longue car elle nécessite la reconstruction des index, j’aurai même tendance à la déconseiller.

$ innobackupex --user="backup" --password="backup_password" --compact /root/backup/

Préparation

Une fois le backup effectué il faudra avant une restauration préparer le backup. Cette préparation consiste à finir les transactions en cours. L’option –use-memory correspond à l’utilisation de mémoire autorisée par le script.

$ innobackupex --apply-log --use-memory=1G /root/backup/mon_backup/

Pour les backups compact l’option –rebuild-indexes sera requise.

Restauration

La restauration nécessite l’arrêt du serveur MySQL. Avant le redémarrage de votre serveur pensez à remettre votre utilisateur MySQL en tant que propriétaire du datadir.

$ /etc/init.d/mysql stop
$ mv /var/lib/mysql{,_}
$ mkdir /var/lib/mysql
$ innobackupex --copy-back /root/backup/mon_backup/
$ chown -R mysql:mysql /var/lib/mysql
$ /etc/init.d/mysql start

Restaurer un slave depuis un backup du master

Commencer par copier le backup préparé du master vers le slave via un scp ou un rsync. Il suffit ensuite de restaurer le backup avec la procédure précédemment présentée, avec pour seule différence la configuration du slave.

# copie du backup vers le slave
master$ scp -r /root/backup/mon_backup/ slave:/tmp

# restauration du backup
slave$ mv /var/lib/mysql{,_}
slave$ innobackupex --copy-back /root/backup/mon_backup/
slave$ chown -R mysql:mysql /var/lib/mysql

# Configuration du slave
slave$ cat /var/lib/mysql/xtrabackup_binlog_info
master-bin.000001     481
slave|mysql> CHANGE MASTER TO
MASTER_HOST='$masterip',
MASTER_USER='repl',
MASTER_PASSWORD='$slavepass',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=481;
slave|mysql> START SLAVE;

# vérifier que le slave soit bien démarré
slave|mysql> SHOW SLAVE STATUS \G
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…

Pour les utilisateurs debian pensez à recréer l’utilisateur système contenu dans le fichier /etc/mysql/debian.cnf.

Fonctionnalités avancées

Je n’ai présenté dans cet article que les principales fonctionnalités de XtraBackup, mais sachez qu’il est possible d’effectuer des backup incrémental, des backup partiel et des backup crypté.

Liens

Cette semaine a eu lieu le premier DBHangops français, organisé par Cédric Peintre. Le sujet était les backups, le live est disponible à cette adresse http://www.mysqlplus.fr/2013/06/20/dbhangopsfr-live/.

La documentation officielle de XtraBackup http://www.percona.com/doc/percona-xtrabackup

Guillaume Dievart

Leader technique chez BoostMyShop
Passionné par le développement web, et plus particulièrement par le langage PHP et les systèmes de gestion de données SQL / NoSQL.

Les derniers articles par Guillaume Dievart (tout voir)

3 thoughts on “XtraBackup

  1. tybodoudou

    Je ne connaissais pas cet outils, même si je n’en ai pas forcément l’utilité immédiate, ça peut toujours servir!

    Merci pour la découverte!

    Reply
  2. Pingback: Can’t find file: ‘./mysql/plugin.frm’ - Guillaume Dievart – Développeur PHP

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *