Comment créer des sauvegardes à chaud des bases de données MySQL avec Percona XtraBackup sur CentOS 7

introduction

Un problème très courant rencontré lors de l’utilisation de systèmes de base de données actifs consiste à effectuer des sauvegardes à chaud, c’est-à-dire à créer des sauvegardes sans arrêter le service de base de données ni le rendre en lecture seule. La simple copie des fichiers de données d’une base de données active entraîne souvent une copie de la base de données incohérente en interne, c’est-à-dire il ne sera pas utilisable ou il manquera des transactions survenues pendant la copie. D’autre part, l’arrêt de la base de données pour les sauvegardes planifiées rend les parties de votre application dépendantes de la base de données devenues indisponibles. Percona XtraBackup est un utilitaire open source qui peut être utilisé pour contourner ce problème et créer des sauvegardes cohérentes complètes ou incrémentielles des bases de données MySQL, MariaDB et Percona Server en cours d’exécution, également appelées sauvegardes à chaud.

Contrairement aux sauvegardes logiques générées par des utilitaires tels que mysqldump, XtraBackup crée des sauvegardes physiques des fichiers de la base de données. Il crée une copie des fichiers de données. Ensuite, il applique le journal des transactions (a.k.a. redo log) dans les sauvegardes physiques, pour renvoyer toutes les transactions actives qui ne se sont pas terminées pendant la création des sauvegardes, ce qui permet de créer des sauvegardes cohérentes d’une base de données en cours d’exécution. La sauvegarde de base de données résultante peut ensuite être sauvegardée sur un emplacement distant à l’aide de https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories-on- a-vps [rsync], un système de sauvegarde tel que Bacula, ou https: // www .digitalocean.com / communauté / tutoriels / comprehension-digitalocean-droplet-backups [sauvegardes DigitalOcean].

Ce tutoriel vous montrera comment effectuer une sauvegarde à chaud complète de vos bases de données MySQL ou MariaDB à l’aide de Percona XtraBackup sur CentOS 7. Le processus de restauration de la base de données à partir d’une sauvegarde est également couvert. La version Ubuntu de ce guide est disponible à l’adresse https://www.digitalocean.com/community/tutorials/how-to-create-hot-backups-of-mysql-databases-with-percona-xtrabackup-on-ubuntu-14 -04 [ici].

Conditions préalables

Pour suivre ce tutoriel, vous devez disposer des éléments suivants:

  • Privilèges de superutilisateur sur un système CentOS 7

  • Une base de données MySQL ou MariaDB en cours d’exécution

  • Accès à l’utilisateur administrateur (root) de votre base de données

De plus, pour effectuer une sauvegarde à chaud de votre base de données, votre système de base de données doit utiliser le moteur de stockage * InnoDB *. Cela est dû au fait que XtraBackup repose sur le journal des transactions géré par InnoDB. Si vos bases de données utilisent le moteur de stockage MyISAM, vous pouvez toujours utiliser XtraBackup, mais la base de données sera verrouillée pendant une courte période vers la fin de la sauvegarde.

Vérifier le moteur de stockage

Si vous ne savez pas quel moteur de stockage vos bases de données utilisent, vous pouvez le rechercher de différentes façons. Une solution consiste à utiliser la console MySQL pour sélectionner la base de données en question, puis générer le statut de chaque table.

Commencez par entrer dans la console MySQL:

mysql -u root -p

Ensuite, entrez votre mot de passe root MySQL.

À l’invite de MySQL, sélectionnez la base de données que vous souhaitez vérifier. Assurez-vous de remplacer votre propre nom de base de données ici:

USE ;

Puis imprimez ses statuts de table:

SHOW TABLE STATUS\G;

Le moteur doit être indiqué pour chaque ligne de la base de données:

Example Output:...
*************************** 11. row ***************************
          Name: wp_users
        Engine:
...

Une fois que vous avez terminé, quittez la console:

exit

Installons Percona XtraBackup.

Installer Percona XtraBackup

Le moyen le plus simple d’installer Percona XtraBackup est d’utiliser yum, car le référentiel de Percona fournit un RPM.

sudo yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

