Comment sauvegarder ma base phpmyadmin de façon automatique [Résolu]

Signaler
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
-
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
-
bonjour a tous
je viens de découvrir qu il existait un moyen en ligne de commande pour sauvegarder sa base de donnée de phpmyadmin avec mysqldum
qui pourrait m expliquer la procédure
j ai essaye avec ceci
mais aucune archive n a été crée
https://www.webbax.ch/2016/08/24/realiser-un-backup-automatique-de-vos-bases-de-donnees-mysql/

19 réponses

Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Bonjour,

Je pense que tout est marqué dans cette doc.
Que n'as tu pas compris ?
As tu vérifié que la fonction exec était autorisée sur le serveur ?
Tu as mis ton site sur un hébergement.. ou en local sur ton ordi ?
As tu configuré le script php ( les 4 variables ) en y mettant les infos de connexion à ta bdd ?
As tu créé la tâche planifié ?
Si tu le lances à la main (sans les tâches planifiées ) est-ce que ça marche ou ça t'affiche une erreur ?
Bref, il faudrait un peu plus de détails....
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
bonsoir jordane
merci pour m avoir éclairé
je m suis donc déjà arrêté avec la fonction exec
et je suis allé voir la documentation de php pour savoir comment je pourrais la tester
<?php
// Affiche le nom d'utilisateur qui fait tourner le processus php/http
// (sur un système ayant "whoami" dans le chemin d'exécutables)
$output=null;
$retval=null;
exec('whoami', $output, $retval);
echo "Returned with status $retval and output:\n";
print_r($output);
?>


et le résultat ne s est pas fait attendre
Attention: exec () a été désactivé pour des raisons de sécurité dans ...

donc cela est mort avec cette technique

existe t il un autre moyen ??
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Oui.
Tu pourrais trouver voir même écrire toi-même un script PHP qui ferait la sauvegarde de ta base
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
Jordane
merci pour ta réponse
mais avec le peu de connaissance que j ai comment veux tu que je puisse pondre un truc pareil mdrrrr
je vais regarder si je vois un script qui traine
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Tu sais comment exécuter des requêtes SQL en PHP ?
Tu sais comment écrire dans un fichier depuis un script PHP ?

La réponse devrait être oui vu tous les codes PHP que tu as déjà poster sur ce forum.

Je pense que ceci devrait correspondre à tes besoins
https://blog.site-web-creation.net/mysql-backup/

Pense bien à tout lire cette fois :-)
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
oui en effet Jordane
merci pour la réponse , l astuce et le lien que j étais justement en train de tester

transmission de pensée mdrrr

la sauvegarde a bien fonctionner

demain je regarde a cela

Si votre hébergeur ne propose pas ce type de prestation, Google vous proposera quelques adresses avec la recherche suivante : crontab gratuit.

passe une bonne nuit et merci d être la pour nous
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
bonjour a tous
voila je viens de découvrir que sur mon hébergeur je pouvais lui demander d effectuer des taches cron
pour des buts d essai je lui demande d exécuter le script de ma page php une fois toutes les 10 mm mais cela ne fonctionne pas
pourtant lorsque je lance mon fichier de sauvegarde php de façon manuelle cela fonctionne
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Ok
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
je viens de voir qu il fallait que je fasse ceci

https://www.000webhost.com/forum/t/cron-job/23865/15

donc dans mon cas si j ai bien compris

étape 1

créer un fichier php cron_caller3.php

étape 2
y mettre ce code avec mon lien vers mon script
<? php

file_get_contents (' http://dclxvi.co.uk/httpdocs/crons/cron_exemple.php ');


etape 3

et dans la tache de cron indiquer le lien du fichier "cron_caller3.php"

mais cela ne fonctionne pas non plus
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Lis la réponse et non la question dans le lien que tu nous as donné.
ça devrait aider je pense
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
merci pour la reponse
oui c est bien ce que j ai fait mais sans succes
c est bien ce qu il explique que j ai fais
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
C'est à dire ?
Tu as fais quoi exactement ??

