Fork me on GitHub






script sauvegarde selective BDD
Supporter Xoops
Inscrit: 07/06/2003 14:31
Messages: 572
Bonjour,

je cherche à savoir comment creer un script qui permet de sauvegarder que qq modules de xoops.Je m'explique...

Je voudrais proposer un acces a mon intranet vers l'exterieur,mais certaine choses sont pas besoin d'y etre.Car ce que utilisable en interne,donc je voudrais sauvegarder ma bdd tout le jour et de l'uploader sur le serveur externe.Ensuite via un cronjob de le restauré qq heures apres.
Mais je ne sais pas comment automatiser une sauvegarde selective.

Posté le : 23/11/2005 19:25
Partager Twitter Partagez cette article sur GG+
Re: script sauvegarde selective BDD
Semi pro
Inscrit: 23/02/2004 09:00
De guyancourt (78)
Messages: 586
Bonsoir,

connais-tu phpmybackuppro? C'est un script php qui permet de sauvegarder des bases de données Mysql et éventuellement de t'envoyer par mél la sauvegarde.

Si tu connais unix, un script peux ensuite supprimer du fichier de sauvegarde les tables que tu ne veux pas exposer à l'extérieur.

Ton site externe auras certainement quelques anomalies puisques des modules seront considérés comme installés et les tables correspondantes ne seront pas présentes. D'ailleurs cela me fait penser que tu devrais peut-être tester avant pour t'assurer que le site externe peut fonctionner correctement sans les modules manquant.

Posté le : 23/11/2005 21:51
Partager Twitter Partagez cette article sur GG+
Re: script sauvegarde selective BDD
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
j'allais lui conseiller la même chose
Il permet de sauver tout ou partie d'une base.
on peut envoyer la sauvegarde par ftp également. (pratique pour les placer directement sur un autre serveur distant)
ça permet d'automatiser pas mal de trucs (avec les tâches cron par exemple)

http://www.phpmybackuppro.net/

Posté le : 24/11/2005 10:03

Edité par blueteen sur 24/11/2005 18:52:42
Partager Twitter Partagez cette article sur GG+
Re: script sauvegarde selective BDD
Régulier
Inscrit: 09/03/2004 09:12
Messages: 106
Excellent outil !!!

Merci à vous deux, je viens de le découvrir et je crois bien que je vais installer cela sur mes sites en produits.

Jusqu'ici j'utilisais le "vieux" module xoops "Database Tools v1.1", mais bien que son avantage soit qu'il est intégré à xoops, "phpmybackuppro" avec son outil de programmation de sauvegarde et des envois automatiques par mail ou FTP le range au placard !!

Je pense qu'un focus sur cet outil sous licence GNU GPL devrait être fait (si cela ne l'est pas encore...).

Posté le : 24/11/2005 12:17

Open in new window
Partager Twitter Partagez cette article sur GG+
Re: script sauvegarde selective BDD
Supporter Xoops
Inscrit: 07/06/2003 14:31
Messages: 572
Bon je tester vite fais ce script et ca ma l'air pas mal,mais il permet pas de selectioner diffrente tables a sauvegarder.Mais pour les autres il peut etre sympa.

Finalment en je vais utiliser mes veux script de backup et restauration.Avec l'aide de visualcron et de webcron pour tout automatiser.Je vais creer aussi un bloc perso sur l'intranet comme qui certaine choses marchent pas sur l'extranet

Visualcron est un logiciel sous windows qui permet de creer de cronjobs sous windows comme ce deja le cas sous linux.En plus il est gratuit et en francais.

Webcron permet de lancer des taches cron via le web,en cas si votre herbergeur ne le pas propose.

Donc voici ma procedure,quelle je suis en train de tester sur un semaine.Pour dire si ca marche.

1)Alors... dabord je met mon script de backup sur mon serveur en local.

