Accueil > > > PROGRAMMER DES COPIES DE TABLES SUR UNE BASE MYSQL
PROGRAMMER DES COPIES DE TABLES SUR UNE BASE MYSQL
Information sur la source
Description
Intervenant à titre amical sur des sites persos en PHP/MySQL, j'ai rencontré le problème de prévoir un minimum de sauvegarde des données à l'intérieur de la même base. La solution présentée ici permet de programmer simplement des copies périodiques des tables voulues de la BDD. Tout d'abord, il faut ajouter deux tables à la BDD, que je nomme `maintenance` et `sauvegardes`. La première contient le nom des tables à copier et le délai entre deux sauvegardes (en jours). Le webmaster n'a plus qu'à y indiquer les tables dont il souhaite une copie et la périodicité. La seconde table enregistre pour chaque table à sauvegarder la date de la dernière copie. Ensuite vous devez appeler la fonction PHP svg_tables(), par exemple sur votre page d'accueil. A chaque fois qu'un internaute consulte cette page, svg_tables() vérifie s'il y a des tables à copier. Si c'est le cas, chaque table est copiée dans une nouvelle portant le même nom suivi de _copie, en écrasant au besoin les copies précédentes.
Source
- -- Code SQL de création des deux tables `maintenance` et `sauvegardes`
- CREATE TABLE maintenance (
- nom_table varchar(255) NOT NULL ,
- delai tinyint(3) unsigned NOT NULL default 0,
- PRIMARY KEY (nom_table)
- )
-
- CREATE TABLE sauvegardes (
- nom_table varchar(255) NOT NULL ,
- date_copie datetime NOT NULL ,
- PRIMARY KEY (nom_table)
- )
-
- // fonction PHP qui effectue la copie des tables selon les indications de la table maintenance
- function svg_tables() {
- global $BDD ; // je suppose qu'une connexion à la base est ouverte et référencée par $BDD
- $sql = "SELECT M.nom_table
- FROM maintenance M
- LEFT JOIN sauvegardes S ON M.nom_table = S.nom_table
- WHERE M.delai > 0
- AND (S.date_copie IS NULL
- OR CURDATE() > DATE_ADD(S.date_copie, INTERVAL delai DAY)
- )" ;
- $req = mysql_query($sql, $BDD) ;
-
- while ($lig = mysql_fetch_array($req) ) {
- $table = $lig['nom_table'] ;
- $sql = "DROP TABLE IF EXISTS {$table}_copie " ;
- mysql_query($sql, $BDD) ;
- $sql = "CREATE TABLE {$table}_copie SELECT * FROM $table " ;
- mysql_query($sql, $BDD) ;
- $sql = "REPLACE INTO sauvegardes (nom_table, date_copie) VALUES ('$table', CURDATE() ) " ;
- mysql_query($sql, $BDD) ;
- }
- mysql_free_result($req) ;
- }
-- Code SQL de création des deux tables `maintenance` et `sauvegardes`
CREATE TABLE maintenance (
nom_table varchar(255) NOT NULL ,
delai tinyint(3) unsigned NOT NULL default 0,
PRIMARY KEY (nom_table)
)
CREATE TABLE sauvegardes (
nom_table varchar(255) NOT NULL ,
date_copie datetime NOT NULL ,
PRIMARY KEY (nom_table)
)
// fonction PHP qui effectue la copie des tables selon les indications de la table maintenance
function svg_tables() {
global $BDD ; // je suppose qu'une connexion à la base est ouverte et référencée par $BDD
$sql = "SELECT M.nom_table
FROM maintenance M
LEFT JOIN sauvegardes S ON M.nom_table = S.nom_table
WHERE M.delai > 0
AND (S.date_copie IS NULL
OR CURDATE() > DATE_ADD(S.date_copie, INTERVAL delai DAY)
)" ;
$req = mysql_query($sql, $BDD) ;
while ($lig = mysql_fetch_array($req) ) {
$table = $lig['nom_table'] ;
$sql = "DROP TABLE IF EXISTS {$table}_copie " ;
mysql_query($sql, $BDD) ;
$sql = "CREATE TABLE {$table}_copie SELECT * FROM $table " ;
mysql_query($sql, $BDD) ;
$sql = "REPLACE INTO sauvegardes (nom_table, date_copie) VALUES ('$table', CURDATE() ) " ;
mysql_query($sql, $BDD) ;
}
mysql_free_result($req) ;
}
Conclusion
Pour être un peu plus précis, une table est copiée dans deux cas : - le délai de sauvegarde a été atteint la veille - la table n'a jamais été copiée
Si, le 1er août à 11h, vous ajoutez une table avec copie quotidienne (delai = 1), la première copie aura lieu dès que quelqu'un appelera la page avec le déclencheur, et la suivante se produira à partir du 3 août à 0h (la condition étant Curdate > date_copie + 1 j).
A noter qu'un délai de 0 désactive la copie de la table en question ; le délai minimum est donc de 1.
Enfin, si votre craignez de ne pas avoir au moins un visiteur chaque jour, il ne vous reste plus qu'à programmer un cron pour appeler votre page régulièrement... ou à la mettre en page d'accueil de votre navigateur ;-)
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
mysql et php [ par nico606 ]
Salut g un probleme je debute en php et je viens de charger un espace membre pour mon site il est evidemment en php et Mysql y a une page d'installati
Select dans deux table [ par speedylol ]
Bonjour j aimerais selectionner un champs ou plusieur de deux table mes je vois pas comment faire cela sauriez vous m'aider merci? car je débute en ph
besoins d'aide pour E-commerce [ par speedylol ]
Bonjour j aimerais selectionner un champs ou plusieur de deux table mes je vois pas comment faire cela sauriez vous m'aider merci?car je débute en php
Creer MySQL database [ par pluton83fr ]
Slt Je suis un debutant en php, Je suis en train d installer un portail :Neocrome http://www.neocrome.net Et il me dise ca!!Mais le pb c'est que je n
Création de table [ par chatainsim ]
Bonsoir, j'ai une petite question, comment crée des tables mysql à l'aide du php ? En fait j'aimerais pouvoir créer une installation au
Création de table [ par chatainsim ]
Bonsoir, j'ai une petite question, comment crée des tables mysql à l'aide du php ? En fait j'aimerais pouvoir créer une installation au
pb DELETE requete sql [ par kyript ]
Bonjours à tous voila mon problème j'ai un script avec un formulaire qui met a jour une table de la bdd. A la fin de ce script j'ai un "i
Probleme recuperation de l'id d'une table pour insérer dans une autre par la methode update [ par Alpha911 ]
Bonjour,Je test plusieurs methodes pour pouvoir prendre l'id d'une table qui et la recopier dans une autre table j'ai 2 tables UTILISATEUR et une autr
Afficher données de 2 tables dans un tableau [ par Chewba ]
Bonjour, Je cherche comment je peux faire pour afficher les données provenant de 2 tables différentes dans un tableau.J'ai une table Roster_members et
Affichage du plut grand au plutspetit [ par f1actu ]
Bonjour alors , j'ai une table "cla" et dans cette table cla , un champs qui se nomme "total" et je voudrai qui s'affiche du plus grand au plus petit
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|