Pense que je ne suis pas dans ta tête ... ni devant ton écran... et que je n'ai pas de dons de divination... il te faut donc être un peu (beaucoup !! ) plus précis dans tes explications :!
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
merci de l aide
bon je vais essayer d etre hyper clair

en fait j ai dans un premier temps
j ai crée un fichier test22.php

dans lequel mon script ce trouve , celui du site

lors du premier essai j ai configure cron avec le chemin ou ce trouve ce fichier
mais cela n a pas fonctionne(test22.php)

ensuite en cherchant je pensais avoir trouve cette solution
https://www.000webhost.com/forum/t/cron-job/23865/15

j ai donc créer un autre fichier php "cron_caller.php"
avec l intérieur de celui ci


<? php
file_get_contents (' https://peche-perle.000webhostapp.com/test22.php');



j ai donc indiquer a cron l emplacement de ce fichier cron_caller.php

mais cela ne fonctionne pas non plus
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Je réitère donc ma réponse précédente...
Dans le lien que tu as trouvé tu as appliqué ce que l'utilisateur avait mis dans sa question...
Or, il faut appliquer la réponse qui lui a été donnée...
Dans la cron, il faut bien mettre le chemin vers ton script PHP mais en le préfixe en par le programme Php.
Un truc du genre :
php -f chemin/vers/ton/script.php


Et au cas où, il faut voir la documentation de ton hébergeur concernant la mise en place de tâches cron.
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
jordane merci

je comprends pas comment j ai pas vu cette reponse avec cette ligne

donc cela commence a être plus clair

mais je me retrouve devant un soucis

quoi mettre a la place de YOUR_CPANEL_USERNAME
mon pseudo ??

car mon fichier est situe a cet emplacement public_html/file.php

public_html étant la racine ...

de plus lorsque je regarde ou je dois rentrer le lien ca semble bizarre aussi
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
ah voila
je pense avoir compris mon erreur
mais cela ne solutionne pas le soucis

j ai donc repris ce morceau de code qui est dans le fichier cron_caller.php

php -f /home/YOUR_CPANEL_USERNAME/public_html/test22.php


et j ai essaye de remplacer
YOUR_CPANEL_USERNAME
par le nom d utilisateur
par l id de la base de donnée
par le nom de la base de donnée
mais rien ne se sauvegarde
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
En faisant une très très longue recherche d'environ 4 secondes je suis tombée là-dessus
https://www.000webhost.com/forum/t/how-to-create-a-cron-job/80320

Donc, via cette interface, il suffit en effet, de ne mettre que le fichier php à exécuter.
Si il est à la racine de ton site sinon il faut mettre le chemin à partir de la racine vers ce fichier.

Si ça ne fonctionne toujours pas, il faudra
- nous montrer à quel endroit se situe le fichier par rapport à la racine de ton site
- que tu nous montre une capture écran de ce que tu as paramétré
- que tu nous montre le contenu du script.


Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
bonsoir jordane
merci pour l aide
ah ben oui cette page c est un de mes premiers essai mais qui n a rien donne et bien évidement le script est bien a la racine du site

je pensais aussi que cela serait aussi simple que cela ...

enfin soit

voila ou ce situe le fichier avec le script de backup il s appelle "test22.php"
comme tu peux le voir il est bien a la racine



ensuite le paramétrage dans cron ou j appelle le fichier cron_caller.php
qui contient ceci

<?php
file_get_contents('php -f /home/id15539226/public_html/test22.php');
?>



mais je ne suis pas rester les bras croises j ai essaye une multitude de choses
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Mais non... où as tu été chercher qu'il fallait mettre cette ligne de code
file_get_contents('php -f /home/id15539226/public_html/test22.php');


Dans la fenêtre : https://img-19.ccm2.net/enGa34W7wLUEwAphzzv4HTkuT5I=/9574140b62ad496ab5b3d6548358db54/ccm-ugc/ecran6.jpg