<?
$dbhost "localhost"
$dbuser "********"//utilisateur de la base 
$dbpass "********"//mot de passe de la base 
$dbname "********"// nom de la base 
$use_gzip "no"
$remove_file "yes"
$use_email "yes"
$send_to "backupsql@tonsite.com"
$send_from "backup@tonsite.com"
$subject "Backup de la Base ($dbname) - " date("j F Y"); 
$use_ftp "yes"//stocker sur le ftp oui ou non
$ftp_server "*****"//adresse dur serveur 
$ftp_user_name "*****"//pseudo 
$ftp_user_pass "*****"//mot de passe 
$ftp_path "*/*"//endroit du stockage 
$echo_status "no"//resumer oui ou non 


$db mysql_connect("$dbhost","$dbuser","$dbpass");
mysql_select_db("$dbname",$db);

$path make_dir();

if (
$echo_status == 'yes') {
print 
"Dumpfile will be written to $path<br>";
}

$result mysql_query("show tables from $dbname");
while (list(
$table) = mysql_fetch_row($result)) {
$newfile .= get_def($table);
$newfile .= "nn";
$newfile .= get_content($table);
$newfile .= "nn";
$i++;
if (
$echo_status == "yes") {
print 
"Dumped table $table<br>";
}
}

$file_name $dbname ".sql";
$file_path $path $file_name;

if (
$use_gzip == "yes") {
$file_name .= ".gz";
$file_path .= ".gz";
$zp gzopen($file_path"wb9");
gzwrite($zp,$newfile);
gzclose($zp);

if (
$echo_status == 'yes') {
print 
"<br>Gzip-file is created...<br>";
}
} else {
$fp fopen($file_path"w");
fwrite($fp$newfile);
fclose($fp);

if (
$echo_status == 'yes') {
print 
"<br>SQL-file is created...<br>";
}
}

if (
$use_email == 'yes') {
$fileatt_type filetype($file_path);

$headers "From: $send_from";

// Read the file to be attached ('rb' = read binary)
$fp fopen($file_path,'rb');
$data fread($fp,filesize($file_path));
fclose($fp);

// Generate a boundary string
$semi_rand md5(time());
$mime_boundary "==Multipart_Boundary_x{$semi_rand}x";

// Add the headers for a file attachment
$headers .= "nMIME-Version: 1.0n" ."Content-Type: multipart/mixed;n" ." boundary="{$mime_boundary}"";

// Add a multipart boundary above the plain message
$message "This is a multi-part message in MIME format.nn" ."--{$mime_boundary}n" ."Content-Type: text/plain; charset="iso-8859-1"n" ."Content-Transfer-Encoding: 7bitnn" .
$message "nn";

// Base64 encode the file data
$data chunk_split(base64_encode($data));

// Add file attachment to the message
$message .= "--{$mime_boundary}n" ."Content-Type: {$fileatt_type};n" ." name="{$file_name}"n" ."Content-Disposition: attachment;n" ." filename="{$file_name}"n" ."Content-Transfer-Encoding: base64nn" .
$data "nn" ."--{$mime_boundary}--n";

// Send the message
$ok = @mail($send_to$subject$message$headers);

if (
$echo_status == 'yes') {
print 
"<br>Mail is sent...<br>";
}
}

if (
$use_ftp == 'yes') {
if (
$use_gzip == 'yes') {
$mode FTP_BINARY;
} else {
$mode FTP_ASCII;
}
$ftp_id ftp_connect($ftp_server);
$login_result ftp_login($ftp_id$ftp_user_name$ftp_user_pass);
$upload ftp_put($ftp_id$ftp_path $file_name$file_path$mode);
ftp_close($ftp_id);

if (
$echo_status == 'yes') {
print 
"<br>Backup is uploaded to $ftp_user_name@$ftp_server...<br>";
}
}

if (
$remove_file == "yes") {
unlink($file_name);
if (
$echo_status == 'yes') {
print 
"<br>File is deleted...<br>";
}
}

