introduction
Les sauvegardes régulières de la base de données sont une étape cruciale de la protection contre les événements non intentionnels de perte de données. Concevoir une stratégie de sauvegarde et de restauration efficace implique souvent un compromis entre impact sur les performances, coûts de mise en œuvre et de stockage des données, avec vitesse de restauration, intégrité des données et couverture de sauvegarde. La solution optimale dépendra de votre point de récupération et du tempsobjectives et de l'échelle et de l'architecture de la base de données.
Dans ce guide, nous montrerons comment effectuer une sauvegarde physique en direct (ou "à chaud") d'une base de données MySQL en cours d'exécution à l'aide d'instantanés LVM. Nous allons ensuite compresser et stocker les données dans un espace DigitalOcean.
La procédure présentée dans ce didacticiel est bien adaptée aux bases de données MySQL volumineuses, aux bases de données utilisant un mélange de moteurs de stockage (tels que InnoDB, TokuDB et MyISAM) et aux serveurs de base de données avec plusieurs volumes de stockage en mode bloc attachés, gérés à l'aide de LVM.
Nous allons commencer par nous assurer que notre serveur Ubuntu 16.04 peut prendre et monter un instantané LVM. Ensuite, nous allons prendre un instantané LVM du volume logique contenant le répertoire de données de MySQL. Nous monterons ensuite ce volume de capture instantanée (volume logique gelé), puis compresserons et enverrons le répertoire de données MySQL à DigitalOcean Spaces pour le stockage. Pour conclure, nous allons brièvement parcourir un exemple de scénario de récupération.
Conditions préalables
Pour utiliser ce guide, les conditions préalables suivantes doivent être remplies:
-
Un droplet Ubuntu 16.04 avec un utilisateur non root disposant de privilèges sudo, comme détaillé dansInitial Server Setup with Ubuntu 16.04
-
Une installation MySQL 5.7+ en cours d'exécution, comme détaillé dansHow To Install MySQL on Ubuntu 16.04
-
Un volume logique LVM utilisé pour stocker votre répertoire de données de base de données MySQL:
-
Pour en savoir plus sur LVM et comment configurer un volume logique, consultezAn Introduction to LVM Concepts, Terminology, and Operations
-
Pour en savoir plus sur le déplacement du répertoire de données de MySQL de son emplacement par défaut
/var/lib/mysql
, consultezHow To Move a MySQL Data Directory to a New Location on Ubuntu 16.04
-
-
Un espace DigitalOcean et un ensemble d'informations d'identification d'API, comme détaillé dansHow To Create a DigitalOcean Space and API Key.
-
Le client de transfert de fichiers en ligne de commande
s3cmd
(2.X) installé comme détaillé dansStep 1 of How To Use Logrotate and S3cmd to Archive Logs to Object Storage on Ubuntu 16.04 -
s3cmd
configuré pour accéder à votre espace, comme détaillé dansHow To Configure s3cmd 2.x To Manage DigitalOcean Spaces
Une fois que tout est configuré, vous êtes prêt à commencer avec ce guide.
[[step-1 -—- investiguer-mysql-and-lvm-configuration]] == Étape 1 - Etudier la configuration de MySQL et LVM
Pour commencer, nous allons localiser notre répertoire de données MySQL et noter ces détails concernant notre configuration LVM.
Localiser MySQLdatadir
Pour trouver le chemin d'accès à votre répertoire de données MySQL, exécutez la commande suivante:
mysqladmin -u root -p variables | grep datadir
Entrez votre mot de passe MySQLroot
lorsque vous y êtes invité. Vous devriez voir une sortie similaire à celle-ci:
Output| datadir | /data/mysql/
Pour l'installation MySQL utilisée dans ce guide, le répertoire de données est/data/mysql
.
Nous devons maintenant confirmer que/data/mysql
vit sur un volume logique LVM. Pour confirmer cela, nous allons exécuterlsblk
:
lsblk
Vous devriez voir une sortie similaire à celle-ci:
OutputNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 600G 0 disk
└─vg1-mysql_data 252:0 0 475G 0 lvm /data
vda 253:0 0 160G 0 disk
├─vda1 253:1 0 159.9G 0 part /
├─vda14 253:14 0 4M 0 part
└─vda15 253:15 0 106M 0 part /boot/efi
A partir de là, nous observons que/data
est en fait le point de montage d'un volume logique LVM appelémysql_data
. Il fait partie du groupe de volumesvg1
.
Nous devons maintenant nous assurer que nous avons suffisamment d'espace libre disponible dans notre groupe de volumesvg1
pour prendre un instantané LVM.
Explorez la configuration LVM
Il est important de noter que la sortie des commandes décrites dans cette section varie en fonction du matériel de votre serveur et de la configuration LVM. Examinons rapidement la configuration matérielle et LVM du serveur Ubuntu 16.04 utilisée dans ce guide.
Pour commencer, découvrons le nombre de volumes physiques dont nous disposons avecpvscan
:
sudo pvscan
Vous devriez voir une sortie similaire à celle-ci:
Output PV /dev/sda VG vg1 lvm2 [500.00 GiB / 25.00 GiB free]
Total: 1 [500.00 GiB] / in use: 1 [500.00 GiB] / in no VG: 0 [0 ]
Nous observons que nous avons un volume physique de 500 Go (/dev/sda
) qui se trouve dans un groupe de volumes (vg1
). 475 Go de ce volume physique ont été alloués aux volumes logiques, tandis que 25 Go restent libres pour être utilisés par le groupe de volumes.
Nous pouvons le confirmer en examinant plus en détail le groupe de volumesvg1
à l'aide de la commandevgdisplay
:
sudo vgdisplay
Vous devriez voir une sortie semblable à celle-ci:
Output--- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 2
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 500.00 GiB
PE Size 4.00 MiB
Total PE 127999
Alloc PE / Size 121600 / 475.00 GiB
Free PE / Size 6399 / 25.00 GiB
VG UUID KEsoDE-zON7-NdyO-ioxb-6FSl-CB4m-S3QCRj
À partir des lignesAlloc PE / Size etFree PE / Size, nous observons que nous avons 475 Go alloués et 25 Go libres dans le groupe de volumesvg1
. La ligneCur PV nous montre que nous avons 1 volume physique dans ce groupe de volumes. La ligneCur LV indique que nous avons utilisé le pool d’espace de ce groupe de volumes pour créer 1 volume logique.
Examinons maintenant ce volume logique en utilisantlvdisplay
:
sudo lvdisplay
Vous devriez voir une sortie similaire à celle-ci:
Output --- Logical volume ---
LV Path /dev/vg1/mysql_data
LV Name mysql_data
VG Name vg1
LV UUID T98x9c-zvC1-f0Rw-4ipn-Cxo2-duwk-KUwQQc
LV Write Access read/write
LV Creation host, time LVM, 2018-04-18 20:11:48 +0000
LV Status available
# open 1
LV Size 475.00 GiB
Current LE 121600
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
À partir deLV Size, nous voyons que nous avons un volume logique de 475 Go,mysql_data
, trouvé à/dev/vg1/mysql_data
(rappelez-vous quevg1
était le nom du groupe de volumes demysql_data
).
Pour résumer, sur le serveur Ubuntu 16.04 utilisé pour ce didacticiel, nous avons un volume physique de 500 Go (/dev/sda
) utilisé pour sauvegarder un groupe de volumes (vg1
), à partir duquel nous avons créé un seul volume logique de 475 Go. volume (mysql_data
). Cela laisse 25 Go d'espace libre dans le groupe de volumes, qui peuvent être utilisés pour créer d'autres volumes logiques (et instantanés).
Votre configuration matérielle et LVM sera probablement différente. vous pouvez avoir plusieurs périphériques de stockage en bloc connectés, regroupés en un ou plusieurs groupes de volumes. La procédure pour prendre un instantané d'un volume logique donné sera néanmoins la même.
En utilisant la série de commandes présentée dans cette section, vous devriez maintenant avoir une idée générale de votre configuration LVM et de votre matériel.
Dans l'étape suivante, nous préparerons votre serveur de base de données pour la capture instantanée LVM.
[[step-2 -—- prepare-your-server-for-lvm-snapshots]] == Étape 2 - Préparez votre serveur pour les snapshots LVM
Pour que nous puissions prendre un instantané LVM en toute sécurité, nous devons prévoir un espace disque suffisant pour couvrir les écritures et les modifications susceptibles de se produire lors de la sauvegarde et du transfert de fichiers vers Spaces. En fonction de la taille de votre base de données, cette sauvegarde peut prendre plusieurs heures. Il est donc préférable de faire preuve de prudence. Si votre volume d'instantané manque d'espace lors de la sauvegarde, celui-ci deviendra invalide et vous ne disposerez plus d'une sauvegarde cohérente.
À l'étape précédente, nous avons observé que le groupe de volumes (vg1
) contenant notre volume logique principal (mysql_data
) ne disposait que de 25 Go d'espace libre. Même s’il est possible que 25 Go de modifications ne soient pas écrites sur le disque avant la sauvegarde de notre base de données, nous préférerions idéalement une marge de sécurité d’au moins 100 Go. Dans un contexte de production, il serait préférable de mesurer la quantité moyenne de données en cours d'écriture sur le disque pendant la fenêtre de sauvegarde planifiée et de redimensionner la taille du volume de l'instantané en conséquence.
Pour ajouter 75 Go d'espace supplémentaire au groupe de volumesvg1
, nous pouvons soit attacher un périphérique de stockage par blocs, soit augmenter la taille du volume actuellement attaché au Droplet. Dans ce didacticiel, nous allons développer le volume de stockage en bloc déjà associé. pour en savoir plus sur l'attachement d'un volume de stockage en bloc supplémentaire, vous pouvez consulterAn Introduction to DigitalOcean Block Storage.
[.note] #Note: Certaines régions ne prennent pas encore en charge le stockage en bloc et vous ne pourrez peut-être pas attacher un volume de stockage en bloc à votre Droplet. Une solution de contournement raisonnable dans ce cas serait de créer un instantané de votre Droplet et de créer un nouveau Droplet à l'aide de cette image Snapshot, à laquelle vous pouvez ensuite ajouter Block Storage.
#
Développons le volume de stockage en bloc attaché à cette Droplet.
Accédez au panneau de configuration Web de DigitalOcean et à partir du tableau de bord, accédez à votre Droplet.
Dans la barre latérale, cliquez surVolumes:
Dans ce volet, vous devriez voir tous les volumes de stockage de bloc attachés à votre Droplet. Pour le droplet Ubuntu utilisé dans ce guide, nous avons un volume de stockage de bloc attaché:
Cliquez surMore puis surResize volume.
À partir de là, vous pouvez sélectionner l'une des tailles de volume prédéfinies ou choisir votre propre taille de volume. Augmentons le volume de 500 Go de 100 Go à 600 Go:
Appuyez surContinue. Le volume de stockage de votre bloc attaché a maintenant été augmenté de 100 Go.
Pour propager ce changement de périphérique vers LVM, nous devons exécuterpvresize
.
Connectez-vous à votre serveur et exécutez à nouveaupvscan
pour rechercher les volumes physiques:
sudo pvscan
Vous devriez voir la même sortie que précédemment pour notre volume physique/dev/sda
:
Output PV /dev/sda VG vg1 lvm2 [500.00 GiB / 25.00 GiB free]
Total: 1 [500.00 GiB] / in use: 1 [500.00 GiB] / in no VG: 0 [0 ]
Maintenant, exécutezpvresize
sur le volume pour remplir l'espace supplémentaire que nous venons d'ajouter:
sudo pvresize /dev/sda
Vous devriez voir la sortie suivante:
OutputPhysical volume "/dev/sda" changed
1 physical volume(s) resized / 0 physical volume(s) not resized
Confirmons que notre volume physique est désormais 100 Go plus grand en exécutant un autrepvscan
:
sudo pvscan
On observe que le volume physique de/dev/sda
est désormais de 600 Go:
Output PV /dev/sda VG vg1 lvm2 [600.00 GiB / 125.00 GiB free]
Total: 1 [600.00 GiB] / in use: 1 [600.00 GiB] / in no VG: 0 [0 ]
Voyons maintenant que l’espace libre de notre groupe de volumes a également augmenté de 100 Go:
sudo vgdisplay
Vous devriez alors voir le résultat suivant:
Output --- Volume group ---
VG Name vg1
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 1
Act PV 1
VG Size 600.00 GiB
PE Size 4.00 MiB
Total PE 153599
Alloc PE / Size 121600 / 475.00 GiB
Free PE / Size 31999 / 125.00 GiB
VG UUID KEsoDE-zON7-NdyO-ioxb-6FSl-CB4m-S3QCRj
Cela indique que nous disposons maintenant de 125 Go d’espace libre pour créer notre volume d’instantané.
Pour les besoins de ce didacticiel, 125 Go sera suffisant pour absorber les écritures et les modifications au cours de la procédure de sauvegarde et de téléchargement, mais dans un paramètre de production, la taille du volume de l'instantané doit être mise à l'échelle proportionnellement à l'utilisation anticipée du disque au cours de la fenêtre de sauvegarde.
Maintenant que notre groupe de volumes dispose de suffisamment d'espace pour couvrir les écritures ou les modifications susceptibles de se produire pendant la capture instantanée et la sauvegarde, nous pouvons passer à la création du volume de la capture instantanée.
[[step-3 -—- create-and-mount-lvm-snapshot]] == Étape 3 - Créer et monter un instantané LVM
[.warning] #Warning: Pendant que l'instantané LVM est actif, il y aura une certaine dégradation des performances lors de l'écriture sur le disque. Vous devez d'abord tester cette procédure en utilisant une base de données hors production avec une charge simulée pour vérifier que cette méthode fonctionnera dans votre déploiement de production.
#
Nous allons maintenant créer un instantané du volume logiquemysql_data
en utilisantlvcreate
. Avant de faire cela, nous devons geler les écritures dans la base de données en utilisantFLUSH TABLES WITH READ LOCK
afin de garantir la cohérence des données. Les tables doivent être verrouillées en lecture uniquement jusqu'à ce que nous exécutionslvcreate
, moment auquel elles peuvent être déverrouillées. Si vous créez un script pour cette série de commandes, le temps de verrouillage total devrait être très faible, en fonction des requêtes d'écriture en cours d'exécution.
Lire verrouiller la base de données MySQL
Commençons par vider les tables. Depuis le terminal de votre serveur de base de données, utilisezmysql
pour vous connecter à votre base de données MySQL:
mysql -u root -p
Depuis le shell MySQL, exécutez la commandeFLUSH TABLES
pour verrouiller en lecture votre base de données.
[.warning] #Warning: Après avoir exécuté la commande suivante, toutes les tables ouvertes seront fermées et toutes les tables de toutes les bases de données seront verrouillées avec un verrou de lecture global. Si vous l'exécutez sur une base de données de production, il est recommandé d'exécuter cette commande sur une réplique ou dans le cadre d'un script pour minimiser la durée pendant laquelle la base de données sera verrouillée.
#
FLUSH TABLES WITH READ LOCK;
Vous devriez voir la sortie suivante:
OutputQuery OK, 0 rows affected (0.00 sec)
Ce qui indique que votre base de données a été verrouillée en lecture. Ne quittez pas l'invite MySQL, nous devrons la garder ouverte.
Nous allons maintenant créer et monter un instantané LVM du volume logique utilisé pour héberger nos données MySQL.
Créer et monter un volume d'instantané
En gardant cette connexion client MySQL ouverte, connectez-vous à votre serveur de base de données à partir d'une nouvelle fenêtre de terminal.
[.warning] #Warning: Si vous fermez cette connexion, le verrou sera annulé et les écritures reprendront, rendant l'instantané incohérent.
#
Nous pouvons maintenant prendre un instantané du volume logiquemysql_data
. Nous allouons 100 Go d’espace tampon pour absorber les écritures et autres modifications lors de la sauvegarde physique. Pour créer l'instantané LVM, exécutez la commandelvcreate
suivante:
sudo lvcreate -L 100G -s -n mysql_data_snap /dev/vg1/mysql_data
L'indicateur-L
spécifie la taille du volume logique, dans ce cas 100 Go. -s
indique que le volume logique sera un instantané, dans ce cas du volume logique/dev/vg1/mysql_data
. Nous avons choisi de nommer ce volume d’instantanésmysql_data_snap
.
Vous devriez voir le résultat suivant:
OutputLogical volume "mysql_data_snap" created.
Cela indique que nous avons maintenant une copie du volume logiquemysql_data
à partir duquel nous pouvons effectuer une sauvegarde.
Maintenant que nous avons essentiellement «gelé» nos fichiers de données MySQL à un moment donné, nous pouvons déverrouiller nos tables de base de données et reprendre les écritures. Depuis votre connexion MySQL ouverte, exécutez la commande suivante:
UNLOCK TABLES;
Vous devriez voir le résultat suivant:
OutputQuery OK, 0 rows affected (0.00 sec)
Les tables ont été déverrouillées et vous pouvez maintenant fermer cette connexion en toute sécurité.
À ce stade, votre base de données est toujours active et accepte les connexions et écritures entrantes, mais nous avons un instantané cohérent des données au moment où nous avons exécutéFLUSH TABLES WITH READ LOCK
(ou pour être tout à fait exact, le moment où la dernière requête d'écriture une fois lesFLUSH
terminés).
La dernière étape consiste à monter cet instantané de manière à pouvoir accéder à ces fichiers de données gelés.
Tout d'abord, nous allons créer un point de montage appelé/backup_src
:
sudo mkdir /backup_src
Maintenant, nous allons monter le volume de l'instantané sur/backup_src
:
sudo mount /dev/vg1/mysql_data_snap /backup_src
Nous pouvons maintenant accéder aux fichiers de données gelés. Nous allons jeter un coup d'oeil:
cd /backup_src
ls
Vous devriez voir votre répertoire de données MySQL:
Outputlost+found mysql
Maintenant que nous avons accès à un instantané cohérent de nos données, nous pouvons le sauvegarder dans un espace DigitalOcean.
[[step-4 -—- compress-and-upload-files-to-digitalocean-spaces]] == Étape 4 - Compression et téléchargement de fichiers vers DigitalOcean Spaces
Pour télécharger cette sauvegarde sur notre espace DigitalOcean, nous utiliserons l'outils3cmd
que nous avons installé et configuré dans leprerequisite steps.
Nous allons d'abord tester notre configuration des3cmd
et tenter d'accéder à notre espace de sauvegarde (dans ce tutoriel, notre espace est nommémysql-backup-demo
):
s3cmd info s3://mysql-backup-demo/
Vous devriez voir la sortie suivante:
Outputs3://mysql-backup-demo/ (bucket):
Location: nyc3
Payer: BucketOwner
Expiration Rule: none
Policy: none
CORS: none
ACL: 3587522: FULL_CONTROL
Cette sortie indique que la connexion a réussi et ques3cmd
peut transférer des objets vers l'espace.
Nous allons maintenant compresser et télécharger notre répertoire de données MySQL dans l'espacemysql-backup-demo
:
sudo tar -czvf - /backup_src/mysql | s3cmd put - s3://mysql-backup-demo/mysql_backup_180423.tar.gz
Ici, nous utilisonstar
pour compresser et archiver le répertoire de données MySQL, et diriger la sortie verss3cmd
, que nous utilisons pour transférer l'archive compressée vers Spaces. Nous avons nommé l'archive compresséemysql_backup_180423.tar.gz
.
Puisque nous avons utilisétar
en mode détaillé, vous verrez la liste des fichiers en cours de compression (pour masquer cette sortie, omettez l'indicateur-v
dans la commande ci-dessus).
La sortie se terminera par les informations de transfert de fichier suivantes:
Output...
upload: '' -> 's3://mysql-backup-demo/mysql_backup_180423.tar.gz' [part 1, 1417kB]
1451996 of 1451996 100% in 0s 1993.41 kB/s done
Une fois le transfert terminé, nous vérifierons que le fichier a bien été transféré dans notre espace en répertoriant son contenu:
s3cmd ls s3://mysql-backup-demo/
Vous devriez voir le fichier d’archive de sauvegarde:
Output2018-04-23 20:39 297 s3://mysql-backup-demo/mysql_backup_180423.tar.gz
À ce stade, nous avons effectué avec succès une sauvegarde physique MySQL vers DigitalOcean Spaces.
Nous allons maintenant démonter et supprimer le volume de l'instantané, en restaurant l'espace utilisé dans notre groupe de volumesvg1
.
[[step-5 -—- unmount-and-drop-snapshot-volume]] == Étape 5 - Démonter et supprimer le volume de snapshot
Maintenant que nos données ont été sauvegardées, nous n'avons plus aucune utilisation du volume d'instantané créé précédemment dans ce didacticiel et nous pouvons le supprimer en toute sécurité.
Pour démonter le volume, exécutez la commande suivante:
sudo umount /backup_src
Remplacez/backup_src
par le point de montage de votre volume d’instantané.
Nous pouvons maintenant supprimer le volume d'instantané. Pour ce faire, exécutez la commande suivante:
sudo lvremove vg1/mysql_data_snap
Ici,vg1
correspond au nom de votre groupe de volumes etmysql_data_snap
au nom de votre volume d'instantané.
Vous serez invité à confirmer la suppression, à laquelle vous devrez répondreY.
Vous devriez voir la sortie suivante:
Output Logical volume "mysql_data_snap" successfully removed
Le volume de capture instantanée a été supprimé avec succès. Vous avez maintenant terminé une sauvegarde physique MySQL complète et l'avez téléchargée sur votre espace DigitalOcean.
Nous terminerons ce didacticiel en analysant rapidement un scénario de récupération.
[[step-6 -—- test-restore-from-physical-backup]] == Étape 6 - Tester la restauration à partir d'une sauvegarde physique
Pour restaurer notre base de données MySQL à partir de la sauvegarde physique précédemment chargée dans Spaces, nous allons transférer la sauvegarde sur notre serveur de base de données, puis utiliser les fichiers extraits en tant que répertoire de données MySQL restauré.
Commençons par transférer la sauvegarde de notre espace vers le répertoire de base de l’utilisateur sur le serveur de base de données:
s3cmd get s3://mysql-backup-demo/mysql_backup_180423.tar.gz ~/mysql_backup_180423.tar.gz
Vous devriez voir une sortie de transfert de fichier:
Outputdownload: 's3://mysql-backup-demo/mysql_backup_180423.tar.gz' -> '~/mysql_backup_180423.tar.gz' [1 of 1]
1451889 of 1451889 100% in 0s 38.49 MB/s done
Nous allons maintenant arrêter le serveur de base de données en cours d'exécution et purger le répertoire de données existant, car nous souhaitons tester une restauration complète à partir des fichiers de sauvegarde physiques.
Tout d’abord, arrêtez le serveur MySQL:
sudo service mysql stop
Supprimez maintenant le contenu de votre répertoire de données MySQL:
sudo rm -rf /data/*
Rappelez-vous que dans ce tutoriel, le chemin du répertoire de données MySQL non par défaut est/data
.
Maintenant, extrayez l’archive de sauvegarde physique dans votre répertoire de données MySQL:
sudo tar -xzvf ~/mysql_backup_180423.tar.gz -C /data
Maintenant que les fichiers de données ont été restaurés, nous pouvons redémarrer la base de données MySQL et lui permettre de récupérer:
sudo service mysql start
Enfin, nous pouvons nous connecter à notre serveur de base de données pour vérifier que la restauration a abouti:
mysql -u root -p
Après avoir entré votre mot de passe, vous devriez voir l'invite du client MySQL:
OutputWelcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
À partir de là, vous pouvez analyser certaines tables pour vérifier que vos données sont intactes.
Conclusion
Dans ce didacticiel, nous avons montré comment exploiter la fonctionnalité d’instantané de LVM pour geler le système de fichiers et effectuer une sauvegarde physique complète et une restauration d’une instance MySQL en cours d’exécution. Si vous utilisez LVM pour gérer un ou plusieurs volumes de stockage contenant vos données MySQL, cette fonctionnalité constitue une méthode pratique pour sauvegarder votre base de données de production.
Dans un contexte de production, cette procédure doit idéalement être scriptée et planifiée avec une journalisation, une surveillance et une alerte appropriées. En outre, unFLUSH TABLES WITH READ LOCK
(aussi bref soit-il) ne doit pas être exécuté sur le serveur maître mais sur une réplique à charge minimale. Notez qu'avec de légères modifications, vous pouvez également adapter la procédure ci-dessus pour créer rapidement des répliques à partir d'une sauvegarde physique principale.
Si votre instance MySQL utilise exclusivement InnoDB comme moteur de stockage, vous pouvez également utiliser Percona XtraBackup pour effectuer des sauvegardes physiques de votre base de données de la même manière. Pour en savoir plus, consultez notre tutoriel sur lesHow To Back Up MySQL Databases to Object Storage with Percona on Ubuntu 16.04.
Une alternative raisonnable au téléchargement de fichiers de sauvegarde physiques vers Spaces serait d'utiliser des instantanés LVM en combinaison avec des instantanés Droplet. Pour en savoir plus sur les instantanés de gouttelettes, consultezDigitalOcean Backups and Snapshots Explained.
Pour en savoir plus sur DigitalOcean Spaces, le magasin d'objets utilisé dans ce guide, consultezAn Introduction To DigitalOcean Spaces.