C''est directement test22.php qu'il faut mettre à la place de my-script.php

Reste à nous montrer le code de ton fichier test22.php
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
merci de ton aide
comme je te l ai explique a plusieurs reprises
j ai tester de cette façon en indiquant
test22.php
mais cela ne fonctionne pas



le code que je t ai montre n est rien d autres qu un essai parmi tant d autres

voici le contenu de test22.php
c est le même fichier du lien que nous avions trouvé en même temps et qui fonctionne si je le lance de façon manuelle

<?php
/**
 * Sauvegarde MySQL
 *
 * @package	BackupMySQL
 * @author	Benoit Asselin <contact@ab-d.fr>
 * @version	backup.php, 2013/01/13
 * @link	http://www.ab-d.fr/
 *
 */


error_reporting(E_ALL);
ini_set('display_errors', true);


/**
 * Sauvegarde MySQL
 */
class BackupMySQL extends mysqli {
	
	/**
	 * Dossier des fichiers de sauvegardes
	 * @var string
	 */
	protected $dossier;
	
	/**
	 * Nom du fichier
	 * @var string
	 */
	protected $nom_fichier;
	
	/**
	 * Ressource du fichier GZip
	 * @var ressource
	 */
	protected $gz_fichier;
	
	
	/**
	 * Constructeur
	 * @param array $options
	 */
	public function __construct($options = array()) {
		$default = array(
			'host' => ini_get('mysqli.default_host'),
			'username' => ini_get('mysqli.default_user'),
			'passwd' => ini_get('mysqli.default_pw'),
			'dbname' => '',
			'port' => ini_get('mysqli.default_port'),
			'socket' => ini_get('mysqli.default_socket'),
			// autres options
			'dossier' => './',
			'nbr_fichiers' => 5,
			'nom_fichier' => 'backup'
			);
		$options = array_merge($default, $options);
		extract($options);
		
		// Connexion de la connexion DB
		@parent::__construct($host, $username, $passwd, $dbname, $port, $socket);
		if($this->connect_error) {
			$this->message('Erreur de connexion (' . $this->connect_errno . ') '. $this->connect_error);
			return;
		}
		
		// Controle du dossier
		$this->dossier = $dossier;
		if(!is_dir($this->dossier)) {
			$this->message('Erreur de dossier "' . htmlspecialchars($this->dossier) . '"');
			return;
		}
		
		// Controle du fichier
		$this->nom_fichier = $nom_fichier . date('Ymd-His') . '.sql.gz';
		$this->gz_fichier = @gzopen($this->dossier . $this->nom_fichier, 'w');
		if(!$this->gz_fichier) {
			$this->message('Erreur de fichier "' . htmlspecialchars($this->nom_fichier) . '"');
			return;
		}
		
		// Demarrage du traitement
		$this->sauvegarder();
		$this->purger_fichiers($nbr_fichiers);
	}
	
	/**
	 * Message d'information ( commenter le "echo" pour rendre le script invisible )
	 * @param string $message HTML
	 */
	protected function message($message = ' ') {
		echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>';
	}
	
	/**
	 * Protection des quot SQL
	 * @param string $string
	 * @return string
	 */
	protected function insert_clean($string) {
		// Ne pas changer l'ordre du tableau !!!
		$s1 = array( "\\"	, "'"	, "\r", "\n", );
		$s2 = array( "\\\\"	, "''"	, '\r', '\n', );
		return str_replace($s1, $s2, $string);
	}
	