if (
$echo_status == 'yes') {
print 
"<br>I am done!<br>";
}


function 
make_dir() {
$page split("/"getenv('SCRIPT_NAME'));
$n count($page)-1;
$page $page[$n];
$page split("."$page2);
$extension $page[1];
$page $page[0];
$script "$page.$extension";
$base_url "http://".$_SERVER['SERVER_NAME'];
$directory $_SERVER['PHP_SELF'];
$url_base "$base_url$directory";
$url_base ereg_replace("$script"''"$_SERVER[PATH_TRANSLATED]");

$path $url_base;

return 
$path;
}

function 
get_def($table) {
$def "";
$def .= "DROP TABLE IF EXISTS $table;n";
$def .= "CREATE TABLE $table (n";
$result mysql_query("SHOW FIELDS FROM $table") or die("Table $table not existing in database");
while(
$row mysql_fetch_array($result)) {
$def .= $row[Field] $row[Type]";
if (
$row["Default"] != ""$def .= " DEFAULT '$row[Default]'";
if (
$row["Null"] != "YES"$def .= " NOT NULL";
if (
$row[Extra] != ""$def .= $row[Extra]";
$def .= ",n";
}
$def ereg_replace(",n$",""$def);
$result mysql_query("SHOW KEYS FROM $table");
while(
$row mysql_fetch_array($result)) {
$kname=$row[Key_name];
if((
$kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
if(!isset(
$index[$kname])) $index[$kname] = array();
$index[$kname][] = $row[Column_name];
}
while(list(
$x$columns) = @each($index)) {
$def .= ",n";
if(
$x == "PRIMARY"$def .= " PRIMARY KEY (" implode($columns", ") . ")";
else if (
substr($x,0,6) == "UNIQUE"$def .= " UNIQUE ".substr($x,7)." (" implode($columns", ") . ")";
else 
$def .= " KEY $x (" implode($columns", ") . ")";
}
$def .= "n);";
return (
stripslashes($def));
}

function 
get_content($table) {
$content="";
$result mysql_query("SELECT * FROM $table");
while(
$row mysql_fetch_row($result)) {
$insert "INSERT INTO $table VALUES (";
for(
$j=0$j<mysql_num_fields($result);$j++) {
if(!isset(
$row[$j])) $insert .= "NULL,";
else if(
$row[$j] != ""$insert .= "'".addslashes($row[$j])."',";
else 
$insert .= "'',";
}
$insert ereg_replace(",$","",$insert);
$insert .= ");n";
$content .= $insert;
}
return 
$content;
}


?>


2)je programe une tache avec VisualCron pour il ce lance tout le 2 heures.

Donc mon script va me sauvegarder ma base local sur le ftp du extranet.

3)Je met mon script d'importation sql sur le serveur

<?php 

// Configuration
$serveur "***"// nom du serveur
$loginsql "****"// Nom d'utilisateur du serveur
$passsql "****"// Mot de passe du serveur
$labase "*****"// Nom de la base
$filename "*****"// Nom du fichier à insérer

// Connexion au serveur
$id_connect=@mysql_pconnect($serveur,$loginsql,$passsql) or print mysql_error();
mysql_select_db("$labase");

// Initialisation des variables
$str_req='';
$prob_req='';
$memreq=0;
$cptreq=0;
$tab_req=array();

// Ouverture du fichier
$fp=fopen($filename"r"); 
stream_set_blocking($fp,  0); 
//Mise en memoire des données à inserer 
echo 'Mise en mémoire des requetes : <br><br>'
while(!
feof($fp)) { 
$str_req .= fgets($fp16384);  
 
 
if(
substr($str_reqstrlen($str_req)-31)==";") { 
 
$memreq++; 
 
$tab_req[count($tab_req)]=$str_req
 
$str_req=''
  
 if(
$memreq 100 == && $memreq!=0) { 
  echo 
"- ".$memreq." requêtes mises en memoire...<br>"
  
flush(); 
  
ob_flush(); 
 } 


fclose($fp); 

//Enregistrement des données dans la base 
echo 'Execution des requetes : <br><br>'
for(
$i=0$i<count($tab_req); $i++) { 
if(
mysql_query($tab_req[$i])) { 
 
$cptreq++; 

else { 
 
$prob_req .= '- '.$tab_req[$i].'<br>'

 
if(
$cptreq 100 == && $cptreq!=0) { 
 echo 
"- ".$cptreq." requêtes éxécutées...<br>"
 
flush(); 
 
ob_flush();   




$tot_error $memreq $cptreq

echo 
'<br>----------------------------<br><br>'

echo 
'<b>'.$cptreq.'</b> requêtes ont été éxécutées sur un total de <b>'.$memreq.' requêtes.</b><br>'
if (
$tot_error>0
{
 echo 
'Nombre d'erreurs : <b>'.$tot_error.'</b>'; 
 echo '
<br><br>Liste des reqûetes qui n'ont pas pu etre executées : <br><br>'.$prob_req
}

?>


4) Je cree un cronjob sur webcron.org tout les 3 heures



Voila normalment mon site est transfere niv la base automatiquement et ajour tout les 3 heures.


Il me reste que encore trouver une soluce qui permet de comparé le ftp,mais bon ca change pas souvent.Quoique...
Donc si vous avez des idees...contacter moi

Posté le : 24/11/2005 18:17
Partager Twitter Partagez cette article sur GG+
Re: script sauvegarde selective BDD
Xoops accro
Inscrit: 15/07/2004 11:16
Messages: 4763
sinon, selon les droits dont tu disposes sur le serveur, tu peux utiliser la commande système 'mysqldump'

http://www2.yo-linux.com/cgi-bin/man.cgi?topic=mysqldump

<?php
system("mysqldump -hnom_serveur -uuser -ppassword base_de_donnees | gzip > base.sql.gz");
?>

Et avec cette autre commande tu pourras ne sauvegarder qu'une ou plusieurs table d'une base.

<?php
mysqldump -ulogin -ppassword -hnom_serveur --opt nom_base nom_table > sauvegarde_dune_seule_table_de_la_base.sql
?>

Pour la restauration (script à exécuter sur le serveur de destination).

<?php
mysql -ulogin -ppassword -hnom_serveur -D base_de_donnees< backup.sql
?>

sachant tu peux t'arranger avec ncftpget et ncftpput (http://www.ncftp.com/ncftp ), pour envoyer ou recevoir les sauvegardes sur d'autres serveurs.
coupler tout ça avec des tâches crons, et tu devrais t'en sortir
Surtout que ncftp gère aussi les fichiers, et que tu pourrais synchroniser tes serveurs ainsi.

Si tu ne peux pas utiliser ncftp, tu peux faire un script qui sera chargé de récupérer (ou d'envoyer) ta base de données sur un autre serveur.

Sur le pc, sur lequel tu veux restaurer les données, avec un script du style : (pour récupérer le fichier sql de sauvegarde)

Citation :

$NomFichier="sauvegarde.sql";
$Connexion=ftp_connect($ServeurDistant) or die ("Serveur $ServeurDistant non disponible ! \n");
ftp_login($Connexion, $LoginDistant, $MotDePasseDistant) or die ("Utilisateur $LoginDistant inconnu ou mot de passe non valide ! \n");
ftp_chdir($Connexion, "html/sauv-site");
ftp_get ($Connexion, $NomFichier, $NomFichier, FTP_BINARY);
$ftpclose=ftp_close ($Connexion);


Puis la suite du script qui restaurerait le fichier ainsi récupéré.

tu as la commande ftp_put à ta disposition aussi

http://www.nexen.net/docs/php/annotee/function.ftp-put.php

Posté le : 24/11/2005 19:10

Edité par blueteen sur 25/11/2005 15:34:58
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

113 Personne(s) en ligne (94 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 113 | Plus ...