Discussion:
sauvegarde/restauration MySQL depuis PHP
(trop ancien pour répondre)
Matthieu Moy
2007-02-12 13:45:11 UTC
Permalink
Bonjour,

Je travaille sur une petite application PHP pour gérer une base
d'adhérents d'une association.

Les données de la base sont importantes, et je veux en garder des
sauvegardes journalières (pour faire une restauration d'une ancienne
version en cas de fausse manip, ou bien en cas de perte de données
chez mon fournisseur - free.fr pour l'instant). J'ai besoin d'un truc
tout simple : une fonction sauvegarde qui me crée un dump de la base
dans un répertoire (un truc genre backup.php que je puisse appeler via
wget pour pouvoir faire ça d'un cron job depuis une autre machine), et
une fonction de restauration (réduite au minimum si le dump est un
script SQL).

Je pourrais apprendre à le faire moi-même en PHP, mais vu mon niveau,
j'aimerais avoir un truc déjà testé et éprouvé par d'autres gens (les
bugs dans les scripts de backup, en général, on les trouve le jour où
on a besoin d'une restauration et c'est déjà trop tard ...).

J'ai essayé différents trucs sur le web, mais pas très convaincu[1].

Bref, est-ce qu'il y a une solution simple et robuste pour faire ce
genre de choses ?

Merci,
--
Matthieu

[1] Pour l'instant, j'ai phpMyBackupPro, mais c'est un peu une usine à
gaz, et j'ai été obligé de le modifier pour pouvoir l'appeler en
non-interactif (via wget). D'ailleurs, avant modification, il effaçait
systématiquement les dumps juste après les avoir créés. Et
visiblement, mes modifications ont tout cassé vu qu'à l'heure où je
parle, les dumps sont tous vides :-(.
CrazyCat
2007-02-12 15:27:08 UTC
Permalink
Post by Matthieu Moy
Les données de la base sont importantes, et je veux en garder des
sauvegardes journalières (pour faire une restauration d'une ancienne
version en cas de fausse manip, ou bien en cas de perte de données
chez mon fournisseur - free.fr pour l'instant). J'ai besoin d'un truc
tout simple : une fonction sauvegarde qui me crée un dump de la base
dans un répertoire (un truc genre backup.php que je puisse appeler via
wget pour pouvoir faire ça d'un cron job depuis une autre machine), et
une fonction de restauration (réduite au minimum si le dump est un
script SQL).
Tu peux utiliser la requète: SELECT * INTO OUTFILE './tonfichier.csv'
FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED
BY '\r\n' FROM table_membre

Ca te permettra d'avoir un .csv.
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
P'tit Marcel
2007-02-12 23:49:29 UTC
Permalink
Post by CrazyCat
Post by Matthieu Moy
J'ai besoin d'un truc
tout simple : une fonction sauvegarde qui me crée un dump de la base
dans un répertoire et
une fonction de restauration
Tu peux utiliser la requète: SELECT * INTO OUTFILE './tonfichier.csv'
FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED
BY '\r\n' FROM table_membre
Ca te permettra d'avoir un .csv.
Pour répondre sur le thème du forum, il te faudrait un script de
sauvegarde du genre :

$sql = "SHOW TABLES"
$res = mysql_query($sql);
if ($res === false) {
gestion_erreur_mysql();
}
$prefixe = "./sav_".date('ymd');
$fichier_sql = "$prefixe.sql";
$fic = fopen($fichier_sql, 'w');
if ($fic === false) {
gestion_erreur_fopen();
}
$nbtable=0;
$fichiers_csv=array();
while (list($table) = mysql_fetch_row($res)) {
$sql = "SHOW CREATE TABLE $table";
$res2 = mysql_query($sql);
if ($res2 === false) {
gestion_erreur_mysql();
}
while (list($ligne) = mysql_fetch_row($res2)) {
fwrite($fic, $ligne);
}
$fichier_csv = "$prefixe_$table.csv";
if(file_exists($fichier_csv)) {
unlink($fichier_csv);
}
$sql = "SELECT * INTO OUTFILE '$fichier_csv' ".
"FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\' ".
"LINES TERMINATED BY '\r\n' FROM $table";
$res2 = mysql_query($sql);
if ($res2 === false) {
gestion_erreur_mysql();
}
$nbtable++;
$fichiers_csv[]=$fichier_csv;
}
fclose($fic);
echo "Fin de traitement de sauvegarde\n\n",
"Fichier de structure:\t$fichier_sql\n",
"Fichiers de données:\n",
explode("\n", $fichiers_csv),
"\nnombre de tables:\t$nbtable\n";


attention, non testé et sans garantie du gouvernement.


a+
--
P'tit Marcel
stats sur les forums modérés http://www.centrale-lyon.org/ng/
Matthieu Moy
2007-02-13 09:03:48 UTC
Permalink
Post by P'tit Marcel
Post by CrazyCat
Tu peux utiliser la requète: SELECT * INTO OUTFILE
./tonfichier.csv' FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY
\\' LINES TERMINATED BY '\r\n' FROM table_membre
Ca te permettra d'avoir un .csv.
Pour répondre sur le thème du forum, il te faudrait un script de
Merci à vous deux. Pour l'instant, je reste sur phpMyBackup qui a au
moins un intérêt par rapport à votre proposition : il sauvegarde aussi
les méta-données (il fait un script SQL).

Mais bon, vos réponses ne sont pas inutiles, l'export csv est aussi
dans mon cahier des charges ;-) (pour pouvoir travailler dans un
tableur, faire du publipostage, ...).
--
Matthieu
CrazyCat
2007-02-13 14:52:03 UTC
Permalink
Post by Matthieu Moy
Merci à vous deux. Pour l'instant, je reste sur phpMyBackup qui a au
moins un intérêt par rapport à votre proposition : il sauvegarde aussi
les méta-données (il fait un script SQL).
Si tu veux un simple dump, j'ai fait un mini-script à
http://www.crazycat.info/astuce5-sql-Faire_un_dump_dune_base_MySQL.html
--
Discussions et débats sur l'actualité: http://www.sujets-d-actu.eu
G.JANY
2007-02-13 20:45:18 UTC
Permalink
Post by Matthieu Moy
Les données de la base sont importantes, et je veux en garder des
sauvegardes journalières (pour faire une restauration d'une ancienne
version en cas de fausse manip, ou bien en cas de perte de données
chez mon fournisseur - free.fr pour l'instant). J'ai besoin d'un truc
tout simple : une fonction sauvegarde qui me crée un dump de la base
dans un répertoire (un truc genre backup.php que je puisse appeler via
wget pour pouvoir faire ça d'un cron job depuis une autre machine), et
une fonction de restauration (réduite au minimum si le dump est un
script SQL).
Peut-être que XtDump pourra s'adapter à tes besoins :

http://dreaxteam.free.fr/forums/viewtopic.php?id=2

Guillaume
www.designerspace.com
Jean-Marc Molina
2007-02-15 19:12:25 UTC
Permalink
Post by G.JANY
http://dreaxteam.free.fr/forums/viewtopic.php?id=2
Et couplé à UQiQi ces deux petits outils te permettent de sauvegarder et
restaurer ta base. Il existe des versions modifiées prenant en compte la
fatidique limite des 30 secondes d'exécution de Free.fr.
Djay
2007-02-23 09:58:32 UTC
Permalink
Post by Matthieu Moy
Bonjour,
Je travaille sur une petite application PHP pour gérer une base
d'adhérents d'une association.
Les données de la base sont importantes, et je veux en garder des
sauvegardes journalières (pour faire une restauration d'une ancienne
version en cas de fausse manip, ou bien en cas de perte de données
chez mon fournisseur - free.fr pour l'instant). J'ai besoin d'un truc
tout simple : une fonction sauvegarde qui me crée un dump de la base
dans un répertoire (un truc genre backup.php que je puisse appeler via
wget pour pouvoir faire ça d'un cron job depuis une autre machine), et
une fonction de restauration (réduite au minimum si le dump est un
script SQL).
Je pourrais apprendre à le faire moi-même en PHP, mais vu mon niveau,
j'aimerais avoir un truc déjà testé et éprouvé par d'autres gens (les
bugs dans les scripts de backup, en général, on les trouve le jour où
on a besoin d'une restauration et c'est déjà trop tard ...).
J'ai essayé différents trucs sur le web, mais pas très convaincu[1].
Bref, est-ce qu'il y a une solution simple et robuste pour faire ce
genre de choses ?
Merci,
Avec MySQL, tu peux exporter une table en ligne de commande avec
mysqldump

Es-tu sur un serveur Unix ou Windows ?

Si tu es sur un serveur Unix, tu peux utiliser un cron qui executera la
commande mysqldump
Sinon une tâche planifiée sous Windows pour lancer cette commande.

http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html

Continuer la lecture sur narkive:
Loading...