2010-01-29 4 views
3

J'ai 200GB/400Mrows mysql/base de données innodb - bien au-delà de ce qui est raisonnable comme je l'ai découvert.Sauvegardes fiables pour les énormes bases de données mysql?

Un problème surprenant est la restauration des sauvegardes. mysqldump génère d'énormes fichiers sql, et il faut environ une semaine pour les importer dans une nouvelle base de données (tentatives de les rendre plus rapides comme des transactions plus grandes/plus petites, désactiver des clés pendant l'importation, etc. 2x plus rapide mais il n'y aurait pas de transactions). Ce qui est pire - et j'espère obtenir de l'aide avec ceci - une connexion réseau qui transfère> 200GB sur une période de temps d'une semaine a une chance non-trivial de casser, et le processus d'importation de sql ne peut pas continuer dans n'importe quel non façon -triviale.

Quelle serait la meilleure façon de traiter avec elle? En ce moment, si je remarque une connexion interrompue J'essaie manuellement de savoir quand il a fini en vérifiant la plus haute clé primaire de la dernière table importée, puis un PerlScript qui fait essentiellement ceci:

perl -nle 'BEGIN{open F, "prelude.txt"; @a=<F>; print @a; close F;}; print if $x; $x++ if /INSERT.*last-table-name.*highest-primary-key/' 

Ceci est vraiment pas le chemin à parcourir, alors quelle serait la meilleure façon?

Répondre

1

Votre boîte MySQL ont assez d'espace disque dur pour toutes les données ont doublé? Le stockage local serait le meilleur ici, mais si ce n'est pas une option, vous pouvez également essayer une sorte de périphérique NAS utilisant iSCSI. Cela se passe toujours sur le réseau, mais dans ce cas, vous bénéficiez d'un débit et d'une fiabilité accrus, car vous ne faites confiance qu'à un NAS doté d'un système d'exploitation plutôt fin et qui ne doit presque jamais être redémarré.

+0

Tout est sur le cloud Amazon.Il n'y a pas eu de crash jusqu'à présent, mais je ne me sens pas très heureux du fait que s'il y en a un, il faudra au moins une semaine pour restaurer les sauvegardes + scripts perl ad hoc aléatoires s'il échoue à mi-chemin pour une raison quelconque. – taw

0

Avez-vous besoin de tout dans la base de données?

Pouvez-vous pousser certaines informations à une base de données d'archives et ajouter quelque chose dans votre application qui permettrait aux gens de voir les enregistrements dans l'archive,

Évidemment, cela dépend beaucoup de votre application et mis en place, mais il peut-être une solution? Votre DB est probablement va grossir ....

+0

À long terme, il sera nécessaire de le réparer, mais pour l'instant j'essaie simplement de tout faire fonctionner correctement. – taw

1

Vous ne pouvez pas utiliser mysqldump à grandes bases de données de sauvegarde - 200G est possible, mais plus grands il y a pire et pire encore.

Votre meilleur pari est de prendre un instantané de volume du répertoire de base de données et zip en quelque sorte - c'est ce que nous avons fait en général - ou rsync ailleurs.

Si votre système de fichiers ou un périphérique de bloc ne prend pas en charge les instantanés, alors vous êtes essentiellement en difficulté. Vous pouvez fermer le db pour faire une sauvegarde, mais je ne pense pas que vous voulez faire cela.

Pour restaurer, il suffit de faire le contraire redémarrer et attendre (peut-être un certain temps) pour la récupération de InnoDB pour corriger les choses.

Le maatkit mk-parallèle dump et restore outils sont un peu mieux que mysqldump, vitesse sage - mais je ne suis pas convaincu à 100% de leur exactitude


Edit: relecture la question, je pense que snapshot filesystem + rsync est probablement la meilleure façon de procéder; vous pouvez le faire sans impact sur le système en direct (vous aurez seulement besoin de transférer ce qui a changé depuis la dernière sauvegarde) et vous pouvez reprendre le rsync si la connexion échoue, et il continuera là où il s'est arrêté.

+0

une note importante à cet égard est de s'assurer que vous sauvegardez les fichiers ibdata (ibdata1 etc) dans le répertoire de données de mysql. Ceci est utilisé par innodb et sans lui les sauvegardes seront erronées. –

Questions connexes