Sign in to follow this  
Followers 0

Sauvegarde MySQL

4 posts in this topic

Posted · Report post

Bonsoir a tous,

Dans un souci de simplification, je cherche a pouvoir lancer une sauvegarde de ma base MySQL depuis la partie administration. j'ai donc vu sur la doc de mon hebergeur OVH un magnifique :

system("mysqldump --host=serveur_sql --user=nom_de_la_base --password=mot_de_passe nom_de_la_base > nom_de_la_base.sql");

Sauf que ben ca me marche pas.

Rentrons dans le vif du sujet je pense avoir 2 problemes

-1 la syntaxe :

Comment utiliser nos variables peel dans un appel system ? je voudrais avoir un truc genre :

system("mysqldump --host=$serveur_mysq --user= --password=$mot_de_passe_mysql" > $nom_de_la_base.sql");

mais je galere sur la syntaxe: si quelqu'un peu me donner un lien ou la syntaxe : merci par avance

-2 Tester un appel systeme

Comment tester un appel system ? on peut toujour tester tout pour valider un return code sur linux je suppose que l'on peut faire de meme avec PHP ? le return code renvoyé est il celui de l'appel ou de la commande lancee dans l'appel ?

Voilà encore des questions mais je pense que celles ci peuvent aider pas mal de monde.

@ bientot,

Pierro du sud.

Qui maudit la fnac de fermer le samedi soir.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

ADD ON

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Bonjour à tous,

Apres une petite nuit et un flash digne de la BD Leonard, voici donc la syntaxe aboutie.

$line = "mysqldump --host=$serveur_mysql --user=$utilisateur_mysql --password=$mot_de_passe_mysql > $nom_de_la_base.sql";

echo $line ;

system($line,$return_value);

la syntaxe semble bonne car l "echo" me donne bien la ligne de commande voulue.

mais ca ne marche tout de meme pas ;)

Je ne suis pas contre un grand coup de main

@ bientot,

Pierro du sud.

Qui va tenter de prendre un peu de soleil.

Share this post


: post
Share on other sites

Posted · Report post

http://callmepep.org/meca/misc/dbbackup.txt

tu vas voir, si tu veux attend ce week end, ou quelques jours, que j'ai le temps de m'y mettre et on pourra sauvegarder la bdd en moins de deux en ne cliquant que sur un bouton.

Share this post


: post
Share on other sites

Posted · Report post

BONJOUR à TOUS,

J'y suis arrive. voici un code php a appeler depuis /administrer de votre peel shopping.

<?php

/* Fichier /administrer/dump.php */

include("../configuration.inc.php");

include("../lib/setup/info.inc.php");

necessite_identification();

necessite_priv("admin");

$DOC_TITLE = "[back Up manuel de la base]";

include("modeles/haut.php");

// CORP DE LA PAGE \\

/*

* Avertissement : Cette librairie de fonctions PHP est distribuee avec l'espoir

* qu'elle sera utile, mais elle l'est SANS AUCUNE GARANTIE; sans meme la garantie de

* COMMERCIALISATION ou d'UTILITE POUR UN BUT QUELCONQUE.

* Elle est librement redistribuable tant que la presente licence, ainsi que les credits des

* auteurs respectifs de chaque fonctions sont laisses ensembles.

* En aucun cas, Nexen.net ne pourra etre tenu responsable de quelques consequences que ce soit

* de l'utilisation ou la mesutilisation de ces fonctions PHP.

*/

/*

* Titre : Backup Base de données MySQL

* Auteur : Cedric Fronteau

* Email : charlie@nexen.net

* Url : www.nexen.net

* Description : Crée un fichier de backup d'une base de données avec les memes options que phpmyadmin (structure et/ou données), CSV ou SQL...

*/

echo "Dump MySQL de la base ".$nom_de_la_base." Serveur : ".$serveur_mysql." Utilisateur : ".$utilisateur_mysql."<BR /><BR />";

backupDatabase($connexion, $nom_de_la_base, "true", "true", "INSERT", "true");

/* LES FONCTIONS */

