Bonjour,
Merci de m'aider à faire ou à trouver un script de restauration de la base des données.![]()
Bonjour,
Merci de m'aider à faire ou à trouver un script de restauration de la base des données.![]()
J'ai trouvé ce script mais je sais pas pourquoi ,il ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 $filename="base.sql.zip"; $host="localhost"; $user="root"; $pass=""; $bdd="base"; $connect = mysql_connect($host,$user,$pass) or die("Error" . mysql_error()); mysql_select_db($bdd, $connect) or die("Error" . mysql_error()); $errmsg = ''; if(mysql_import_file($filename, $errmsg)) { echo 'OK'; } else { echo 'KO'; } function mysql_import_file($filename, $errmsg) { //lecture du fichier $lines = file($filename); if(!$lines) { $errmsg = "cannot open file $filename"; return false; } $scriptfile = false; /*Get rid of the comments and form one jumbo line */ foreach($lines as $line) { $line = trim($line); if(!ereg('^--', $line)) { $scriptfile.=" ".$line; } } if(!$scriptfile) { $errmsg = "no text found in $filename"; return false; } /* Split the jumbo line into smaller lines */ $queries = explode(';', $scriptfile); /* Run each line as a query */ foreach($queries as $query) { $query = trim($query); if($query == "") { continue; } if(!mysql_query($query.';')) {$errmsg = "query ".$query." failed"; return false; } } // retour true si la fonction reussie ^^ return true; } ?>
S'il vous plait aider moi à trouver la solution![]()
Avant toutes choses, as tu une sauvegarde ??
Si oui, avec quel outil a t elle été faite ?
Commencons par le début![]()
Salut
Et PhpMyAdmin ?
Tout le monde connait PhpMyAdmin, non ?
On peu à la fois exporter et importer des données dans pas mal de types de fichiers, le zip y compris.
Il y a aussi MySQLdumper, moins connu mais pas mal non plus.
Puis tu as Google tout de même, une simple recherche avec des mots comme "restauration base de données mysql" par exemple, il y a des beaucoup de résultats.
Puis la majorité des Soft Open Source genre CMS (entre autre) intègrent des fonctionnalités de sauvegardes et de restaurations, ça peut être une bonne base pour une intégration personnelle.
Bref, les solutions ne manquent pas, il y avait de quoi dégrossir le terrain.
Bonjour,
ma question etait un script code en php pas autre chose ,j'ai fait des recherches sur google et j'ai trouvé des resultats qui parlenent seulement de phpmyadmin ou bien à partir de la ligne de commande. et pour les cms ,maintenant je travaille pas avec un cms
mais précisément ,je cherche du code en php.
j'ai trouvé le script cité en haut mais je sais pas comment l'adapter à mon besoin.![]()
Bonjour,
Oui, si tu utilises un script Php pour ta sauvegarde et que tu veux restaurer la même base avec un script Php, nous ne pouvons pas deviner comment et sous quel format tu as fait ta sauvegarde
Edit: Je disais 'Oui', donnes nous ton script de sauvegarde ....
Bonjour,
Voici le code :
et voici la classe zip.lib.php :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 <? // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ici les parametres pour la connexion $host="localhost"; // host = $user="root"; // login de la base $passe=""; // password $base="test"; // nom de la base // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $action = @$_GET["action"]; if($action=="oui") { function Compacter($base) { // Permet de compacter la base avant de lancer toute la procédure $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) @mysql_query("OPTIMIZE TABLE ".$enr[0]); } if($connexion = @mysql_connect($host,$user,$passe)) { // on effectue la connexion Compacter($base); $select_base=@mysql_select_db($base); // Selection de la base de données // CREATION DU FICHIER $fname = "backup_".$base.".sql"; $f2 = fopen($fname,"w"); fputs($f2,"# Sauvegarde de base de données\n"); fputs($f2,"# Batch par Florent MARIE aka fmarie - 2005\n\n"); $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { fputs($f2,"# Les tables traitées sont ".$enr[0].";\n"); } fputs($f2,"\n"); $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { fputs($f2,"DELETE FROM $enr[0];\n"); } $tables = mysql_list_tables($base); while ($enr = mysql_fetch_row($tables)) { $res = mysql_query("SELECT * FROM $enr[0]"); // le nombre de champs de la table $champs = mysql_num_fields($res); // Pour chaque ligne while($val=mysql_fetch_array($res)) { $tmp = "INSERT INTO ".$enr[0]." VALUES("; $c=0; // Pour chaque champ while($c < $champs) { // Une virgule sauf au premier if($c>0) $tmp .= ", "; // Le contenu du champ $tmp .= "'".AddSlashes($val[$c])."'"; $c++; } $tmp .= ");\n"; // Ecrit la ligne fputs($f2,$tmp); } } fclose($f2); // ZIP DU FICHIER include("zip.lib.php"); // Compresse le fichier $zipfile = new zipfile(); $zipfile -> addFile(implode("",file($fname)), $fname); // Sauve le zip $f2=fopen($fname.".zip","w"); fputs($f2,$zipfile -> file()); fclose($f2); // NETTOYAGE // Détruit le fichier initial // mais laisse le zip au cas où... unlink($fname); ?> <a href="save.php">Retour</a><br> <? } } else { ?> <form action="save.php?action=oui" method="post"> <br> <input name="send" type="submit" value="send"> </form> <? } ?>
Merci d'avance pour votre reponse
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 <?php class zipfile { var $datasec = array(); var $ctrl_dir = array(); var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"; var $old_offset = 0; function unix2DosTime($unixtime = 0) { $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); if ($timearray['year'] < 1980) { $timearray['year'] = 1980; $timearray['mon'] = 1; $timearray['mday'] = 1; $timearray['hours'] = 0; $timearray['minutes'] = 0; $timearray['seconds'] = 0; } return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); } function addFile($data, $name, $time = 0) { $name = str_replace('\\', '/', $name); $dtime = dechex($this->unix2DosTime($time)); $hexdtime = '\x' . $dtime[6] . $dtime[7] . '\x' . $dtime[4] . $dtime[5] . '\x' . $dtime[2] . $dtime[3] . '\x' . $dtime[0] . $dtime[1]; eval('$hexdtime = "' . $hexdtime . '";'); $fr = "\x50\x4b\x03\x04"; $fr .= "\x14\x00"; $fr .= "\x00\x00"; $fr .= "\x08\x00"; $fr .= $hexdtime; $unc_len = strlen($data); $crc = crc32($data); $zdata = gzcompress($data); $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug $c_len = strlen($zdata); $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $fr .= pack('v', strlen($name)); $fr .= pack('v', 0); $fr .= $name; $fr .= $zdata; $fr .= pack('V', $crc); $fr .= pack('V', $c_len); $fr .= pack('V', $unc_len); $this -> datasec[] = $fr; $new_offset = strlen(implode('', $this->datasec)); $cdrec = "\x50\x4b\x01\x02"; $cdrec .= "\x00\x00"; $cdrec .= "\x14\x00"; $cdrec .= "\x00\x00"; $cdrec .= "\x08\x00"; $cdrec .= $hexdtime; $cdrec .= pack('V', $crc); $cdrec .= pack('V', $c_len); $cdrec .= pack('V', $unc_len); $cdrec .= pack('v', strlen($name) ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('v', 0 ); $cdrec .= pack('V', 32 ); $cdrec .= pack('V', $this -> old_offset ); $this -> old_offset = $new_offset; $cdrec .= $name; $this -> ctrl_dir[] = $cdrec; } function file() { $data = implode('', $this -> datasec); $ctrldir = implode('', $this -> ctrl_dir); return $data . $ctrldir . $this -> eof_ctrl_dir . pack('v', sizeof($this -> ctrl_dir)) . pack('v', sizeof($this -> ctrl_dir)) . pack('V', strlen($ctrldir)) . pack('V', strlen($data)) . "\x00\x00"; } } ?>
J'ai jamais opté pour intégrer un script de backup/restore de Bdd, donc je ne pas vraiment t'aider.
Mais as tu fais des recherche sur GG avec des mots clé comme "backup php mysql", "sauvegarde php mysql", "mysqldump php", etc, etc d'autres ont dus se poser cette question, il doit avoir des solutions.
As tu fais des recherche sur sourceforge par exemple ?
Puis faut voir aussi si tu as la possibilité d'exécuter du code php en ligne de commande shell, ce qui serait l'idéal, car c'est bien plus rapide et moins de problème de timeout.
Bon bien (hormis le fait de dézipper ton backup), il suffit de lire ligne à ligne ton fichier et d'éxécuter les requêtes 'DELETE' et 'INSERT INTO' (à vérifier que DELETE n'efface pas la structure de la table, sinon y'aurait des CREATE à ajouter).
Tu utilises la fonction fgets sur tout ton fichier dans une boucle avec une simple condition sur les lignes commençant par '#' => ligne suivante sinon lecture de la ligne => faire une requête de la ligne.
Et bien tu fais le contraire ...
Je reprends ton fichier de sauvegarde que j'ai commencé à modifier, à toi de terminer surtout sur le dezippage (ya bien dans application une classe pour dezipper).
Voici un début .....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61 <? // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! //ici les parametres pour la connexion $host="localhost"; // host = $user="root"; // login de la base $passe=""; // password $base="test"; // nom de la base // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! $action = @$_GET["action"]; if($action=="oui") { if($connexion = @mysql_connect($host,$user,$passe)) { // on effectue la connexion $select_base=@mysql_select_db($base); // Selection de la base de données // UNZIP DU FICHIER // include classe pour unzipper // .... le code associé, sinon tu unzip en manuel // LECTURE DU FICHIER $fname = "backup_".$base.".sql"; $f2 = fopen($fname,"rb"); // On passe toutes les données commençant par # $ligne = fgets($f2, 4096); while (substr( $ligne, 0, 1) == '#') $ligne = fgets($f2, 4096); // On execute les requête écrite dans le fichier jusqu'en feof $ligne = fgets($f2, 4096); while (!feof($f2)) { $result=mysql_query( $ligne ); if( !result ) { // Traitement de l'erreur sur le DELETE ou INSERT } $ligne = fgets($f2, 4096); } fclose($f2); ?> <a href="save.php">Retour</a><br> <? } } else { ?> <form action="save.php?action=oui" method="post"> <br> <input name="send" type="submit" value="send"> </form> <? } ?>
Bonsoir,
avec du fgets je ne risque pas de faire de la sauvegarde
J'ai repris ton script de sauvegarde pour de la restauration, et je pense que celui ci convient en parti, non !
As tu regardé le code, dans la structure de ton fichier de sauvegarde comme c à la sauce du programeur, tu fais le contraire, non!
Partager