Percona XtraBackup est un utilitaire de sauvegarde open source pour MySQL. Il prend en charge toutes les versions de MySQL telles que Percona Server, MariaDB et (Oracle) MySQL. Percona Xtrabackup effectue une sauvegarde à chaud pour MySQL. La sauvegarde à chaud signifie créer une sauvegarde d'un serveur MySQL pendant son exécution sans temps d'arrêt.
Dans ce tutoriel, je vais vous montrer comment créer une sauvegarde de base de données MySQL à chaud avec l'outil OpenSource Percona XtraBackup sur Ubuntu 16.04 (Xenial Xerus). J'utiliserai MariaDB comme serveur de base de données pour effectuer la sauvegarde, mais la même configuration fonctionnera également pour les serveurs MySQL.
Prérequis
- Serveur Ubuntu 16.04 - (Xenial Xerus)
- Serveur MySQL ou MariaDB
- Privilèges racine
Étape 1 - Installer Percona XtraBackup
La première étape consiste à installer le dernier logiciel Percona XtraBackup sur notre serveur Ubuntu. Connectez-vous à votre serveur en SSH (ou sur la console) :
ssh [email protected]
TYPE YOUR PASSWORD
Percona XtraBackup est disponible dans le référentiel Ubuntu, mais nous souhaitons utiliser la dernière version du référentiel Percona.
Ajoutez le référentiel Percona en téléchargeant le package deb à partir du Web et installez-le avec la commande dpkg :
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb
Ensuite, mettez à jour le référentiel et installez Ppercona XtraBackup 2.4 (la dernière version pour le moment) :
sudo apt-get update
sudo apt-get install percona-xtrabackup-24
Percona XtraBackup est installé.
Étape 2 - Configurer l'utilisateur et le répertoire de sauvegarde
Pour effectuer la sauvegarde à chaud, nous devons créer un nouvel utilisateur mysql avec des privilèges et des autorisations spéciaux. Dans ce tutoriel, j'utiliserai MariaDB 10.0 comme serveur de base de données. Si vous n'avez pas encore installé de base de données compatible MySQL, vous pouvez l'installer avec la commande ci-dessous :
sudo apt-get install mariadb-server mariadb-client
Définissez un mot de passe sécurisé pour l'utilisateur root avec cette commande :
mysql_secure_installation
Si MariaDB est installé, accédez au shell MariaDB/MySQL en tant qu'utilisateur root avec la commande mysql client :
mysql -u root -p
TYPE MySQL PASSWORD
Créez un nouvel utilisateur appelé 'bekupuser ' avec le mot de passe 'mypassword ' (choisissez un mot de passe sécurisé pour votre serveur !) :
CREATE USER 'bekupuser'@'localhost' IDENTIFIED BY 'mypassword';
Accordez à l'utilisateur les privilèges suivants :'RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT'.
GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO 'bekupuser'@'localhost';
FLUSH PRIVILEGES;
exit
Ensuite, créez un nouveau répertoire pour stocker les fichiers de sauvegarde MySQL :
mkdir -p /data/backups/mysql/
Le nouvel utilisateur de sauvegarde et un répertoire de sauvegarde ont été créés.
Étape 3 - Effectuer une sauvegarde avec Innobackupex
Innobackupex est un wrapper de script Perl pour le programme xtrabackup. Il s'agit d'une version corrigée du script innobackup fourni par oracle, distribué avec l'outil de sauvegarde InnoDB. Innobackupex fournit une sauvegarde pour toute une instance de base de données MySQL, en utilisant xtrabackup en combinaison avec xbstream et xbcrypt.
Dans cette étape, nous allons créer et préparer une sauvegarde complète pour l'instance MySQL.
À l'étape 2, nous avons créé un nouveau répertoire pour la sauvegarde et ajouté un nouvel utilisateur de sauvegarde mysql. Nous allons les utiliser maintenant pour créer une sauvegarde avec la commande innobackupex.
Créez une sauvegarde MySQL avec l'innobackupex dans le nouveau répertoire '/data/backups/my_backup' :
innobackupex --user=bekupuser --password=mypassword --no-timestamp /data/backups/my_backup
Remarque :
--utilisateur =utilisateur avec les privilèges de sauvegarde requis (étape 2).
--mot de passe =mot de passe de l'utilisateur de sauvegarde.
--pas d'horodatage =désactiver la création d'un nouveau sous-répertoire horodaté dans le répertoire racine de sauvegarde.
/data/backups/ma_sauvegarde =répertoire pour la sauvegarde, il sera créé automatiquement lors du processus de sauvegarde. Si le répertoire existe, vous obtiendrez un message d'erreur.
Autre option :
mkdir -p /data/backups/my_backup2
innobackupex --user=bekupuser --password=mypassword /data/backups/my_backup2
or
innobackupex --user=bekupuser --password=mypassword /data/backups/
Remarque :
S'il n'y a pas de répertoire 'my_backup2 ', vous obtiendrez votre répertoire basé sur 'timestamp '.
Résultats :
Après avoir créé une nouvelle sauvegarde, les données ne sont pas prêtes pour une restauration. Il reste une étape pour que les données soient prêtes à être restaurées. Nous avons besoin de "l'étape de préparation" pour que les données puissent être restaurées.
Préparez la sauvegarde en utilisant innobackupex avec l'option --apply-log dans le répertoire de sauvegarde '/data/backups/my_backup ' :
innobackupex --apply-log /data/backups/my_backup
Assurez-vous que le processus est terminé sans erreur avant de continuer.
Si vous disposez de suffisamment de mémoire et d'une grande base de données, vous pouvez utiliser l'option --use-memory=memorynumber pour indiquer à innobackupex la quantité de mémoire qu'il peut utiliser :
innobackupex --apply-log --use-memory=4G /data/backups/my_backup
Les données sont prêtes à être restaurées maintenant. Nous pouvons le restaurer sur le même serveur ou sur un autre serveur exécutant MariaDB.
Étape 4 - Restaurer la sauvegarde complète avec Innobackupex
Dans cette étape, nous allons restaurer l'instance MySQL avec innobackupex.
Avant de restaurer l'instance MySQL, nous devons arrêter le processus MySQL avec la commande systemctl (le processus MariaDB s'appelle mysql) :
systemctl stop mysql
Faites une sauvegarde de l'ancien répertoire de données MySQL :
mkdir ~/mysql_old/
mv /var/lib/mysql/* ~/mysql_old/
Ensuite, restaurez l'instance mysql à partir de la sauvegarde complète avec innobackupex :
innobackupex --copy-back /data/backups/my_backup
Lorsque vous voyez le résultat 'innobackupex :terminé OK ', alors vous avez restauré avec succès votre instance MySQL.
Remplacez maintenant le propriétaire du répertoire de données MySQL par l'utilisateur mysql et redémarrez le service :
chown -R mysql:mysql /var/lib/mysql
systemctl start mysql
L'instance MySQL a été restaurée avec succès avec percona-xtrabackup.