function backupDatabase($link,$db_name,$structure,$donnees,$format,$insertComplet=""){

/* Parametres :

* $link : lien vers la base de donnees

* $db_name : nom de la base de donnees

* $structure : true => sauvegarde de la structure des tables

* $donnees : true => sauvegarde des donnes des tables

* $format : format des donnees ('INSERT' => des clauses SQL INSERT,

* 'CSV' => donnees separees par des virgules)

* $insertComplet (optionnel) : true => clause INSERT avec nom des champs

*/

if (!is_resource($link))

{

echo "Erreur lors de l'acces a la base <BR />";

return false;

}

mysql_select_db($db_name);

$format = strtoupper($format);

$filename = "backup_".$db_name."_".date("Y_m_d_H_i").".sql";

$timestamp= date("d m Y H i");

$fp = fopen($filename,"w");

if (!is_resource($fp))

{

echo "Erreur a l'ouverture en ecriture du fichier <BR />";

return false;

}

// liste des tables

echo "Ouverture de la liste des tables <BR />";

fwrite($fp,"-- Dump de la base `$db_name` au `$timestamp`.;\n");

fwrite($fp,"-- Fichier : `$filename`.;\n");

fwrite($fp,"\n");

$res = mysql_list_tables($db_name,$link);

$num_rows = mysql_num_rows($res);

$i = 0;

while ($i < $num_rows)

{

$tablename = mysql_tablename($res, $i);

echo " Sauvegarde de la table :".$tablename."<BR />";

if ($structure == true)

{

fwrite($fp,"DROP TABLE IF EXISTS `$tablename`;\n");

// requete de creation de la table

$query = "SHOW CREATE TABLE $tablename";

$resCreate = mysql_query($query);

$row = mysql_fetch_array($resCreate);

$schema = $row[1].";";

fwrite($fp,"$schema\n\n");

}

if ($donnees == true)

{

// les données de la table

$query = "SELECT * FROM $tablename";

$resData = mysql_query($query);

if (mysql_num_rows($resData) > 0)

{

$sFieldnames = "";

if ($insertComplet === true)

{

$num_fields = mysql_num_fields($resData);

for($j=0; $j < $num_fields; $j++)

{

$sFieldnames .= "`".mysql_field_name($resData, $j)."`,";

}

$sFieldnames = "(".substr($sFieldnames,0,-1).")";

}

$sInsert = "INSERT INTO `$tablename` $sFieldnames values ";

while($rowdata = mysql_fetch_assoc($resData))

{

$lesDonnees = "<guillemet>".implode("<guillemet>,<guillemet>",$rowdata)."<guillemet>";

$lesDonnees = str_replace("<guillemet>","'",addslashes($lesDonnees));

if ($format == "INSERT")

{

$lesDonnees = "$sInsert($lesDonnees);";

}

fwrite($fp,"$lesDonnees\n");

}

}

}

$i++;

}

// echo "<BR />Le fichier de sauvegarde est : ".$filename.". <BR />";

fclose($fp);

// definition des paramétres du mail

$files[0]['file'] = $filename;

$files[0]['mimetype'] = 'text/plain asc txt';

$files[0]['filename'] = $filename;

include("../lib/setup/info.inc.php");

$mail_to = $support;

$mail_from = "no-reply@mon_site.fr";

$mail_subject = "[DB DUMP] ". date('d/m/Y');

$mail_body = "Servi tout chaud, votre dump de base de donnees ! \\o/";

if (mail_attached($mail_to, $mail_from, $mail_subject, $mail_body, $files, $headers = ''))

{

print("<BR />Le fichier ".$filename." est envoye à ".$mail_to.".");

unlink($files[0]['file']);

}

else

{

print("<BR />Erreur lors de l'envoie du fichier de dump ".$filename.".");

}

}

function mail_attached($to, $from, $subject, $message, $filename, $headers = '')

{

$unique_sep = md5(uniqid(time()));

$headers .=

"From: $from\n".

"MIME-Version: 1.0\nContent-Type: multipart/mixed;boundary=\"$unique_sep\";\n".

"charset=\"iso-8859-1\"\nContent-Transfer-Encoding:7bit\n\n".

"--$unique_sep\n".

"Content-Type: text/plain; charset=\"iso-8859-1\"\n".

"Content-Transfer-Encoding: 7bit\n\n".

$message."\n\n";

if (is_array($filename)) {

foreach ($filename as $val) {

if(file_exists($val['file'])) {

$headers .=

"--$unique_sep\n".

"Content-Type: {$val['mimetype']}; ".

"name=\"{$val['filename']}\"\n".

"Content-Transfer-Encoding: base64\n".

"Content-Disposition: attachment\n\n";

$filedata = file_get_contents($val['file']);

$headers .= chunk_split(base64_encode($filedata));

} else {

print("probleme fichier : ".$val['file']." inexistant");

return(false);

}

}

}

else

{

print("probleme : pas de fichiers transmis ou variable erronee");

return(false);

}

$headers .= "--$unique_sep--\n";

return(mail($to, $subject, $message, $headers));

}

// FIN DE LA PAGE \\

include("modeles/bas.php");

?>

Voilà.

Pour mon hebergement c'est OK le mail m'arrive bien.

Il est evident que certains trucs font TRES bricolage a l'arrache en particulier certaines variables ;) mais je ne sais pas trop comment faire plus clean.

J'espere en tous cas que ce bout de code vous aidera autant que moi.

@ bientot

Pierro du Sud.

Share this post


: post
Share on other sites

Posted · Report post

Bonjour

Génail ton script,

peux tu me dire ce que je dois modifier pour que l admin enregistre le fichier sur son disque dur

Merci BEAUCOUP d'avance

Share this post


: 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
Sign in to follow this  
Followers 0

Twitter Advisto ecommerce

Facebook PEEL Shopping