J'ai un document décemment Big MySQL DB (Innodb) avec taille d'environ 400 Mo. Ainsi dumping Toute la base de données avec mysqldump et restauration le retour prend pour toujours (plus de 15 minutes, qui est inacceptable).
Pour déboguer, je dois exécuter mon code contre une certaine "version" de la DB, puis revenir toutes les modifications appuyées (le cas échéant) et essayez à nouvea (éventuellement plusieurs fois). Afin de reproduire un bogue, je dois toujours commencer à partir de la même version de DB.
Y a-t-il un moyen d'indiquer manuellement le dB à créer un instantané de point à temps et ensuite Restaurer la demande à la demande? Cela devrait idéalement prendre quelques secondes seulement (j'imagine qu'une méthode de copie-écriture serait utilisée).
Je cherche une solution indépendante de l'application finale. Imaginez une application Web que vous devez exécuter vos tests de robots sur (qui inclut plusieurs cycles de demande/réponse). De plus, si nous traitons la demande comme éventuellement de buggy, nous ne pouvons pas non plus lui faire confiance pour gérer de manière fiable les retombées sur les transactions.
J'ai juste essayé de sauvegarder /var/lib/mysql
avec rsync
. Impossible même de démarrer MySQL après la restauration, il y a probablement du fichier laissé quelque part qui enfreint l'intégrité. Quoi qu'il en soit, je cherchais une solution de niveau plus supérieure, recours aux sauvegardes de niveau FS uniquement comme dernier espoir.
Copier le répertoire de données, comme vous l'avez mentionné, est un moyen d'accomplir ce dont vous avez besoin. Voici les étapes et si vous faites face à une erreur, veuillez le poster.
FLUSH TABLES WITH READ LOCK
[IMPORTANT : Gardez le terminal ouvert]cp
ou rsync
UNLOCK TABLES
chown mysql:mysql dir_name
(Je pense que c'est chown -r
, donc ça marche récursivement)Jusqu'à présent, vous avez plusieurs copies des données au moment où vous avez besoin.
Afin de "restaurer" une copie, vous pouvez faire l'une des opérations suivantes:
datadir
dans my.cfg (ou my.ini) à un emplacement de l'une des copies de données et redémarrez le serveur; OU ALORSÉtablissez LVM sur le système de fichiers. Ensuite, un instantané prend moins d'une seconde, quelle que soit la taille du jeu de données. Vous obtenez une copie séparée du disque, mais avec des blocs inchangés partagés. Les blocs modifiés sont "Copy-on-write", vous devez donc souffler l'instantané avant de pousser trop gros. (Soudls comme ça n'est pas un problème.)
Puisqu'il y a essentiellement NO Copie de données (A la MySqldump ou les vidages de fichiers), il est très rapide. Vous auriez deux instances exécutées sur la même machine, mais dirigez-vous de "volumes logiques", afin qu'ils puissent fonctionner de manière indépendante. (Remarque: utilisez un autre port pour chaque instance.)