En ce moment, je suis capable de faire la sauvegarde en utilisant mysqldump. Mais je dois arrêter le serveur Web ET cela prend environ 5 minutes pour faire la sauvegarde. Si je ne supprime pas le serveur Web, cela prend une éternité et ne se termine jamais + le site Web devient inaccessible pendant la sauvegarde.
Existe-t-il un moyen plus rapide / meilleur de sauvegarder mes 22 Go et une base de données croissante?
Toutes les tables sont MyISAM.
Réponses:
Oui.
Configurez la réplication sur une deuxième machine. Lorsque vous devez effectuer une sauvegarde, vous pouvez verrouiller la machine secondaire, exécuter mysqlhotcopy ou mysqldump, puis la déverrouiller. Il rattrapera votre maître et vous n'aurez jamais à le mettre hors ligne.
Vous pouvez même le faire sur la même machine, si cela ne vous dérange pas de doubler les E / S d'écriture, mais idéalement, vous devez les sauvegarder en temps réel sur un deuxième serveur physique et effectuer vos sauvegardes de clichés aussi souvent que vous le souhaitez. sans déranger votre serveur de production.
Il est également théoriquement possible de restaurer une base de données en utilisant un état connu et des binlogs. Je ne l'ai jamais fait, alors veuillez d'abord enquêter, mais vous pouvez sauvegarder un état connu de votre base de données, puis simplement sauvegarder tous les nouveaux binlogs et les relire si vous avez besoin de restaurer. Les binlogs étant écrits de manière linéaire, la synchronisation de nouveaux binlogs sur un ordinateur distant serait très rapide.
Edit: En effet, il semble que l'utilisation de binlogs pour la sauvegarde soit documentée.
Cette question est fortement liée
la source
Pardonnez-moi d'avoir supposé que le système d'exploitation est Linux. Si vous n'utilisez pas LVM, vous devriez l'être. Si vous l'êtes, voici un moyen très simple de faire des sauvegardes via un instantané.
Cela vous permettra de faire des sauvegardes nocturnes sans avoir à ajouter de serveur esclave. Je suis très favorable à un serveur esclave pour la haute disponibilité, mais je ne veux pas que vous pensiez que vous êtes bloqué jusqu'à ce que vous puissiez créer cet esclave.
la source
TABLES DE RINÇAGE AVEC VERROUILLAGE EN LECTURE n'est pas quelque chose que vous voulez faire de façon régulière (ou même semi-régulière) sur un système de production. Ce ne devrait être qu'un dernier recours.
Configurez au moins deux esclaves de réplication (cela nécessitera bien sûr un FLUSH TABLES WITH READ LOCK). Une fois qu'ils sont configurés, vous pouvez supprimer une sauvegarde tandis que l'autre reste synchronisé en tant que maître de rechange.
De plus, si l'un de vos esclaves tombe en panne, vous pouvez alors utiliser un instantané de celui-ci pour reconstruire un deuxième (ou troisième) esclave. Si tous vos esclaves échouent, vous êtes de retour à RINCER LES TABLES AVEC LECTURE VERROU.
N'oubliez pas de toujours avoir un processus qui vérifie régulièrement que les données sont synchronisées - utilisez quelque chose comme mk-table-checksum pour ce faire (ce n'est pas trivial à configurer, consultez la documentation Maatkit pour plus de détails).
Comme 22 Go sont relativement petits, vous n'aurez aucun problème à le faire. Le faire avec une grande base de données pourrait être plus problématique.
la source
La solution ici est double, comme décrit ci-dessus:
Notez que si vous utilisez InnoDB pour vos tables, vous pouvez utiliser l'indicateur --single-transaction pour éviter d'avoir à verrouiller les tables et toujours obtenir un vidage cohérent de la base de données, même sur le maître, et donc effectuer vos sauvegardes sans démonter le serveur. Cependant, la solution ci-dessus est meilleure.
De plus, si vous utilisez LVM sous Linux, vous pouvez prendre un instantané LVM de la partition, puis le sauvegarder. Les instantanés LVM sont atomiques, donc si vous effectuez un `` vidage de tables avec verrouillage en lecture '' puis prenez votre instantané et déverrouillez, vous obtiendrez un instantané cohérent.
Si vous êtes préoccupé par la contention d'E / S rendant le vidage trop long, vous pouvez ajouter une troisième machine et exécuter mysqldump sur celle-ci sur le réseau pour éviter de saturer vos disques.
la source
Selon votre environnement, les instantanés sont généralement une excellente façon de procéder. Surtout si vous devez sauvegarder le maître pour une raison quelconque. Nous exécutons des paires maître et esclave et utilisons des sauvegardes instantanées sur les deux.
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
Avec les tables InnoDB, vous voudrez exécuter
SET AUTOCOMMIT=0;
avant d'exécuter le verrou de lecture.la source
Jetez un œil à " Meilleures pratiques pour sauvegarder une base de données MySQL de production? ". Il s'agit d'un article similaire sur Stack Overflow.
la source
Vous pouvez effectuer une sauvegarde progressive. Sauvegardez 1 / 24ème des enregistrements toutes les heures. Le seul problème avec cette approche est que si elle se bloque pendant les premières heures de la journée, vous perdrez quoi que ce soit entre ce moment et le moment de l'accident. De toute façon, c'est moins de 24 heures de records perdus (je ne sais pas à quel point c'est important pour vous).
la source