Jump to content

Sauvegarde Base de donnée et envoyer mail (idéal cron)


 Share

Recommended Posts

Bonjour.

Le script est fonctionnel, mais je suis certain qu'on peu encore l'améliorer.

<?php
/* Modifiez vos parametres MySQL */
$base = ""; // Serveur de base de donnée
$host = ""; // Base de données    /* pour acceder a la base vielle de 7 jours, ajoutez -s à la fin du nom, comme ceci: NomDeLaBaseSQL-s */
$user = ""; // Utilisateur
$passe = ""; // Mot de passe
$db_charset = "utf8"; /* mettre utf8 ou latin1 */
$date = date("Y-m-j-H-i"); // date année-mois-jour-heure-minute
$site = "nom du site"; // nom du site

$to = "[email protected]"; // adresse du destinataire
$sujet = "Backup de la base de donnee"; // sujet du mail
$fichier = $site.'_'.$date.".sql.zip"; // fichier crée
$reply = "[email protected]"; // adresse de réponse
$from = $reply; // adresse de l'expediteur

/* C'est tout. Placez ce fichier par FTP quelque part sur votre serveur Web, dans un endroit discret. */
/* Puis ouvrez-le avec votre navigateur web et suivez les instructions. */

// on crée le fichier et si le fichier est present sur le serveur alors ....
if (system("mysqldump --host=$base --user=$user --password=$passe -C -Q -e --default-character-set=$db_charset $host | gzip -c > $fichier"));
{   
   // envoyer le mail
   mail_attachement($to , $sujet , $fichier , $typemime , $fichier , $reply , $from);
   // suppression du fichier
   unlink($fichier);
}

function mail_attachement($to , $sujet , $fichier , $typemime , $fichier , $reply , $from){ 
   $limite = "_parties_".md5(uniqid (rand())); 

   $mail_mime = "Date: ".date("l j F Y, G:i")."\n"; 
   $mail_mime .= "MIME-Version: 1.0\n"; 
   $mail_mime .= "Content-Type: multipart/mixed;\n"; 
   $mail_mime .= " boundary=\"----=$limite\"\n\n"; 

   //Le message en texte simple pour les navigateurs qui n'acceptent pas le HTML 
   $texte = "This is a multi-part message in MIME format.\n"; 
   $texte .= "Ceci est un message est au format MIME.\n"; 
   $texte .= "------=$limite\n"; 
   $texte .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n"; 
   $texte .= "Content-Transfer-Encoding: 7bit\n\n"; 
   $texte .= "\n\n"; 

   //le fichier 
   $attachement = "------=$limite\n"; 
   $attachement .= "Content-Type: $typemime; name=\"$fichier\"\n"; 
   $attachement .= "Content-Transfer-Encoding: base64\n"; 
   $attachement .= "Content-Disposition: attachment; filename=\"$fichier\"\n\n"; 

   $fd = fopen( $fichier, "r" ); 
   $contenu = fread( $fd, filesize( $fichier ) ); 
   fclose( $fd ); 
   $attachement .= chunk_split(base64_encode($contenu)); 

   $attachement .= "\n\n\n------=$limite\n"; 
   return mail($to, $sujet, $texte.$attachement, "Reply-to: $reply\nFrom: $from\n".$mail_mime); 
}

?>



Es ce qu'il y a moyen de récupérer toutes les info (Serveur de base de donnée , utilisateur, nom du site etc...) pour éviter de les marquer dans le dur du code ?

Merci

Share this post


Link to post
Share on other sites

Bonjour,

Vous pouvez toujours rajouter les includes en entête de fichier pour récupérer tout ce qu'il vous faut :

<?php
// si le script est à la racine
require_once(dirname(__FILE__).'/config/config.inc.php');
require_once(dirname(__FILE__).'/init.php'); 

/* Modifiez vos parametres MySQL */
$base =_DB_SERVER_; // Serveur de base de donnée
$host =  _DB_NAME_; // Base de données    /* pour acceder a la base vielle de 7 jours, ajoutez -s à la fin du nom, comme ceci: NomDeLaBaseSQL-s */
$user = _DB_USER_; // Utilisateur
$passe = _DB_PASSWD_; // Mot de passe

[...]

etc, etc,



Faites attention $base et $host ont été inversé dans votre code, c'est fonctionnel avec ce que je vous ai mis car j'ai repris l'inversion, mais c'est pas logique.

Bien cordialement

Share this post


Link to post
Share on other sites

  • 2 weeks later...
Bonsoir.

J'ai crée ce module, mais j'ai besoin d'avis de gens bien plus competent que moi ;)

J'suis pas certain que le cron fonctionne bien.

Un conseil ou une aide, je prends avec plaisir ;)

Bon dev


Riche idée en tout cas.
Comme j'ai la chance d'avoir sous la main quasiment que des dédiés , je fais mes backups en bash et upload sur un remote ftp.
Celà dit quelques clients font exception et ton module pourrait s'avérer utile.
Je vais le tester avec plaisir, y compris en cron si ça peut t'aider.

Première idée néanmoins, avant même de le tester, ce serait de voir si quitte à utiliser la commande system() , il ne serait pas préférable par souci de rapidité et d'allègement de la tâche d'utiliser mysqlhotcopy plutot que mysqldump, suivi d'un tar pour allèger le mail. J'ai pu me permettre de faire des dumps chaque heure grace à hotcopy là ou je n'en faisais qu'un à deux par jour pour ne pas charger la mule et laisser la fluidité aux visiteurs.

Ce qui me fait peur , c'est que les BDD presta mêmes compressées font rarement moins de 4MO et que peu de personnes pourront se permettre de s'envoyer le dump par mail ? Un lien de téléchargement du fichier ne serait-il pas plus prudent ?

Dans tous les cas je vais tester ;) merci pour cette contrib

Share this post


Link to post
Share on other sites

Bonjour.

Comme tu le dis, la base de donnée n'est pas envoyer par mail, puisque la taille ne le permet pas. Par contre, j'envoie le lien pour la récupérer.

Merci des retours, je vais surement mettre le module dans la partie module tiers et continuer à dev tranquillou

Share this post


Link to post
Share on other sites

  • 2 weeks later...

salut, j'ai testé ton module qui est extrement pratique ! Bravo !! mais apparament avec ovh le script ne fonctionne pas du moins chez moi :( . Le module me donne le lien /homez.406/monsite/www/monsite/modules/backupbdd/savecron.php?key=F3RCEKU............ et ovh me renvoie dans un log page not found 404. Tu sais peut etre comment je peu resoudre ca?

Share this post


Link to post
Share on other sites

  • 1 year later...
  • 2 weeks later...
  • 1 month later...

Bonjour à tous,

 

Un grand Merci pour ce partage !

Je viens d'installer le script de Vins83 sur un ovh mutualisé et tout à l'air de bien fonctionner.

J'ai juste un message d'erreur :

 

Notice: Undefined variable: typemime in /homez.91/approbtp/www/backupBDDmail.php on line 24

 

Une idée ?

Edited by BubbleWorld (see edit history)

Share this post


Link to post
Share on other sites

  • 1 year later...
  • 1 month later...
  • 1 year later...
  • 1 year later...

Bonjour,

 

Un grand merci, ça a l'air de marcher sur mon 1.5 !

 

Maintenant il faut penser a les télécharger de temps en temps, ce qui demande du temps et une tête ^^

 

Auriez-vous une solution pour améliorer cela ?

 

p.s. un petit .htaccess dans le dossier backup me semble intéressant, pour éviter aux autres d'accéder aux bases de données ;)

Edited by dkbane (see edit history)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More