web-dev-qa-db-fra.com

Sauvegarde MySQL non bloquante

Je gère un serveur MySQL avec quelques bases de données client, dont certaines sont assez grandes. Nous faisons un Terminez MySQL Dump une fois par jour. Il faut environ une demi-heure à compléter.

Pendant ce temps, chaque demande au serveur MySQL obtient une réponse ridiculement lente (parfois autour de 1 s au lieu de quelque chose comme 10 ms). Même s'il n'y a pas d'erreurs de délai d'attente, j'aimerais voir que les requêtes sont terminées dans une durée décente, de sorte que les sites Web des clients ne sont pas ralentis en suspens sur les requêtes MySQL.

J'ai étudié beaucoup et appris à propos de la réplication des données, des instantanés LVM, de diverses options de drapeau mysqldump et d'autres travaux, mais rien n'a vraiment amélioré la situation.

Y a-t-il une option pour définir une priorité de requête dans MySQL?

S'il y avait un moyen de définir des priorités de requête, je pourrais donner le processus de sauvegarde une priorité plus faible pour être sûr que toutes les autres requêtes sont exécutées plus rapidement. Le processus mysqldump pourrait être temporairement mis en pause (SIGTSTP) lorsqu'il est contesté par une autre demande et poursuivi (SIGCONT) lorsque la requête est terminée. Cependant, je n'ai pas pu trouver une fonctionnalité comme celle-ci dans MySQL Nativement.

Donner le processus mysqldump Processus Une valeur supérieure Nice ne fonctionne pas, car elle augmente simplement le temps, le processus de sauvegarde et les serrures de table seront présents. (Je verrouille par table.) De plus, limitatif IO Les taux d'écriture entraînent une douleur plus longue.

Y a-t-il des solutions que j'ai manquées, autres que LVM et la réplication?

5
Gerald

Vous devriez certainement jeter un coup d'œil à xtrabackup par Percona, qui vient de copier le répertoire de données au lieu d'interroger la DB.

Si vous souhaitez continuer à utiliser MySqldump, vous devez vérifier le rapide option :

mySqldump peut récupérer et décharger le contenu de la table Row par ligne, ou peut récupérer l'ensemble du contenu d'une table et la mémoire tampon en mémoire avant de le jeter. La mémoire tampon en mémoire peut être un problème si vous déversez de grandes tables. Pour vider la ligne de tables à la ligne, utilisez l'option --Quick (ou --Opt, qui permet à --Quick). L'option --OPT (et donc --Quick) est activée par défaut, afin d'activer la mémoire tampon de la mémoire, utilisez -skip-rapide.

1
s.meissner