Ensuite, vous pouvez exécuter cette commande pour installer XtraBackup:

sudo yum install percona-xtrabackup

Acceptez les invites de confirmation pour terminer l’installation.

XtraBackup comprend principalement le programme XtraBackup et le script Perl + innobackupex +, que nous utiliserons pour créer nos sauvegardes de base de données.

Premiers préparatifs

Avant d’utiliser XtraBackup pour la première fois, nous devons préparer le système et les utilisateurs de MySQL utilisés par XtraBackup. Cette section couvre la préparation initiale.

Utilisateur système

Sauf si vous envisagez d’utiliser l’utilisateur racine du système, vous devez effectuer certaines préparations de base pour vous assurer que XtraBackup peut être exécuté correctement. Nous supposerons que vous êtes connecté en tant qu’utilisateur qui exécutera XtraBackup et qu’il dispose des privilèges de superutilisateur.

Ajoutez votre utilisateur système au groupe «mysql» (remplacez-le par votre nom d’utilisateur actuel):

sudo gpasswd -a  mysql

Pendant que nous y sommes, créons le répertoire qui sera utilisé pour stocker les sauvegardes créées par XtraBackup:

sudo mkdir -p /data/backups
sudo chown -R : /data

La commande + chown + garantit que l’utilisateur pourra écrire dans le répertoire des sauvegardes.

Utilisateur MySQL

XtraBackup nécessite un utilisateur MySQL qu’il utilisera lors de la création de sauvegardes. Créons-en un maintenant.

Entrez la console MySQL avec cette commande:

mysql -u root -p

Fournissez le mot de passe root MySQL.

À l’invite MySQL, créez un nouvel utilisateur MySQL et attribuez-lui un mot de passe. Dans cet exemple, l’utilisateur s’appelle «bkpuser» et le mot de passe est «bkppassword». Changez les deux en quelque chose de sécurisé:

CREATE USER ''@'localhost' IDENTIFIED BY '';

Ensuite, accordez au nouvel utilisateur MySQL les privilèges de rechargement, de verrouillage et de réplication de toutes les bases de données:

GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO ''@'localhost';
FLUSH PRIVILEGES;

Ce sont les privilèges minimum requis dont XtraBackup a besoin pour créer des sauvegardes complètes des bases de données.

Lorsque vous avez terminé, quittez la console MySQL:

exit

Nous sommes maintenant prêts à créer une sauvegarde complète de nos bases de données.

Effectuer une sauvegarde à chaud complète

Cette section couvre les étapes nécessaires à la création d’une sauvegarde à chaud complète d’une base de données MySQL à l’aide de XtraBackup. Après avoir vérifié que les autorisations du fichier de base de données sont correctes, nous utiliserons XtraBackup pour * créer * une sauvegarde, puis * le préparer.

Mettre à jour les autorisations de Datadir

Sur CentOS 7, les fichiers de données MySQL sont stockés dans + / var / lib / mysql, parfois appelé * datadir *. Par défaut, l’accès à datadir est limité à l’utilisateur + mysql. XtraBackup nécessite l’accès à ce répertoire pour créer ses sauvegardes. Lançons quelques commandes pour vous assurer que l’utilisateur système que nous avons précédemment configuré (en tant que membre du groupe mysql) dispose des autorisations appropriées:

sudo chown -R mysql: /var/lib/mysql
sudo find /var/lib/mysql -type d -exec chmod 775 "{}" \;

Ces commandes garantissent que tous les répertoires de datadir sont accessibles au groupe mysql et doivent être exécutés avant chaque sauvegarde.

If you added your user to the mysql group in the same session, you will need to login again for the group membership changes to take effect.

Créer une sauvegarde

Nous sommes maintenant prêts à créer la sauvegarde. Avec la base de données MySQL en cours d’exécution, utilisez l’utilitaire + innobackupex + pour le faire. Exécutez cette commande après la mise à jour de l’utilisateur et du mot de passe correspondant aux informations de connexion de votre utilisateur MySQL:

innobackupex --user=  --password= --no-timestamp /data/backups/new_backup

