Table des matières
- introduction
- Conditions préalables
- Étape 1: créer un utilisateur système non root
- Étape 2: vérifiez le moteur de stockage
- Étape 3: créer un utilisateur de base de données pour la sauvegarde
- Étape 4: installer Percona XtraBackup
- Étape 5: créer des répertoires de stockage de sauvegarde
- Étape 6: créer la première sauvegarde complète
- Étape 7: créez les sauvegardes incrémentielles suivantes
- Étape 8: préparer les fichiers de sauvegarde pour la restauration de la base de données
- Étape 9: restaurer la base de données
- Prochaines étapes
introduction
Percona XtraBackup est un programme gratuit basé sur MySQL utilisé pour effectuer des sauvegardes à chaud. Il est également open source. Avec Percona XtraBackup, vous pouvez effectuer des sauvegardes à chaud des bases de données MySQL, MariaDB ou Percona Server sans arrêter votre service de base de données ni le rendre en lecture seule. Il s'agit d'une fonctionnalité critique pour de nombreuses entreprises en ligne.
Pour les bases de données utilisant les moteurs de stockage InnoDB, XtraDB et HailDB, Percona XtraBackup peut effectuer des sauvegardes non bloquantes. Pour les bases de données utilisant les moteurs de stockage MyISAM, Merge et Archive, Percona XtraBackup peut également effectuer des sauvegardes en interrompant brièvement les écritures à la fin de la procédure de sauvegarde.
Dans cet article, je vais vous montrer comment installer et utiliser Percona XtraBackup pour effectuer des sauvegardes à chaud complètes et incrémentielles sur un serveur Vultr basé sur l'application WordPress en un clic. Nous allons effectuer une sauvegarde complète et deux sauvegardes incrémentielles, puis restaurer la base de données à l'état de chacune des trois sauvegardes en conséquence.
Conditions préalables
Je suppose que vous avez déployé une instance de serveur WordPress Vultr en un clic à partir de zéro et que vous vous êtes connecté en tant que root, en utilisant SSH.
Étape 1: créer un utilisateur système non root
Pour des raisons de sécurité, une pratique recommandée consiste à créer un autre compte d'utilisateur avec des autorisations root, puis à l'utiliser pour vous connecter et effectuer vos opérations quotidiennes sur le système. Vous pouvez toujours exécuter presque toutes les commandes de superutilisateur avec la sudo
commande.
1) Créez un nouvel utilisateur. Remplacez-le sysuser
par votre propre nom d'utilisateur.
useradd sysuser
2) Définissez le mot de passe de votre nouvel utilisateur. Remplacez-le sysuser
par votre propre nom d'utilisateur.
passwd sysuser
3) Accordez des autorisations root à votre nouvel utilisateur.
visudo
Trouvez le paragraphe ci-dessous.
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
Ajoutez une ligne directement sous ce paragraphe, remplacez-la sysuser
par votre propre nom d'utilisateur.
sysuser ALL=(ALL) ALL
Sauvegarder et quitter.
:wq
4) Basculez vers votre nouveau compte utilisateur.
logout
Ensuite, utilisez les informations d'identification du nouvel utilisateur pour vous connecter à partir de la fenêtre de votre terminal.
Étape 2: vérifiez le moteur de stockage
Par défaut, la connexion racine MySQL est enregistrée sur le VPS dans /root/.my.cnf
. Affichez le mot de passe dans votre terminal avec la commande suivante.
sudo cat /root/.my.cnf
Utilisez les informations d'identification affichées à l'écran pour vous connecter à la console MySQL.
mysql -u root -p
Dans le shell MySQL, exécutez ce qui suit.
SHOW DATABASES;
Toutes les bases de données MySQL auront été affichées à l'écran. La base de données nommée comme wp5273512
est la base de données WordPress que nous voulons sauvegarder. Dans la commande suivante, remplacez-la wp5273512
par la vôtre:
USE wp5273512;
Vérifiez le moteur de stockage pour chaque table:
SHOW TABLE STATUS\G
Vous constaterez que toutes les tables de votre base de données WordPress MySQL utilisent le moteur de stockage InnoDB qui est parfait pour effectuer des sauvegardes à chaud avec Percona XtraBackup.
Pour toute autre base de données MySQL utilisant le moteur de stockage MyISAM, nous pouvons toujours les sauvegarder avec Percona XtraBackup en interrompant brièvement les écritures.
Étape 3: créer un utilisateur de base de données pour la sauvegarde
Toujours dans le shell MySQL, utilisez les commandes suivantes pour créer un utilisateur de base de données dédié pour la sauvegarde. N'oubliez pas de remplacer le nom d'utilisateur xbuser
et le mot xbpasswd
de passe de la base de données par les vôtres:
CREATE USER 'xbuser'@'localhost' IDENTIFIED BY 'xbpasswd';
GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT, CREATE TABLESPACE, PROCESS, SUPER, CREATE, INSERT, SELECT ON *.* TO 'xbuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Les privilèges accordés ci-dessus sont nécessaires pour la fonctionnalité complète de Percona XtraBackup. Vous pouvez supprimer certains d'entre eux pour moins de fonctionnalités et une meilleure sécurité. Pour plus de détails, consultez le site officiel de Percona XtraBackup .
Étape 4: installer Percona XtraBackup
Vous pouvez installer Percona XtraBackup à partir du référentiel RPM de Percona assez facilement:
sudo yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
sudo yum install -y percona-xtrabackup
Étape 5: créer des répertoires de stockage de sauvegarde
Tout d'abord, vous devez ajouter un utilisateur sysuser
au mysql
groupe. Remplacez-le sysuser
par votre propre nom d'utilisateur.
sudo gpasswd -a sysuser mysql
Créez un répertoire pour stocker les sauvegardes complètes.
sudo mkdir -p /dbbackup/full/
Créez un autre répertoire pour stocker les sauvegardes incrémentielles.
sudo mkdir -p /dbbackup/inc/
Remplacez le propriétaire de ces répertoires par utilisateur sysuser
et groupe sysuser
.
sudo chown -R sysuser:sysuser /dbbackup
Déconnectez-vous pour appliquer ces modifications.
logout
Connectez-vous ensuite avec sysuser
.
Étape 6: créer la première sauvegarde complète
XtraBackup se compose principalement du programme XtraBackup et du innobackupex
script perl. Habituellement, vous pouvez utiliser le innobackupex
script perl pour effectuer diverses procédures d'exploitation pour plus de commodité.
Saisissez la commande suivante pour créer la première sauvegarde complète. N'oubliez pas de remplacer le nom d'utilisateur de xbuser
la base de données, le mot de passe de l'utilisateur de la base de données xbpasswd
et le répertoire de sauvegarde complet /dbbackup/full/
par les vôtres.
sudo innobackupex --user=xbuser --password=xbpasswd /dbbackup/full/
Avec cette commande exécutée correctement, vous verrez le message de confirmation "innobackupex: terminé OK!" à la dernière ligne de la sortie.
Tous les fichiers nouvellement créés de cette sauvegarde complète seront stockés dans un répertoire horodaté sous /dbbackup/full/
. Par exemple /dbbackup/full/2015-05-22_05-45-54
,.
Étape 7: créez les sauvegardes incrémentielles suivantes
Entrez la commande suivante pour créer la première sauvegarde incrémentielle. Remplacez les variables dans la commande en conséquence.
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/full/2015-05-22_05-45-54 /dbbackup/inc/
Encore une fois, vous verrez "innobackupex: terminé OK!" à la fin de la sortie lorsque la commande s'exécute avec succès. Les fichiers de sauvegarde seront stockés dans un répertoire horodaté sous /dbbackup/inc/
.
Entrez la commande suivante pour créer la deuxième sauvegarde incrémentielle. Remplacez les variables dans la commande en conséquence.
sudo innobackupex --user=xbuser --password=xbpasswd --incremental --incremental-basedir=/dbbackup/inc/2015-05-22_05-48-12 /dbbackup/inc/
En cas de succès, vous verrez le "innobackupex: terminé OK!" message à nouveau. Vérifiez à /dbbackup/inc/
nouveau le dossier pour voir les fichiers de sauvegarde.
Étape 8: préparer les fichiers de sauvegarde pour la restauration de la base de données
Tous les fichiers de sauvegarde de la base de données doivent être préparés avant de pouvoir être utilisés pour restaurer la base de données.
Remarque : Avant d'effectuer les procédures de préparation et de restauration, vous feriez mieux de conserver une copie de l'ensemble du répertoire de sauvegarde (tel que /dbbackup/
) à un autre endroit au cas où des dommages à la sauvegarde des fichiers seraient causés par erreur.
Dans chaque répertoire de sauvegarde, il existe un fichier nommé xtrabackup_checkpoints
qui contient le type de sauvegarde et les numéros de séquence de journal de début et de fin ( from_lsn
et to_lsn
). Vous pouvez utiliser ces chiffres pour clarifier votre stratégie de restauration de base de données. Regardez les exemples ci-dessous.
Dans le xtrabackup_checkpoints
fichier de la première sauvegarde complète, j'ai:
backup_type = full-backuped
from_lsn = 0
to_lsn = 2932478
Dans le xtrabackup_checkpoints
fichier de la première sauvegarde incrémentielle, j'ai:
backup_type =incremental
from_lsn = 2932478
to_lsn = 2970177
Dans le xtrabackup_checkpoints
fichier de la deuxième sauvegarde incrémentielle, j'ai:
backup_type = incremental
from_lsn = 2970177
to_lsn = 3004672
En bref, vous devez aborder chaque sauvegarde avec l'ordre croissant de lsn. Si la séquence lsn est incomplète ou désordonnée, vous risquez de perdre des données.
Remarque : Les commandes suivantes impliquent trois répertoires, remplacez-les par les vôtres.
Pour restaurer la base de données à l'état de la première sauvegarde complète, vous devez préparer les fichiers de sauvegarde avec la commande suivante:
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Pour restaurer la base de données à l'état de la première sauvegarde incrémentielle, vous devez préparer les fichiers de sauvegarde avec les commandes suivantes:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Pour restaurer la base de données à l'état de la deuxième sauvegarde incrémentielle, vous devez préparer les fichiers de sauvegarde avec les commandes suivantes:
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54
sudo innobackupex --apply-log --redo-only /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-48-12
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54 --incremental-dir=/dbbackup/inc/2015-05-22_05-51-32
sudo innobackupex --apply-log /dbbackup/full/2015-05-22_05-45-54
Remarques :
Pour les sauvegardes incrémentielles, vous devez utiliser l' --redo-only
option sur toutes les sauvegardes incrémentielles sauf la dernière. Néanmoins, l'utilisation de cette option sur la dernière sauvegarde incrémentielle est toujours inoffensive pour la cohérence de vos données - elle ne causera qu'un certain retard en raison de la restauration de la base de données.
La dernière commande de chaque scénario incrémentiel est facultative mais recommandée, car elle accélérera la restauration.
Après la préparation, les modifications enregistrées dans les fichiers de sauvegarde incrémentielle seront ajoutées aux fichiers de sauvegarde complète de base préparés, vous devez donc toujours utiliser les fichiers de sauvegarde complète préparés pour restaurer votre base de données, que vous choisissiez une sauvegarde complète ou une sauvegarde incrémentielle.
Étape 9: restaurer la base de données
Avant de pouvoir restaurer votre base de données, vous devez arrêter le service de base de données.
sudo service mysqld stop
Vous devez également vider le répertoire de la base de données. Vous pouvez déplacer les fichiers de base de données actuels vers un autre emplacement par précaution.
sudo mkdir /currentdb
sudo mv /var/lib/mysql/* /currentdb
Restaurez votre base de données avec les fichiers de «sauvegarde complète» préparés.
sudo innobackupex --copy-back /dbbackup/full/2015-05-22_05-45-54
Étant donné que la procédure de restauration modifiera le propriétaire du répertoire de la base de données, vous devez le modifier mysql:mysql
pour le rendre opérationnel.
sudo chown -R mysql:mysql /var/lib/mysql
Redémarrez le service de base de données.
sudo service mysqld start
C'est ça. À ce stade, vous pouvez visiter votre site WordPress pour vérifier que le processus de restauration a réussi.