2010-01-13 8 views
-1

J'utilise php, mysql et mon serveur est Windows Server 2003 avec IIS6.Comment créer un fichier exécutable de sauvegarde MySQL?

Je prévois de sauvegarder ma base de données sur une base horaire. Je peux faire le cronjob, testé par écrit la date & dans un fichier journal. Cela fonctionne parfaitement.

Maintenant, je veux utiliser le cronjob pour sauvegarder mes bases de données. Comment je fais ça? Créer un script PHP et laissez-le fonctionner toutes les heures?

Répondre

0

Windows a intégré Task Scheduler que vous pouvez utiliser pour effectuer vos sauvegardes.

+0

Pouvez-vous s'il vous plaît expliquer plus sur la façon d'utiliser Task Scheduler pour sauvegarder les bases de données sur une base horaire? – mysqllearner

0

Utilisez l'outil mysqldump pour vider vos bases de données dans un fichier.

2

Utilisez mysqldump. Exemple (avec les options que j'utilise habituellement):

mysqldump --single-transaction --hex-blob --opt -e --quick --quote-names -r put-your-backup-filename-here put-your-database-name-here 
+0

Dois-je créer un fichier batch et le faire fonctionner toutes les heures? Je suis nouveau à mysqldumb, pouvez-vous élaborer plus sur ceci? – mysqllearner

+0

Oui, faites-le dans un fichier .bat. Mysqldump est exécuté à partir de la ligne de commande (par exemple, la fenêtre "DOS"). –

0

Je pense que vous pouvez tâche cron utilisateur pour lancer une copie des fichiers db, je ne scénario pense pas que tâche cron pour exécuter php qui permet la sauvegarde est un bon choix (c'est complexe sans en avoir besoin). Je pense aussi que mysqldump est un bon choix, mais je ne peux pas vous aider à ce sujet.

+0

Ce n'est pas une bonne idée de copier les fichiers lorsque la base de données est en cours d'exécution. Cela peut causer des fichiers corrompus qui dans le pire des cas ne peuvent pas être réparés par MySQL. C'est absolument horrible comme solution de sauvegarde. –

0

Éditer: Ce script est destiné à Unix (ou aux variantes).

Je voulais faire la même chose (y compris l'envoi d'un e-mail de la sauvegarde et l'archivage mon code/pages ainsi) et a écrit quelque chose comme ceci:

#! /bin/bash 

NOW=`date +"%Y-%m-%d"` 
MAIL_TO="[email protected]"; 
MAIL_SUBJECT="Hourly backup" 
MAIL_MESSAGE="mail-message"; 

DB_FILE="backup-database-$NOW.sql.gz" 
SITE_FILE="website-$NOW.tar.gz" 

echo "Database dump:" >> $MAIL_MESSAGE 
mysqldump --defaults-extra-file=.mysql-pwd --add-drop-table -C my_databse 2>> $MAIL_MESSAGE | gzip > $DB_FILE 2>> $MAIL_MESSAGE 

echo "Site dump (www and php-include):" >> $MAIL_MESSAGE 
tar -zcf $SITE_FILE /path/to/www/ /path/to/php-include/ 2>> $MAIL_MESSAGE 

echo >> $MAIL_MESSAGE 
echo >> $MAIL_MESSAGE 
echo "Done" >> $MAIL_MESSAGE 

mutt -s "$MAIL_SUBJECT" -a $DB_FILE -a $SITE_FILE $MAIL_TO < $MAIL_MESSAGE 
+0

C'est cool. Peut-être que je sais, pourrais-je utiliser ce script? Des problèmes rencontrés jusqu'à présent? – mysqllearner

+0

Bien sûr, vous pouvez utiliser (et modifier à vos propres fins), c'est pourquoi je l'ai posté. Je l'utilise depuis plus d'une demi-année maintenant (sauvegarde hebdomadaire) et je reçois toujours mon email chaque semaine. – Veger

+0

C'est tellement cool. Pourriez-vous m'aider avec ça? Comment tu fais ça? J'ai édité votre script dans le pavé de texte, et maintenant quel format de fichier dois-je enregistrer en tant que?Et comment puis-je le faire fonctionner quotidiennement/hebdomadairement/mensuellement, etc.? S'il vous plaît, aidez-nous – mysqllearner

1

Comme d'autres l'ont écrit, l'outil mysqldump est la solution la plus simple, cependant si vous avez une base de données volumineuse, même avec le réglage --quick, je vous recommande de faire quelques expériences. Avec l'ancien moteur C-ISAM, les requêtes sont traitées une à la fois. Bien que ce soit moins un problème avec InnoDB, je ne suis pas sûr que MySQL supporte maintenant toutes les requêtes simultanées. Votre sauvegarde peut affecter le traitement transactionnel. Si cela s'avère être un problème, alors une solution simple serait de configurer une instance esclave de la base de données fonctionnant sur la même machine, puis d'exécuter mysqldump par rapport à cela, ou d'arrêter temporairement l'esclave en sauvegardant le brut fichiers de données. Vous pouvez également pousser la mise en miroir au niveau du système d'exploitation et effectuer une capture instantanée au niveau du disque, mais vous devez arrêter les transactions sur la base de données et la vider avant de créer l'image instantanée (ou de casser le miroir).

C.

+0

+1 pour créer une sauvegarde (complète) sur un esclave. J'aimerais pouvoir donner un autre +1 pour mentionner les transactions et/ou la cohérence des données. – VolkerK

Questions connexes