	/**
	 * Sauvegarder les tables
	 */
	protected function sauvegarder(){
		$this->message('Sauvegarde...');
		
		$sql  = '--' ."\n";
		$sql .= '-- '. $this->nom_fichier ."\n";
		gzwrite($this->gz_fichier, $sql);
		
		// Liste les tables
		$result_tables = $this->query('SHOW TABLE STATUS');
		if($result_tables && $result_tables->num_rows) {
			while($obj_table = $result_tables->fetch_object()) {
				$this->message('- ' . htmlspecialchars($obj_table->{'Name'}));
				
				// DROP ...
				$sql  = "\n\n";
				$sql .= 'DROP TABLE IF EXISTS `'. $obj_table->{'Name'} .'`' .";\n";

				// CREATE ...
				$result_create = $this->query('SHOW CREATE TABLE `'. $obj_table->{'Name'} .'`');
				if($result_create && $result_create->num_rows) {
					$obj_create = $result_create->fetch_object();
					$sql .= $obj_create->{'Create Table'} .";\n";
					$result_create->free_result();
				}

				// INSERT ...
				$result_insert = $this->query('SELECT * FROM `'. $obj_table->{'Name'} .'`');
				if($result_insert && $result_insert->num_rows) {
					$sql .= "\n";
					while($obj_insert = $result_insert->fetch_object()) {
						$virgule = false;
						
						$sql .= 'INSERT INTO `'. $obj_table->{'Name'} .'` VALUES (';
						foreach($obj_insert as $val) {
							$sql .= ($virgule ? ',' : '');
							if(is_null($val)) {
								$sql .= 'NULL';
							} else {
								$sql .= '\''. $this->insert_clean($val) . '\'';
							}
							$virgule = true;
						} // for
						
						$sql .= ')' .";\n";
						
					} // while
					$result_insert->free_result();
				}
				
				gzwrite($this->gz_fichier, $sql);
			} // while
			$result_tables->free_result();
		}
		gzclose($this->gz_fichier);
		$this->message('<strong style="color:green;">' . htmlspecialchars($this->nom_fichier) . '</strong>');
		
		$this->message('Sauvegarde terminée !');
	}
	
	/**
	 * Purger les anciens fichiers
	 * @param int $nbr_fichiers_max Nombre maximum de sauvegardes
	 */
	protected function purger_fichiers($nbr_fichiers_max) {
		$this->message();
		$this->message('Purge des anciens fichiers...');
		$fichiers = array();
		
		// On recupere le nom des fichiers gz
		if($dossier = dir($this->dossier)) {
			while(false !== ($fichier = $dossier->read())) {
				if($fichier != '.' && $fichier != '..') {
					if(is_dir($this->dossier . $fichier)) {
						// Ceci est un dossier ( et non un fichier )
						continue;
					} else {
						// On ne prend que les fichiers se terminant par ".gz"
						if(preg_match('/\.gz$/i', $fichier)) {
							$fichiers[] = $fichier;
						}
					}
				}
			} // while
			$dossier->close();
		}
		
		// On supprime les  anciens fichiers
		$nbr_fichiers_total = count($fichiers);
		if($nbr_fichiers_total >= $nbr_fichiers_max) {
			// Inverser l'ordre des fichiers gz pour ne pas supprimer les derniers fichiers
			rsort($fichiers);
			
			// Suppression...
			for($i = $nbr_fichiers_max; $i < $nbr_fichiers_total; $i++) {
				$this->message('<strong style="color:red;">' . htmlspecialchars($fichiers[$i]) . '</strong>');
				unlink($this->dossier . $fichiers[$i]);
			}
		}
		$this->message('Purge terminée !');
	}
	
}



// Instance de la classe ( a copier autant que necessaire, mais attention au timeout )
// Rq: pour les parametres, reprendre une ou plusieurs cles de $default ( dans la methode __construct() )
new BackupMySQL(array(
	'username' => 'id1il',
	'passwd' => 'Ssam',
	'dbname' => 'id155'
	));

//new BackupMySQL(array(
//	'username' => 'root',
//	'passwd' => 'root',
//	'dbname' => 'mabase',
//	'dossier' => './dossier2/'
//	));



?>
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Tu peux modifier la fonction message comme ceci et lancer le script à la main (via le navigateur) pour tester

	protected function message($message = ' ') {
		echo '<p style="padding:0; margin:1px 10px; font-family:sans-serif;">'. $message .'</p>';
    file_put_contents( __DIR__ . 'log_'.date("Y-m-d").'.log', .date("Y-m-d H:i:s") . ' - ' . $message, FILE_APPEND);
	}
  

