J'ai récemment découvert que nos serveurs Web de production fonctionnant avec MySQL ne sont pas sauvegardés régulièrement (ou pas du tout). J'ai l'habitude de sauvegarder des bases de données SQL Server mais je n'ai pas une tonne d'expérience avec les bases de données MySQL. Quelles sont les meilleures pratiques pour utiliser 'mysqldump' ou tout autre outil de sauvegarde DB?
Je vais probablement cron job le calendrier afin qu'il se fasse tous les soirs, puis sauvegarder les fichiers avec mon système de sauvegarde.
Merci.
Meilleures pratiques pour effectuer une sauvegarde du serveur MySQL:
Configuration de la réplication dans MySQL. Vous devrez configurer le serveur maître et esclave. Toutes les écritures en lecture dans la base de données peuvent être transférées vers votre serveur esclave. L'avantage de la réplication est que vous pouvez effectuer une sauvegarde de votre serveur esclave sans interrompre le serveur maître. Votre application continuera de fonctionner sur le maître sans aucun temps d'arrêt.
Si votre ensemble de données est petit (je me rends compte que "petit" est un terme relatif .. pour le qualifier, disons <10 Go), alors mysqldump fonctionnera probablement très bien. C'est facile, c'est en ligne et c'est très flexible. Juste quelques choses que mysqldump peut faire: sauvegarder tout ou simplement certaines bases de données ou tables sauvegarder uniquement le DDL optimiser le vidage pour une restauration plus rapide rendre le fichier sql résultant plus compatible avec d'autres SGBDR et bien d'autres choses.
Cependant, les options les plus importantes sont liées à la cohérence de votre sauvegarde. Mes options préférées sont: --single-transaction: cette option donne une sauvegarde cohérente, si (et seulement si) les tables utilisent le moteur de stockage InnoDB. Si vous avez des tables MyISAM non en lecture seule, n'utilisez pas cette option lors de leur sauvegarde. --master-data = 2: cette option s'assurera que votre vidage est cohérent (en effectuant un verrouillage de toutes les tables sauf si vous avez ajouté l'option --single-transaction). L'option --master-data enregistre également la position du journal binaire dans le fichier de vidage résultant (= 2 fait que cette ligne est un commentaire dans le fichier de vidage)
Remarque finale sur mysqldump: gardez à l'esprit que le temps de restauration peut être considérablement plus long que le temps de sauvegarde. Cela dépendra de plusieurs facteurs, par exemple le nombre d'index dont vous disposez.
Pour ceux qui ont des ensembles de données plus importants, une sauvegarde physique est la solution. Bien que vous puissiez effectuer une sauvegarde à froid (c'est-à-dire arrêter le service MySQL, copier le répertoire de données, redémarrer le service), de nombreuses personnes ne veulent pas de temps d'arrêt. Ma solution préférée est les instantanés. Cela peut être chaud (pour InnoDB) ou nécessiter un bref verrouillage (pour MyISAM). N'oubliez pas d'inclure toutes vos données (notamment les ib_logfiles). Lenz fournit un utilitaire Nice pour vous aider: http://www.lenzg.net/mylvmbackup/
Avantages de l'utilisation de MySQL Enterprise Backup:
Référence: http://www.mysql.com/products/enterprise/backup/features.htmlhttp://www.mysql.com/products/enterprise/backup.html
Je recommanderais de configurer un réplique dédiée à utiliser pour la sauvegarde. Cela vous permettra d'effectuer toutes les tâches de sauvegarde sans impact sur le principal. Comme cela ajoute de la complexité à votre architecture, vous souhaiterez surveiller le retard de réplication pour vous assurer que tout fonctionne.
En ce qui concerne le processus réel, vous disposez de quelques options sans outils tiers. Les instantanés peuvent être pris à l'aide de la commande mysqldump
(en supposant que vous utilisez InnoDB): mysqldump --all-databases --single-transaction > all_databases.sql
. Selon la taille des données, il peut être préférable d'arrêter MySQL et de sauvegarder directement les fichiers de données. Lorsque la réplique est redémarrée, elle rejouera tous les événements que le principal a reçus pendant la durée de son interruption. Si vous utilisez MySQL Enterprise, l'utilitaire mysqlbackup
le fait.
Des sauvegardes incrémentielles peuvent être effectuées en activant journal binaire sur la réplique. De toute évidence, cela enregistre uniquement les événements qui mutent les données, vous devrez donc combiner cela avec les instantanés ci-dessus.