mysqldump ou mysqlhotcopy pour la sauvegarde de grandes bases de données MySQL?
J'ai quelques NAS stockage de faire des sauvegardes avec mon fournisseur d'hébergement. J'configuration automatique des sauvegardes quotidiennes avec WHM pour sauvegarder les bases de données et les comptes. Le serveur hébergeant un site. Quand il fait le backup, il fait un dump mysql, et essentiellement le site vers le bas pour tout le temps, il est en train de faire la sauvegarde, car personne ne peut se connecter à la base de données tandis que le dump qui se passe. Le site est généralement environ 30 secondes à une minute (cela peut ne pas sembler beaucoup, mais pour ce genre de site c'est un vrai problème).
Est-il une meilleure façon de faire la sauvegarde de sorte que cela ne se produira pas (serait mysqlhotcopy ou Maatkit être mieux?), que ce soit une autre méthode de sauvegarde sur NAS, ou tout simplement ne pas utiliser le NAS à tous et à l'aide d'une autre méthode.
Vous devez vous connecter pour publier un commentaire.
mysqlhotcopy est plus rapide que la commande mysqldump, mais ne pas le faire InnoDB.
De faire des sauvegardes, j'utilise la réplication et de faire des dumps sur l'esclave. Vous obtenez 0 les temps d'arrêt et pas de pic de charge pendant le processus de sauvegarde.
Pour InnoDB, la solution optimale sans réplication semble être:
Qui utilise InnoDB transactions de la fonctionnalité de capture et permet à la normale (écrire!) les bases de données des opérations sans interruption à tous. Avec
--master-data=1
, vous devriez être en mesure d'enregistrer automatiquement le log binaire de la position de l'instantané. Cependant, le log binaire position semble assez inutile quand vous faites cela, séparément sur plusieurs bases de données sur le même serveur.Un inconvénient est que cela ne fonctionne pas correctement lorsque vous avez quelques tables MyISAM. J'ai moi-même faire usage de MySQL fulltext d'indexation qui exige non partitionné les tables MyISAM. Cependant, on pourrait arranger les choses de telle manière que les tables MyISAM, ne sont que secondaires des ensembles de données dans laquelle on les vidages de textes déjà existants dans les tables InnoDB, tels que les tables MyISAM pourrait être reconstruit à partir de zéro en cas de besoin. J'ai un script qui vérifie les bases de données de la table des types et utilisations des
--single-transaction
au lieu de--lock-tables
chaque fois qu'il y a seulement les tables InnoDB à l'intérieur d'une DB.Une autre solution serait d'utiliser le disque ou le système de fichiers fonctionnalité de capture, par exemple LVM. Mais qui serait assez important de performances lors de l'écriture tandis que les instantanés existent en raison de LVM est très con de sauvegarde-sur-mécanisme d'écriture (qui est faussement prétendu être VACHE, qu'il n'est pas dans le bon sens). Une assez bonne solution semble donc être de MySQL sur Solaris ZFS ou sur FreeBSD UFS. À la fois soutenir efficace instantanés et d'être relativement stable en raison de leur âge. Btrfs est efficace instantanés, trop, mais il est encore une version BÊTA.
Vous n'auriez pas besoin d'un autre serveur, il suffit de mettre une autre installation de MySQL dans un bac à sable sur la même machine. Charge de spike un peu, mais vous n'aurez pas de problèmes de verrouillage.
ok, il est encore un autre plutôt efficace de la technologie snapshot: mdraid1 -- Linux softraid de niveau 1. Si vous exécutez MySQL sur mdraid1, il suffit de brancher un autre disque, laissez-sync, arrêter mysql, effectuez une synchronisation, supprimer le troisième et synchronisés raid composant, le redémarrage de mysql. Si vous utilisez des images avec votre raid1, une re-synchronisation de prendre un autre cliché est en général assez rapide....