Logiquement, un fichier de log, à la racine de ton site devrait se créer. (ouvre le pour voir ce qu'il contient ) (et éventuellement montre le nous )

Ensuite, supprime le fichier via le FTP, puis regarde si, via la tâche planifiée, les logs se crééent ( et si oui, regarde ce qui s'y affiche )...
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
merci jordane pour le code mais j ai une erreur de syntaxe
j ai essaye de trouver mais sans succès

Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Dans ce cas il faut la corriger ...

Et en effet, il y a un point en trop
 file_put_contents( __DIR__ . 'log_'.date("Y-m-d").'.log', date("Y-m-d H:i:s") . ' - ' . $message, FILE_APPEND);

Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
jordane merci pour la correction
voici donc ce que contient el fichier log
2021-05-04 20:35:43 - Sauvegarde...2021-05-04 20:35:43 - - commentaire2021-05-04 20:35:43 - - galerie_images2021-05-04 20:35:43 - - password_recover2021-05-04 20:35:43 - - pecheurs_perle2021-05-04 20:35:43 - - recup_mdp2021-05-04 20:35:43 - - utilisateurs2021-05-04 20:35:43 - <strong style="color:green;">backup20210504-203543.sql.gz</strong>2021-05-04 20:35:43 - Sauvegarde terminée !2021-05-04 20:35:43 -  2021-05-04 20:35:43 - Purge des anciens fichiers...2021-05-04 20:35:43 - Purge terminée !2021-05-04 20:36:48 - Sauvegarde...2021-05-04 20:36:48 - - commentaire2021-05-04 20:36:48 - - galerie_images2021-05-04 20:36:48 - - password_recover2021-05-04 20:36:48 - - pecheurs_perle2021-05-04 20:36:48 - - recup_mdp2021-05-04 20:36:48 - - utilisateurs2021-05-04 20:36:48 - <strong style="color:green;">backup20210504-203648.sql.gz</strong>2021-05-04 20:36:48 - Sauvegarde terminée !2021-05-04 20:36:48 -  2021-05-04 20:36:48 - Purge des anciens fichiers...2021-05-04 20:36:48 - Purge terminée !


il y a un fichier de backup qui est venu se créer apparemment en même temps
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
ça c'est quand tu le lances "à la main" ?
Et donc, supprime le fichier, puis remet en place la cron et regarde sii le fichier se créé et ce qu'il contient
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452 >
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021

Ah, et fais une dernière modif sur la ligne
 file_put_contents( __DIR__ . 'log_'.date("Y-m-d").'.log', date("Y-m-d H:i:s") . ' - ' . $message . PHP_EOL, FILE_APPEND);

ça permettra d'avoir des retours à la ligne dans le fichier.
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
merci jordane
voila j ai donc remis la cron en fonctionnement automatique
mais rien ne se produit
Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Tu n'as même pas le fichier de log ?
Tu as bien pointé vers test22.php cette fois ?
Peux tu nous montrer ce qui est configuré en cron désormais ?
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
non rien
même pas de fichier log
oui bien sur je pointe bien vers test22.php

Messages postés
32302
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
4 mai 2021
3 452
Ben là, va falloir voir avec le support de ton hébergeur...
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
oui en effet mais bon entre temps je viens de tester une solution alternative

car je viens de lire des articles comme quoi le service mail et le service cron avaient souvent des soucis

j ai donc trouve ce service gratuit
https://cron-job.org/en/members/

que je vais tester et je reviens dire quoi
Messages postés
2527
Date d'inscription
lundi 14 mars 2011
Statut
Membre
Dernière intervention
4 mai 2021
134
voila donc avec cette extension très simple d utilisation cela fonctionne
j ai juste du indiquer ou était le fichier pour le backup

encore merci jordane

bonne nuit