Page 1 sur 1

Script de dump de BD

Posté : 25 juin 2010, 14:17
par BaLiSTiK
Bonjour,

J'essaie de créér un script permettant de faire un dump d'une base de donnée (MySQL / PostGreSQL), mais je ne trouve pas vraiment quelles options utiliser dans les commande (pg_dump / mysqldump).
voila le script :
function backup(){
		$database = array();
		//$fileContenuDatabase = file_get_contents(FILEDATABASE);
		//if(!empty($fileContenuDatabase)){
			$database = parse_ini_file(FILEDATABASE);
			$psConnect 		= 1; 	//$psConnect;
			$psHost 		= localhost;		//$psHost;
			$psUserName 	= fonfon;	//$psUsername;
			$psMdp 			= *****;		//$psMdp;
			$psDB 			= fonfonblof;	// $psDB;
			$date 			= date("Ymd");
			$backup = BACKUP_BD . "backup_".$date.".sql.gz";
					
			switch($psConnect){
				case 1 :
					$command = "mysqldump -h $host -U postgres $psDB | gzip > $backup";
				break;
				
				case 2 :
					$command = "pg_dump -h $psHost -u $psDB | gzip >  $backup";
				break;	
			}
			
			system($command);
			// Démarre la procédure de téléchargement

			header("Pragma: public");
			header("Expires: 0");
			header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
			header("Cache-Control: public");
			header("Content-Description: File Transfer");
			header("Content-Type: application/gzip");
			header("Content-Disposition: attachment; filename=$backup;");
			header("Content-Transfer-Encoding: binary");
			header("Content-Length: ".filesize($backup));
			//@readfile($backup);
			return LIEN_BACKUP_BD . "backup_".$date.".sql.gz";
		//}
	}
Quand le script est lancé, aucun fichier de backup n'est créé, donc je ne sais pas si c est la commande qui le créé ou alors je dois cree un fichier vide qui sera ensuite rempli par le script ?
Dans PG_admin, le dump fait appel à pg_dump.exe, donc est-ce qu'il peut y avoir un soucis sur ce niveau, selon que le script soit hébergé sur un serveur avec Linux ou Windows ?

Merci d avance ^^

Source principal : tutoriel sur le site du zero

Re: Script de dump de BD

Posté : 25 juin 2010, 14:19
par stealth35
si tu fais juste
echo shell_exec($command);
en enlevant les header et tout, ca donne quoi ?

Re: Script de dump de BD

Posté : 25 juin 2010, 14:23
par BaLiSTiK
Et bien...rien du tout :/. Pour être sur, j ai rajouté du texte devant :
echo '<br />Shel_exec : ' . shell_exec($command);
Résultat sur la page :
Shel_exec :

Re: Script de dump de BD

Posté : 25 juin 2010, 14:41
par stealth35
humm...
et si tu fais juste
echo shel_exec('mysqldump');

Re: Script de dump de BD

Posté : 25 juin 2010, 14:48
par BaLiSTiK
Rien du tout aussi. De la même façon j ai tenté :
shell_exec('pg_dump');
et idem rien.
Mais pour MySQL ça ne m'étonne pas d'un coté car, je ne doit pas avoir MySQL installé, mais par contre, pour postgres c'est plus embetant.

Re: Script de dump de BD

Posté : 25 juin 2010, 14:50
par stealth35
verifie que le chemin des binaires sois bien dans ton path et celui de PHP

Re: Script de dump de BD

Posté : 25 juin 2010, 16:40
par BaLiSTiK
Je ne comprends pas ce que je dois vérifier :/.
Dois-je chercher quelque chose de bien précis dans le phpinfo() ?

Re: Script de dump de BD

Posté : 25 juin 2010, 16:45
par stealth35
Je ne comprends pas ce que je dois vérifier :/.
Dois-je chercher quelque chose de bien précis dans le phpinfo() ?

oui $_SERVER["PATH"]

Re: Script de dump de BD

Posté : 28 juin 2010, 11:49
par BaLiSTiK
En affichant la variable PATH, j ai le lien vers postgres : E:\Programs\Potgres_835\bin;
Or il s'avère que ce lien n'est pas bon, ça devrait être E:\Programs\Postgresql\bin.
Effectivement y a un soucis. Il faut donc changer mon lien dans PHP ? Apache ?

Re: Script de dump de BD

Posté : 28 juin 2010, 11:50
par stealth35
En affichant la variable PATH, j ai le lien vers postgres : E:\Programs\Potgres_835\bin;
Or il s'avère que ce lien n'est pas bon, ça devrait être E:\Programs\Postgresql\bin.
Effectivement y a un soucis. Il faut donc changer mon lien dans PHP ? Apache ?
non c'est le path dans ton systeme, ca se change dans le panneau de configuration -> systeme

Re: Script de dump de BD

Posté : 28 juin 2010, 14:12
par BaLiSTiK
PATH modifié.

Donc, j ai mis mon code sur une page blanche, comme ça, y a rien d'autre du site qui viendra parasiter.
Lorsque je fais
echo '<br>shell : ' . shell_exec($command);
ça ne me retourne rien.

Par contre, si je fais
echo '<br>shell pg' . shell_exec('pg_dump');
ça tourne indéfiniment.

Mais avant, ne faudrait-il pas vérifier la syntaxe de la commande de dump ?
Elle est comme ça :
pg_dump -h localhost -u fonfonblog | gzip > J:/blablabla.../app/webroot/backup/backup_20100628.sql.gz
Un fichier est bien créé au bon emplacement mais vide.
Je vais essayer de chercher la syntaxe correcte du pg_dump. Mais le soucis avec shell_exec, je ne sais pas du tout, n'ayant jamais utilisé cette commande, je sèche :/

Re: Script de dump de BD

Posté : 01 juil. 2010, 09:20
par BaLiSTiK
J ai modifié les commande pour qu'elles soient bonne d'un point de vue syntaxe. ça donne :
		switch($psConnect){
			case 1 :
				$command = "mysqldump -h $psHost -u $psUserName -p $psMdp $psDB > $backup;";
			break;
						
			case 2 :
				$command = "pg_dump $psDB > $backup;";
			break;
		}	
Sur mon pc perso, j ai testé en ligne de commande le pg_dump et ça a fonctionné nickel. Mais j ai pas testé le programme (j'ai qq soucis avec mon serveur apache mais ça c est un autre pbl :p).
En tout cas, sur le pc sur lequel je suis (celui du taff), le script génére toujours un fichier vide :(