J'ai trouvé un certain nombre de sites qui parlent de faire exactement cela, mais je manque quelques détails importants. Les étapes générales sont
- Courir
FLUSH TABLES WITH READ LOCK
- Prenez l'instantané ZFS
- Courir
UNLOCK TABLES
Diverses sources signalent qu'InnoDB, que j'utilise, ne respecte pas réellement a FLUSH
. Le manuel d'utilisation de MySQL note qu'il existe une FLUSH TABLES...FOR EXPORT
variante à utiliser avec InnoDB, mais qui nécessite de spécifier chaque table individuellement, plutôt que de sauvegarder l'intégralité de la base de données. Je préfère éviter de spécifier chaque table individuellement car il y a de fortes chances que la liste des tables ne soit plus synchronisée avec les tables qui existent réellement.
L'autre problème que j'ai, c'est que j'avais prévu de faire quelque chose comme ça mysql -h"$HOST" -u"$USERNAME" -p"$PASSWORD" --execute="FLUSH TABLES WITH READ LOCK"
. Toutefois, cela supprime le verrou immédiatement après la fin de la session. Cela a du sens, mais est également assez ennuyeux car je dois maintenir le verrou de lecture lorsque je prends mon instantané.
Mon autre idée est de faire une sauvegarde à chaud en utilisant un outil comme Percona XtraBackup et de prendre des instantanés de la sauvegarde, mais je préférerais ne pas payer le coût d'écrire toutes mes données vers un deuxième emplacement juste pour les instantaner.