Ceci créera une sauvegarde de la base de données à l’emplacement spécifié, + / data / backups / new_backup +:

innobackupex outputinnobackupex: Backup created in directory '/data/backups/new_backup'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!
  • Vous pouvez également omettre le + - no-timestamp + pour que XtraBackup crée un répertoire de sauvegarde basé sur l’horodatage actuel, comme suit:

innobackupex --user=  --password= /data/backups

Cela créera une sauvegarde de la base de données dans un sous-répertoire généré automatiquement, comme suit:

innobackupex output - no timestampinnobackupex: Backup created in directory '/data/backups/'
150420 13:50:10  innobackupex: Connection to database server closed
150420 13:50:10  innobackupex: completed OK!

Quelle que soit la méthode choisie, indiquez «innobackupex: completed OK!» Sur la dernière ligne de sa sortie. Une sauvegarde réussie donnera une copie de la base de données datadir, qui doit être * préparée * avant de pouvoir être utilisée.

Préparer la sauvegarde

La dernière étape de la création d’une sauvegarde à chaud avec XtraBackup consiste à * la * préparer *. Cela implique de «rejouer» le journal des transactions pour appliquer toute transaction non validée à la sauvegarde. La préparation de la sauvegarde rendra ses données cohérentes et utilisables pour une restauration.

Suivant notre exemple, nous préparerons la sauvegarde créée dans + / data / backups / new_backup +. Remplacez-le par le chemin de votre sauvegarde actuelle:

innobackupex --apply-log /data/backups/

Encore une fois, vous devriez voir «innobackupex: OK terminé!» Comme dernière ligne de sortie.

Votre sauvegarde de base de données a été créée et est prête à être utilisée pour restaurer votre base de données. De plus, si vous avez un système de sauvegarde de fichiers, tel que Bacula, cette sauvegarde de base de données doit être: inclus dans votre sélection de sauvegarde.

La section suivante explique comment restaurer votre base de données à partir de la sauvegarde que nous venons de créer.

Effectuer une restauration de sauvegarde

La restauration d’une base de données avec XtraBackup nécessite que la base de données soit arrêtée et que son datadir soit vide.

Arrêtez le service MySQL avec cette commande:

sudo systemctl stop mariadb

Puis déplacez ou supprimez le contenu de datadir (+ / var / lib / mysql). Dans notre exemple, nous allons simplement le déplacer vers un emplacement temporaire:

mkdir /tmp/mysql
mv /var/lib/mysql/* /tmp/mysql/

Maintenant, nous pouvons restaurer la base de données à partir de votre sauvegarde, «nouvelle sauvegarde»:

innobackupex --copy-back /data/backups/

Si cela réussit, la dernière ligne de sortie devrait indiquer «innobackupex: OK»!

Les fichiers restaurés dans datadir appartiendront probablement à l’utilisateur pour lequel vous avez exécuté le processus de restauration. Changez la propriété en mysql pour que MySQL puisse lire et écrire les fichiers:

sudo chown -R mysql: /var/lib/mysql

Nous sommes maintenant prêts à démarrer MySQL:

sudo systemctl start mariadb

C’est ça! Votre base de données MySQL restaurée doit être opérationnelle.

Conclusion

Maintenant que vous pouvez créer des sauvegardes à chaud de votre base de données MySQL à l’aide de Percona XtraBackup, vous devez envisager la configuration de plusieurs éléments.

Tout d’abord, il est conseillé d’automatiser le processus pour que les sauvegardes soient créées selon un calendrier. Deuxièmement, vous devriez faire des copies à distance des sauvegardes, au cas où votre serveur de base de données aurait des problèmes, en utilisant quelque chose comme https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local. -and-remote-directory-on-a-vps [rsync], un système de sauvegarde de fichiers réseau tel que https://www.digitalocean.com/community/tutorials/how-to-install-bacula-server-on-centos- 7 [Bacula], ou DigitalOcean backups. Après cela, vous voudrez examiner la * rotation * de vos sauvegardes (suppression d’anciennes sauvegardes sur une planification) et la création de sauvegardes incrémentielles (avec XtraBackup) pour économiser de l’espace disque.

Bonne chance!