XtraBackup est un des outils de Percona qui permet de sauvegarder ses bases de données MySQL en format binaire, tout en aillant de la persistance grâce aux bin logs. Cela permet d’éviter de faire un read lock des tables durant un mysqldump. Sur une petite base de données, cela ne prend que quelques secondes, mais sur une base de données d’une vingtaine de giga binaire, ça prend une dizaine de minutes, qui n’est pas toujours permis. Si vous ne connaissez pas encore Xtrabackup, je vous invite à lire la documentation officiel.

Le problème de XtraBackup est sa taille du backup… En effet le backup prend autant de place que les données binaires originales. Si les tables ne sont pas optimisées, le backup ne le sera pas non plus. Il existe bien une option pour optimiser les indexes pour en réduire la taille, mais elle ne sert pas à grand chose et multiplie le temps de backup par 5 dans mon cas, passant de 9 minutes à 47 minutes, ce qui est trop long pour moi.

Le gros avantage de Xtrabackup se voit lors de la restauration DRS, elle ne prend que le temps de la copie du backup, un démarrage du service MySQL et rien de plus!

Un exemple de différence de taille sur une base de données (optimisées) de 23Go : Xtrabackup 23Go et le dump 7,1Go. Le nombre de champs indexés y est aussi pour une grande partie. Il faut donc compresser ses XtraBackup, sauf pour ceux qui ont des centaines de tera de disponibles 🙂

Benchmark de compression XtraBackup

 

Dans ce benchmark, j’ai pris une base de données composée de tables InnoDB, qui sont toutes optimisées (en gros issu d’un dump injecté sur un MySQL de test). La base de données fait 23Go brut au format binaire.

Les algorithmes de compression que j’ai regardés sont gzip et xz (en mode simple et en compression parallèle avec respectivement pigz et pixz). J’ai volontairement exclus bz2 car il représente déjà un mauvais ratio de compression/temps suite à la lecture d’un article anglophone dont j’ai perdu le lien…

Ces deux paquets ne sont pas natifs, il faudra les ajouter à votre distribution.

Le but ici n’est pas de rechercher la compression absolue, mais de trouver un bon compromis entre ces 3 points :

  • La taille
  • Le temps de compression
  • Les ressources utilisées (nombre de processeurs)

Tableau de benchmark

Algorithme Proc Compression Décompression remarque
Niveau Taille Ratio Temps (min) Vitesse Temps Vitesse
(Mo) (Mo/s) (min) (Mo/s)
gz 1 3 4353 18,92% 11,37 33,73 5,35 71,66
5 3807 16,55% 13,07 29,34 5,28 72,56
7 3746 16,29% 23,95 16,01 5,32 72,11
pigz 2 3 4285 18,63% 7,02 54,64 5,48 69,91
5 3772 16,40% 7,37 52,04 5,5 69,70
6 3740 16,26% 10,40 36,86 5,55 69,08
7 3713 16,14% 12,22 31,38 5,43 70,56 Plus de gain de taille après compression 7
3 3 4285 18,63% 5,75 66,67 5,23 73,25
5 3772 16,40% 6,00 63,89 5,35 71,66 meilleur ratio compression/ressource
7 3713 16,14% 9,10 42,13 5,2 73,72
4 3 4285 18,63% 5,23 73,25 5,37 71,43
5 3772 16,40% 5,37 71,43 5,42 70,78 meilleur ratio compression/temps gz
7 3713 16,14% 7,82 49,04 5,35 71,66
xz 1 1 1944 8,45% 24,90 15,40 6,57 58,38
3 1827 7,94% 39,13 9,80 6,13 62,51
pixz 2 1 2019 8,78% 12,28 31,21 6,42 59,75
3 1865 8,11% 21,45 17,87 6 63,89
3 1 2019 8,78% 8,73 43,90 7,05 54,38
3 1865 8,11% 14,97 25,61 6,35 60,37
4 1 2019 8,78% 8,22 46,66 6,47 59,28
3 1865 8,11% 10,60 36,17 5,88 65,16 meilleure compression/ressource
4 1895 8,24% 25,73 14,90 6,30 60,85 taille supérieur du à l’overhead // gain
5 1553 6,75% 46,90 8,17 6,37 60,21 meilleur compression mais trop de temps
5 1 2019 8,78% 7,55 50,78 6,58 58,23
3 1865 8,11% 8,92 42,99 6,07 63,19 meilleure compression meilleur temps
6 1 2019 8,78% 6,05 63,37 6,3 60,85
3 1865 8,11% 9,28 41,30 6,10 62,85

 

Résultat XtraBackup

Dans mon cas, le meilleur taux de compression dans un temps raisonnable se fait avec pixz en niveau 3 de compression avec 5 processus en parallèle.

Vous devrez donc utiliser cette commande après avoir fait votre sauvegarde XtraBackup :

tar -c VotreRepertoireXtraBackup | pixz -3 -p 5 > backup.tar.xz

Pour restaurer, il faut décompresser simplement avec tar, mais en utilisant l’option J majuscule pour la compression xz :

tar -xJf backup.tar.xz

A vos scripts !